- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想生成 JWT 并使用 HMAC_SHA256 对其进行签名。对于该任务,我必须使用 jose4j .我尝试使用以下方法基于 secret 生成 key :
SecretKeySpec key = new SecretKeySpec(("secret").getBytes("UTF-8"), AlgorithmIdentifiers.HMAC_SHA512);
但它生成 40 位 key ,而使用 HMAC_SHA256 签名需要 512 位 key 。
最佳答案
Section 3.2 of JWA / RFC 7518表示必须将与散列输出大小相同或更大的 key 与 JWS HMAC SHA-2 算法一起使用(即,“HS256”为 256 位,384 位/“HS384”,& 512 位/“HS512”)。遵循 IETF 和 NIST 的建议通常是个好主意。粗略地说,HMAC 的安全性来自散列输出的大小和 key 长度,以较小者为准。因此,使用“secret”的字节作为 key 会给你一个只有 48 位长的 key ,实际上,提供的安全性甚至比它低得多,因为它是一个字典词,不管你使用的 HMAC SHA-2 算法的强度如何选择。
默认 jose4j强制执行 JWA/RFC 7518 规定的最小 key 大小。但是,正如 Hans 指出的那样,有一些方法可以告诉 jose4j 放宽 key 长度要求。这可以通过 JwtConsumer
来完成调用.setRelaxVerificationKeyValidation()
在 JwtConsumerBuilder
和 JsonWebSignature
直接与 .setDoKeyValidation(false)
.下面是一个使用 HMAC SHA256 生成和使用 JWT 的快速示例,它显示了两者。
JwtClaims claims = new JwtClaims();
claims.setExpirationTimeMinutesInTheFuture(5);
claims.setSubject("foki");
claims.setIssuer("the issuer");
claims.setAudience("the audience");
String secret = "secret";
Key key = new HmacKey(secret.getBytes("UTF-8"));
JsonWebSignature jws = new JsonWebSignature();
jws.setPayload(claims.toJson());
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
jws.setKey(key);
jws.setDoKeyValidation(false); // relaxes the key length requirement
String jwt = jws.getCompactSerialization();
System.out.println(jwt);
JwtConsumer jwtConsumer = new JwtConsumerBuilder()
.setRequireExpirationTime()
.setAllowedClockSkewInSeconds(30)
.setRequireSubject()
.setExpectedIssuer("the issuer")
.setExpectedAudience("the audience")
.setVerificationKey(key)
.setRelaxVerificationKeyValidation() // relaxes key length requirement
.build();
JwtClaims processedClaims = jwtConsumer.processToClaims(jwt);
System.out.println(processedClaims);
关于java - 如何从 secret 字符串中生成 HMAC_SHA256 key 以在 jose4j 中与 JWT 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32006323/
Ed25519 PEM key 对生成如下: -----BEGIN PRIVATE KEY----- NC4CAQAwBQYcK2VwBCIEIIWUb0/MoKaBxQkmmPlHIGyPfDQb/
我正在尝试使用 node-jose 实现简单的 JOSE encrypt 和 decrypt 函数. 我的代码如下(使用Node 8.2.1编写) const { JWE } = require('n
我正在使用 jose 进行 python jwe 加密。 这是我的示例代码 import jose from time import time from Crypto.PublicKey import
我正在尝试使用 node-jose验证我的 JWT 的签名。我知道 secret ,但无法将此 secret 转换为用于验证的 JWK。 这是一个示例,说明我如何尝试使用我的 secret 创建我的
我正在使用 node-jose v0.11.0 ( https://www.npmjs.com/package/node-jose ) 进行 JWK 和 JWE 操作。我有一个 JWK 格式的 RSA
对示例代码中应用的概念 有疑问“带有 RSA 加密的 JSON 网络 token (JWT)” 引用:http://connect2id.com/products/nimbus-jose-jwt/ex
我正在尝试使用 SpringBoot 实现 Oauth2 授权服务器 guide作为引用。 我的 keystore 只有一个 key 。我已经成功创建了一个 JWToken(我可以在 jwt.io 上
我正在尝试创建 JWE 解密函数,但无法确定如何使用 Go Jose 接口(interface)来执行此操作。我已使用密码进行加密(我更喜欢此用例的密码): token := jwt.NewW
我使用 Nimbus JOSE + JWT 对每个资源请求在服务器和客户端之间来回传递 token 创建 JWT token 的代码: public class TokenProvider {
我正在尝试按照此处提供的示例创建嵌套的 json JWT http://connect2id.com/products/nimbus-jose-jwt/examples/signed-and-encr
我查看了 python-jose 和 jose,但似乎都不支持加密已签名的 JWT。例如,“jose”库支持单独签名和加密,无需嵌套。 我是否遗漏了什么,比如在库外嵌套 JWT 可能相当容易?如果是这
我对 python 有点陌生,之前从未使用过它来验证 jwt token 。 我正在编写一个 lambda 函数。我确信这个问题很简单,但似乎无法解决。 我不断收到此错误: { "errorTyp
这是我在 ubuntu 20.x 上为 JOSE/NODEJS (14.16) 应用程序生成 EdDSA 25519 key 对的命令: $ssh-keygen -o -a 100 -t ed2551
我正在努力理解如何使用 npm jose 模块( https://www.npmjs.com/package/jose )在我的 Node 应用程序中创建和验证签名的 JWT token 。我的场景是
我有一个函数,它接收一个 token ,对其进行解码,然后使用有效负载来执行一些逻辑。我想用我操纵的声明来生成 token 以测试该函数。 我从 https://mkjwk.org/ 生成了一个 ke
作为快速概述,我正在尝试使用 https://github.com/dvsekhvalnov/jose-jwt 通过 C# 生成 ES256 算法 -JWT token 图书馆。 如说明所述: ES2
这个问题在这里已经有了答案: Using the variable "name" doesn't work with a JS object (4 个答案) 关闭 6 年前。 当我在控制台中运行 v
如果我搜索“Jose”,结果为 0。如果我搜索“Josè”,“Jôse”也不会给出任何结果。 select name from TblName where name = 'Jose' or name
我正在尝试在 .NET 中生成 JWT token 。起初,我尝试使用“System.IdentityModel.Tokens.Jwt”,但它在 token 验证期间引起了问题,所以我切换到“jose
我正在尝试整合 Javascript Object Signing and Encryption (JOSE) jose使用我的 iOS 应用程序。 引用This Sample code : hong
我是一名优秀的程序员,十分优秀!