问题标签 [nimbus-jose-jwt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
6305 浏览

java - 如何使用 Nimbus-Jose-Jwt 解码 JWT 令牌以获取 Header 和 Payload 的详细信息?

我有JWT 令牌,我想对其进行解码。如果我在这里在线执行此操作:https ://jwt.io 。我得到了完整的答复。

令牌 =

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5UQXhabU14TkRNeVpEZzNNVFUxWkdNME16RXpPREpoWldJNE5ETmxaRFUxT0dGa05qRmlNUSJ9.==。g3CZ6PfirbN9rUHDhWxXNbqA49ne2Fam_SXWiKUBfQN10ddLIKrY8L8xalQ0DX3LiQg0TmdYspR4vVd3Mfji919UJEFSe894JD-PqFTFcvVsLgLm9pWNoyXNVEz6gTiR5JM_UlAPZ4N8FjCla9tMjRfiG-l4gvdmXhF84_a7IwwVLY7DkOs0m-7UK3evB005QZJ5_vmYEtAFV6pFzSt3Jz_fqEPR4RIkrjUIei7m4KyQ3QEl-_ZuhPn80UrACbFqyIQ0Fl71cMQ5V28AXKt8AitGT53XL0LK-cnNmQqyy8WTNRaWmVAZIW7XOCcHBkg9diWy-uZvHSL3pig9Pfr0sg==

在线回复: 标题:

有效载荷:

我们如何使用 Java 代码来做到这一点?

不知何故我正在使用

代码:

0 投票
2 回答
2429 浏览

oauth-2.0 - 在 OpenID 流中提交令牌请求时如何修复“无效签名”API 错误?

我正在为我的应用程序设置 OpenID 流,并希望使用 Microsoft Active Directory 测试私钥 JWT 客户端证书身份验证。也就是说,在请求 id 和访问令牌时,我想使用证书而不是客户端机密来验证我的应用程序。但是,在发出令牌请求时,我收到以下错误:

我正在使用以下命令生成私钥和证书:

我已cert.pem在 azure 门户中上传到我的应用注册。

在我的应用程序中,我使用Nimbus JOSE + JWT库来构建 JWT 和带有 OpenID Connect 扩展的 Nimbus OAuth 2.0 SDK来管理 OpenID 流。以下是每个包的 Javadoc 页面:

我通过检查它们是否包含-----BEGIN PRIVATE KEY-----and-----BEGIN CERTIFICATE-----标头和相应的页脚来验证密钥和证书是否采用 PEM 格式。

根据错误,我访问了https://developer.microsoft.com/en-us/graph/graph-explorer,在左侧登录,然后使用给定的未编辑 url 发送查询。这样做给了我错误:

我当前的实现如下所示。

这里有几个步骤可能会出错,但我无法缩小范围:

  • 我的密钥生成可能是错误的。也许我使用的密钥和证书不是预期的格式?
  • 我使用 Nimbus 库对密钥的解析可能是错误的。在请求期间单步执行代码并检查数据对象似乎表明它正在解析文件中的所有组件。它是否正确解析这些组件尚不清楚。
  • 我对私钥 JWT 的构建可能存在缺陷。
  • 令牌请求的构造可能存在缺陷。
  • 我在 Azure 门户上注册应用程序的配置可能有误。

任何有关如何缩小范围或解决此问题的指示将不胜感激!

0 投票
0 回答
3093 浏览

java - PS256 算法支持 Java 中的签名

根据此处的 Java 12 安全规范,应支持 RSASSA-PSS 签名方案(实际上从 Java 11 开始)。但是,如果我尝试在我的 JWT 中使用带有 PS256 算法的签名,例如使用nimbus jose+jwt库,那么除非我使用 BouncyCastle,否则它不起作用。

这给出了一个错误:

确实JCASupport.isSupported(JWSAlgorithm.PS256)是假的

如果我包括 BouncyCastle 那么它确实有效:

我原以为在 Java 12 中不再需要 BouncyCastle(我实际上是在使用 Kotlin 1.3 和 Java 12 以及 Spring Boot 2.2 和 com.nimbusds 8.4 准确地说)。我想独立于 BouncyCastle。

我错过了什么?

0 投票
1 回答
2974 浏览

spring-security - Spring Security 5.2——如何自定义OAuth2ResourceServer使用的NimbusJWTDecoder?

我有一个在本地运行的 openid 提供程序(openam)。我使用的是自签名证书,jwks url 是 @ https://localhost:8443/openam/oauth2/connect/

由于 ssl 证书是自签名的,当解码 oidc 令牌时,我收到 SSLHandshake 异常。我尝试通过创建自定义 JwtDecoder 使用自定义休息模板(如https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2resourceserver-jwt-decoder-dsl中所建议)

但是这个解码器好像没有用。OidcIdTokenDecoderFactory 用于创建解码器。这个类似乎不允许我们传入自定义的 jwtDecoder..

为什么 oauthResourceServer().jwt().decoder(customDecoder()) 不起作用?如何让解码器与带有自签名证书的网站的 jwks uri 一起使用?

我正在考虑的一种选择是将自签名证书添加到我的 jdk 的 cacerts 文件夹中。

0 投票
2 回答
3119 浏览

spring-security - 如何在 spring-security 5.2 中增加 RemoteJWKSet 缓存 TTL

我们使用 spring-security 5.2 通过 JWT 验证来保护我们的 REST API。

使用该spring:security:oauth2:resourceserver:jwt:jwk-set-uri属性,我们指示远程 JWKS 端点,该端点转换为 Spring 基于此 URI 创建一个 NimbusJwtDecoder。再往下,创建一个 RemoteJWKSet 对象,该对象缓存对 JWKS 端点的调用,默认 TTL 为 5 分钟。

有没有办法增加这个 TTL 以最小化远程调用?也许在某个地方注入一个DefaultJWKSetCache具有不同 TTL 的新实例?将其尽可能长时间地保存在缓存中似乎是安全的,因为当我们收到带有未知孩子的令牌时,将恢复对 JWKS 端点的调用以更新密钥集。

检索密钥的调用堆栈如下

安全依赖:

0 投票
1 回答
1223 浏览

spring - 如何为 spring oauth2 jwt 服务器生成正确的 jwks 端点?

发布的目标

/.well-known/jwks.json我的 spring oauth2 jwt 服务器配置有效jwks的 .

第一次尝试

spring 文档之后,我可以使用 JWK Set URI 的 box Endpoint。这个需要:

我已经添加。通过执行器检查映射的端点,没有过滤jw.

第二次尝试

按照相同的配置,我尝试使用下一个代码:

它产生

使用 access_token ping 资源服务器失败:

第三次尝试

修改"/.well-known/jwks.json"( jwt.io helps detect algorithm used for jwt) 的响应:

导致下一个响应:

使用 access_token ping 资源服务器提供相同的结果:

问题

是否有任何想法或示例如何配置/.well-known/jwks.json以产生正确的jwks

附言

  • 如果我在资源服务器上使用公钥作为本地资源 - 它可以工作。
  • 我会对任何可行的解决方案感到高兴(可能有人知道jwks可以在 spring-boot 应用程序中使用的不同库)。
0 投票
0 回答
2051 浏览

java - 使用 nimbus jose-jwt (java) 验证 JWT 声明

我在一个普通的java项目中使用nimbus jost+jwt 8.19版(不使用spring)。我有一些声明,例如 iss、aud 和 sub,并想验证它们。(我希望 iss、aud 和 sub 是一个特定的值)。我希望解析器在声明不匹配时抛出异常。此处提供的示例在早期版本中运行良好,但似乎在以后的版本中有所更改。

早期(8.3版)我曾经使用以下代码进行验证

但现在(8.19 版) DefaultJWTClaimsVerifier 似乎不接受完全匹配声明和必需声明参数。有没有办法实现完全匹配和要求的声明?

我所有的进口商品供参考

0 投票
2 回答
1081 浏览

java - 使用 nimbus-jose 和 Java 6 的 ECDH + JWE 加密

我有一个问题,我想知道你是否可以帮助我。

我需要用椭圆曲线创建一个加密的 JWE。

我在用

jre 1.6.0、nimbus-jose-jwt-8.20-jdk6.jar、bcprov-jdk15to18-166.jar。

我用 EC 算法和椭圆曲线 P-512 创建了一个密钥库和一个密钥对。如果我使用私钥对 JWT 进行签名,然后尝试使用公钥对其进行验证,一切正常,但除了签名之外,我还需要加密以创建一个看不到有效负载的 JWE。

当尝试使用公钥加密 JWE 时,它会抛出以下异常

这是我用来加密的代码:

我在 ecipe 类路径中定义了库。

虽然我的要求是用椭圆曲线加密 JWE,但我创建了一个测试证书 RSA,通过这种方式,我能够毫无问题地生成一个带有所述证书的加密 JWE。

我还使用了他们放在https://connect2id.com/products/nimbus-jose-jwt/examples/jws-with-ec-signature页面上的一个非常简单的示例,它也不适用于我。创建密钥对时,我得到了同样的异常。

NoClassDefFoundError 异常表明负责动态类加载的类加载器找不到您尝试使用的类的 .class 文件,但正如我之前所说,我的所有库都很好地包含在类路径中。

难道是我错过了一些要包括的利比里亚吗?我不知道,我迷失了这个问题

0 投票
0 回答
184 浏览

jwt - JWE nimbus-JOSE 真实性和 JavaScript 对应物

我偶然发现了这个用于使用 JSON Web 加密的java nimbus-JOSE库。这个库很简单,需要几行 JWE 加密和解密,如下所示 JWE 加密。

但是,即使在阅读了它的 javadocs 和文档之后,我仍然对这个库有一些疑问。特别是关于 JWE 和这个库,

  1. 解密 JWE 后,如何验证 JWE 的真实性?JWE 中没有“签名”,那么 JWE 的 5 个部分如何帮助检查有效性?图书馆对此有任何支持吗?
  2. 除了标题和声明之外,JWT 中的其他字段是由库随机生成的吗?(我无法找到明确的证据。)
  3. 如果我使用 alg:“RSA-OAEP”,enc:“A128GCM”,我应该在每次加密时得到不同的 JWE,但是,我得到的是相同的 JWE。RSA-OEAP-256 不应该防止这种情况发生吗?加解密流程的详细顺序是什么?
  4. 我一直在尝试在 Javascript 中找到一个类似的库,但找不到像 nimbus-jose 这样的用于 java 的库。如果有人有建议,请在下面提供帮助!我感谢任何可以帮助我解决问题的人。欢迎所有输入。:)
0 投票
1 回答
173 浏览

spring-boot - Spring Boot 2.3.4:JwtValidators.createDefaultWithIssuer(String) 的错误?

我发现 JWT 解析和 JwtValidators 有一个奇怪的行为。

设想:

  • Spring Boot OIDC 客户端(目前是一个小型 Web 应用,仅显示登录用户和 Spring 提供的一些 OIDC 对象)
  • 自定义JwtDecoderFacotry<ClientRegistration>ID-Token 验证
  • JwtValidatorFactory基于JwtValidators.createDefaultWithIssuer(String)

这适用于 Spring Boot 版本 <= 2.2.10。

调试:

  • NimbusJwtDecoder(JAR spring-security-oauth2-jose) 使用声明集转换器。'iss'(颁发者)声明作为 URL 处理。
  • JwtIssuerValidator(由 内部创建JwtValidators.createDefaultWithIssuer(String))包装一个JwtClaimValidator<String>.
  • 这个最后equals()总是调用它false-它将字符串与 URL 进行比较。

我目前的解决方法不是调用JwtValidators.createDefaultWithIssuer(),而是使用验证器new JwtTimestampValidator()和自己的实现OAuth2TokenValidator<Jwt>(使用 wrapping JwtClaimValidator<URL>)。

还有其他人遇到这个问题吗?

- 基督教