- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要将 RSA 公钥转换为有效的 JWK。特别是 JWK 的值“n”和“e”是我正在努力解决的问题。在查看位于 https://www.rfc-editor.org/rfc/rfc7517#page-25 的示例 JWK 时,编码似乎不正确
目前我的代码基本上是这样的:
private Map<String, Object> generateJWK(PublicKey publicKey){
RSAPublicKey rsa = (RSAPublicKey) publicKey;
Map<String, Object> values = new HashMap<>();
values.put("kty", rsa.getAlgorithm()); // getAlgorithm() returns kty not algorithm
values.put("kid", "someuniqueid");
values.put("n", Base64.encode(rsa.getModulus().toString()));
values.put("e", Base64.encode(rsa.getPublicExponent().toString()));
values.put("alg", "RS256");
values.put("use", "sig");
return values;
}
但是输出似乎没有正确编码或类似的东西,例如 e
看起来像这样:NjU1Mzc=
n
不包括特殊字符,如 -
、_
和 +
。 :
jMzk1MNT0xTk2NED1xzzgNyQ00IykADzMAM0c0wz0M0MONj2z5TgNzI3yAM0OONYzzMjzwNzDxgAzxDxzMMAjTwNNDYMINMgNQDOEAkIM2jMQzkjUTDUYONNg1A00Tw1Nx4YEzAzjUT1MTNMjDjMM1MNNAjyTMIzxNADDINQANwT5yTDEMjEzNz2z2gOgjDDDNyNDjTzz43ETOYMI35gDjE00MYYM2DzDjDgww53Mwz0ME1NMgOM3MIzYTzMwzOMIQU5MjOzUjMNQNNg50U5NIDNzw2DMMOggNcQQM21TI5NMzDTN5Mj123O33MNNMkyNTNONxMM5wMMc04jTgAUE3MM1zMg4NNMT4MNDMM5yTO2j4jNDEMy1yNANNAzOIEUDzNwzExwTIkNjUjkN54Uz0DT5x0zM51k2MxYkx0zMNzxMkDUDTTQN3gAYODATQDDwMDMjMMcONjxMNTYMT5kgxNkMjNMQU0jzMEwIIMzTzUD4MgYDkDNzcAzN0TN4yNTz11DMxDUjDM2MyDMy4DEINMwT22QxjNNEzNDATy1OM1NNDxYgz5TxDkj3gQ32kIwNNkDO3xczDAENcTMNO0MOjTDwE3g11wNUcgNTwQk30kjjNNzTz4jTj4OOjQNYzMzcMjTQMkyzNNNUQOTOMMkMMMNzwNxDOEkg4xADIT4DNxMz2TENT4yN4z2I2zjyMU3DTOEQN4MIQjNDMU5Y11QkccwMNI0kNzyNjMMN4NMTTNMzMwxMjjDzgAANO1zwjYIEUjM1ADgDNjxTITMNNkIYxzyzzEEDMzDzNjzM4NjNNjc3ITTD0T5jzN=
我假设值 n 和 e 都没有正确编码吗?我应该如何将 PublicKey 转换为 JWK? (不能使用第三方库)
最佳答案
JWK 使用与 base64 略有不同的 base64url 编码。此外,不要对 BigInteger
值使用 toString()
方法。直接获取字节数组形式的数据
改变
Base64.encode(rsa.getModulus().toString())
Base64.encode(rsa.getPublicExponent().toString())
到
Base64.getUrlEncoder().encodeToString(rsa.getModulus().toByteArray())
Base64.getUrlEncoder().encodeToString(rsa.getPublicExponent().toByteArray())
关于java - 从 (RSA) PublicKey 手动创建 JWK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51323689/
任何人都可以帮忙吗??我使用以下命令使用 jwk 在 python 中生成了一个 key ,并存储在一个变量 key 中 key = jwk.JWK.generate(kty='RSA', size=
是否有为 JWK 创建指纹(又名指纹)的标准规范方法? 从我阅读的内容来看,该标准似乎没有定义 kid应该指定,我觉得很奇怪。对我来说,它是最重要的,因为它是一个确定性的值,而不是一个需要查找表的值,
我实现了一个 rest 授权服务器,它使用 com.nimbusds:nimbus-jose-jwt:9.13 以 JWK 格式返回给定 keyId 的公钥包裹。代码看起来像这样: @RequestM
我正在尝试使用我提供的 JWK 签署一些数据。 到目前为止,我已经尝试使用 jwt.io 来做到这一点,标题是 { "alg" : "RS256", "typ" : "JWT" } 有效载荷是 { "
我正在使用 auth0,我有两个客户端(ios、react)和一个使用 go-auth0 的 Go 后端 API . 我按照文档做了一个 Verify 方法,看起来像这样: func Verify(h
我已经使用 JWT 和 OAuth2 实现了一个 spring boot 应用程序。私钥和公钥是通过使用带有 jks keystore 的 java keytool 生成的。生成的 .jks 文件被复
假设我有一个代表 RSA key 对的 python 结构,如下所示: rsa_key_pair = { 'private_key': '-----BEGIN PRIVATE KEY-----
我需要将 RSA 公钥转换为有效的 JWK。特别是 JWK 的值“n”和“e”是我正在努力解决的问题。在查看位于 https://www.rfc-editor.org/rfc/rfc7517#page
我正在尝试使用 python 中的公钥验证 idToken。 我首先将 JWK token 转换为 PEM,但是当我调用“解码”函数时,我看到“签名验证失败”异常。我错过了什么? # Long str
RFC 中有一个 RSA key : https://www.rfc-editor.org/rfc/rfc7516#appendix-A.1 {"kty":"RSA", "n":"oahUIoW
我在 Spring Boot 应用程序中使用了 Azure AD。问题是当我尝试使用 AADAuthenticationFilter 类验证 token 时,我在公司网络(互联网)中收到此错误,但是当
这个问题在这里已经有了答案: Convert a JSON Public/Private Key pair to rsa.PrivateKey and rsa.PublicKey (1 个回答) C
我正在遭受这个问题:无法检索远程 JWK 集:读取超时 我在 Spring boot 2.5.3 中使用 Java 11, 对于依赖项: spring-security-oauth2-jose 5.5
我有 JWT var signedJwt = "eyJhbGciOiJFUzI1NiIsImtpZCI6IjZjNTUxNmUxLTkyZGMtNDc5ZS1hOGZmLTVhNTE5OTJlMDAw
我正在尝试实现 openid-configuration/jwks 提供的公钥缓存我们的 JWT 提供商的端点。我想使用缓存值来验证传入请求的签名。我们希望有适当的缓存,以降低 jwks 端点的请求。
我正在尝试实现 openid-configuration/jwks 提供的公钥缓存我们的 JWT 提供商的端点。我想使用缓存值来验证传入请求的签名。我们希望有适当的缓存,以降低 jwks 端点的请求。
我正在尝试将我的 GO Web 服务器连接到 Amazon Cognito 进行身份验证。我正在使用 gorilla 的 jwt 中间件。我也在遵循 AuthO 的指南:https://auth0.c
我生成了一个 ECDH key 对,并从中获取了公钥。使用 nodejs 和加密库。 const ecdh = crypto.createECDH('secp384r1'); ecdh.generat
我正在开发一个 P2P 基础设施,它将包含来自一组不同应用程序的数据,并通过网络分发。这个 P2P 覆盖层由一组 Python Twisted 服务器组成。 我需要保证每个应用程序的每个用户所存储数据
Here 是一种在线工具,可将 JWK 转换为 PEM,反之亦然。 我想在 C++ 代码中使用相同的代码。 对于 JWK: { "kty":"RSA", "e":"AQAB", "kid
我是一名优秀的程序员,十分优秀!