首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【仓颉三方库】 数据解析—— jwt4cj

  • 25-04-22 18:21
  • 3161
  • 6843
juejin.cn

介绍

一个基于 RFC 7519 的 JSON Web Token 和 JSON Web Signature的仓颉库。

特性

  • 支持 JWT 创建与解析
  • 支持 Payload 校验
  • 支持 HMAC 算法签名及验证
  • 支持 RSA 算法签名及验证
  • 支持 ECDSA 算法签名及验证

路线

架构

源码目录

bash
代码解读
复制代码
. ├── README.md ├── doc ├── src │   └── jwt │   ├── algorithms │   ├── common │   ├── exception │   ├── impl │   │   └── json │   ├── interfaces │   └── utils └── test ├── HLT ├── LLT └── UT
  • doc存放库的设计文档、提案、库的使用文档
  • src存放库源码目录
  • test存放存放测试用例,包括HLT用例、LLT 用例和UT用例

接口说明

主要是核心类和成员函数说明,详情见 API

使用说明

编译(win/linux)

代码解读
复制代码
cjpm build

功能示例

jwt创建功能示例

erlang
代码解读
复制代码
import std.collection.* import std.time.* import encoding.json.* import jwt4cj.* main(){ let jwtStr = JWT.create() .withHeader(HashMap([("k1","v1")])) .withKeyId("keyId") .withIssuer("issuer") .withSubject("subject") .withAudience(["aud1", "aud2"]) .withExpiresAt(DateTime.ofEpoch(second: 3673835050, nanosecond: 0)) .withNotBefore(DateTime.ofEpoch(second: 1673835050, nanosecond: 0)) .withIssuedAt(DateTime.ofEpoch(second: 1673835050, nanosecond: 0)) .withJWTId("jwtId") .withClaim("bool", true) .withClaim("ddd", "dfdddff") .withClaim("int64", 64) .withClaim("float64", 3.14) .withClaim("String", "abaaba") .withClaim("time", DateTime.ofEpoch(second: 1673850000, nanosecond: 0)) .withClaim("map", HashMap([("mk2","mv2")])) .withClaim("list", ArrayList([56.51,41.96])) .withNullClaim("null") .withArrayClaim("arraystring", ["astr1","astr2"]) .withArrayClaim("arrayint", [684,64]) .withPayload(HashMap([("pk1","pv1"),("pk2","pv2")])) .sign(Algorithm.HMAC256("admin")) println(jwtStr) 0 }
代码解读
复制代码
ewogICJrMSI6ICJ2MSIsCiAgImtpZCI6ICJrZXlJZCIsCiAgImFsZyI6ICJIUzI1NiIsCiAgInR5cCI6ICJKV1QiCn0.ewogICJpc3MiOiAiaXNzdWVyIiwKICAic3ViIjogInN1YmplY3QiLAogICJhdWQiOiBbCiAgICAiYXVkMSIsCiAgICAiYXVkMiIKICBdLAogICJleHAiOiAzNjczODM1MDUwLAogICJuYmYiOiAxNjczODM1MDUwLAogICJpYXQiOiAxNjczODM1MDUwLAogICJqdGkiOiAiand0SWQiLAogICJib29sIjogdHJ1ZSwKICAiZGRkIjogImRmZGRkZmYiLAogICJpbnQ2NCI6IDY0LAogICJmbG9hdDY0IjogMy4xNCwKICAiU3RyaW5nIjogImFiYWFiYSIsCiAgInRpbWUiOiAxNjczODUwMDAwLAogICJtYXAiOiB7CiAgICAibWsyIjogIm12MiIKICB9LAogICJsaXN0IjogWwogICAgNTYuNTEsCiAgICA0MS45NgogIF0sCiAgIm51bGwiOiBudWxsLAogICJhcnJheXN0cmluZyI6IFsKICAgICJhc3RyMSIsCiAgICAiYXN0cjIiCiAgXSwKICAiYXJyYXlpbnQiOiBbCiAgICA2ODQsCiAgICA2NAogIF0sCiAgInBrMSI6ICJwdjEiLAogICJwazIiOiAicHYyIgp9.faVUD-cYR4nvaMYv5HMYk0pVfR9qRsCOWz28tgPoqdM

DD一下:欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。

erlang
代码解读
复制代码
`欢迎大家关注公众号<程序猿百晓生>,可以了解到以下知识点。` 1.OpenHarmony开发基础 2.OpenHarmony北向开发环境搭建 3.鸿蒙南向开发环境的搭建 4.鸿蒙生态应用开发白皮书V2.0 & V3.0 5.鸿蒙开发面试真题(含参考答案) 6.TypeScript入门学习手册 7.OpenHarmony 经典面试题(含参考答案) 8.OpenHarmony设备开发入门【最新版】 9.沉浸式剖析OpenHarmony源代码 10.系统定制指南 11.【OpenHarmony】Uboot 驱动加载流程 12.OpenHarmony构建系统--GN与子系统、部件、模块详解 13.ohos开机init启动流程 14.鸿蒙版性能优化指南 .......

jwt解析功能示例

scss
代码解读
复制代码
import jwt4cj.* let token = "CnsKICAiazEiOiAidjEiLAogICJraWQiOiAiYWxnb3JpdGhtLmdldFNpZ25pbmdLZXlJZCgpIiwKICAiYWxnIjogIm5vbmUiLAogICJ0eXAiOiAiSldUIiwKICAiY3R5IjogIkpXVCIKfQo.ewogICJpc3MiOiAiaXNzdWVyIiwKICAic3ViIjogInN1YmplY3QiLAogICJhdWQiOiBbCiAgICAiYXVkMSIsCiAgICAiYXVkMiIKICBdLAogICJleHAiOiAxNjczODM1MDkwLAogICJuYmYiOiAxNjczODM1MDUwLAogICJpYXQiOiAxNjczODM1MDAwLAogICJqdGkiOiAiand0SWQiLAogICJib29sIjogdHJ1ZSwKICAiaW50NjQiOiA2NCwKICAiZmxvYXQ2NCI6IDMuMTQwMDAwLAogICJTdHJpbmciOiAiYWJhYWJhIiwKICAidGltZSI6IDE2NzM4NTAwMDAsCiAgIm1hcCI6IHsKICAgICJtazIiOiAibXYyIgogIH0sCiAgImxpc3QiOiBbCiAgICA1Ni41MTAwMDAsCiAgICA0MS45NjAwMDAKICBdLAogICJudWxsIjogbnVsbCwKICAiYXJyYXlzdHJpbmciOiBbCiAgICAiYXN0cjEiLAogICAgImFzdHIyIgogIF0sCiAgImFycmF5aW50IjogWwogICAgNjg0LAogICAgNjQKICBdLAogICJwazEiOiAicHYxIiwKICAicGsyIjogInB2MiIKfQ==." main() { let decoder = JWT.decode(token) println(decoder.getAlgorithm()) // none println(decoder.getType()) // JWT println(decoder.getContentType()) // JWT println(decoder.getHeaderClaim("k1").asString()) // v1 println(decoder.getIssuer()) // issuer println(decoder.getSubject()) // subject println(decoder.getAudience().size) // 2 println(decoder.getExpiresAt()) // println(decoder.getNotBefore()) // println(decoder.getIssuedAt()) // println(decoder.getId()) // jwtId println(decoder.getClaim("bool").asBool()) // true println(decoder.getClaims().size) // 19 0 }

yaml
代码解读
复制代码
none JWT JWT v1 issuer subject 2 2023-01-16T10:11:30+08:00 2023-01-16T10:10:50+08:00 2023-01-16T10:10:00+08:00 jwtId true 19

jwt校验功能示例

erlang
代码解读
复制代码
import jwt4cj.* let token = "ewogICJrMSI6ICJ2MSIsCiAgImtpZCI6ICJrZXlJZCIsCiAgImFsZyI6ICJub25lIiwKICAidHlwIjogIkpXVCIKfQ.ewogICJpc3MiOiAiaXNzdWVyIiwKICAic3ViIjogInN1YmplY3QiLAogICJhdWQiOiBbCiAgICAiYXVkMSIsCiAgICAiYXVkMiIKICBdLAogICJleHAiOiAzNjczODM1MDUwLAogICJuYmYiOiAxNjczODM1MDUwLAogICJpYXQiOiAxNjczODM1MDAwLAogICJqdGkiOiAiand0SWQiLAogICJib29sIjogdHJ1ZSwKICAiZGRkIjogImRmZGRkZmYiLAogICJpbnQ2NCI6IDY0LAogICJmbG9hdDY0IjogMy4xNDAwMDAsCiAgIlN0cmluZyI6ICJhYmFhYmEiLAogICJ0aW1lIjogMTY3Mzg1MDAwMCwKICAibWFwIjogewogICAgIm1rMiI6ICJtdjIiCiAgfSwKICAibGlzdCI6IFsKICAgIDU2LjUxMDAwMCwKICAgIDQxLjk2MDAwMAogIF0sCiAgIm51bGwiOiBudWxsLAogICJhcnJheXN0cmluZyI6IFsKICAgICJhc3RyMSIsCiAgICAiYXN0cjIiCiAgXSwKICAiYXJyYXlpbnQiOiBbCiAgICA2ODQsCiAgICA2NAogIF0sCiAgInBrMSI6ICJwdjEiLAogICJwazIiOiAicHYyIgp9." main() { try { let require = JWT.require(Algorithm.none()) require.withClaim("String","abaaba") .withArrayClaim("arraystring",["astr1","astr2"]) .withArrayClaim("arrayint", [684,64]) .withClaim("time", DateTime.ofEpoch(second: 1673850000, nanosecond: 0)) .withClaim("bool", true) .withClaim("int64", 64) .withClaim("float64", 3.14) .withIssuer("issuer") // 签发对象 .withAudience(["aud1"]) // 接收全部对象 ["aud1", "aud3"] false .withAnyOfAudience(["aud1", "aud3"]) // 接收部分对象 .withSubject("subject") .withJWTId("jwtId") .withClaimPresence("ddd") .acceptExpiresAt(111111) .acceptLeeway(111111) // 设置默认时间 let verifier: JWTVerifier = require.build() verifier.verify(token) return 0 } catch (e: TokenExpiredException) { println(e.message) return 2 } catch (e: Exception) { return 3 } 0 }
注:本文转载自juejin.cn的别说我什么都不会的文章"https://juejin.cn/post/7495701350479806518"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

140
Android
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top