Can#39;t verify access token signature from azure using nimbus(无法使用Nimbus验证来自Azure的访问令牌签名)
问题描述
在此example之后,我编写了一些代码来验证从Azure隐式流返回的访问令牌。
RemoteJWKSet remoteJWKSet = new RemoteJWKSet(new URL(jwksUri));
JWSKeySelector keySelector = new JWSVerificationKeySelector(JWSAlgorithm.RS256, remoteJWKSet);
ConfigurableJWTProcessor jwtProcessor = new DefaultJWTProcessor<>();
jwtProcessor.setJWTClaimsSetVerifier(new DefaultJWTClaimsVerifier(
new JWTClaimsSet.Builder().issuer("https://sts.windows.net/3283e312-f73b-47d0-81c6-75e3ac726c21/").build(),
new HashSet<>(Arrays.asList("sub", "iat", "exp", "scp"))));
jwtProcessor.setJWSKeySelector(keySelector);
JWTClaimsSet claimsSet = jwtProcessor.process(accessToken.getValue(), null);
但验证失败,我得到:
com.nimbusds.jose.proc.BadJWSException: Signed JWT rejected: Invalid signature
at com.nimbusds.jwt.proc.DefaultJWTProcessor.process(DefaultJWTProcessor.java:378)
at com.nimbusds.jwt.proc.DefaultJWTProcessor.process(DefaultJWTProcessor.java:303)
at com.nimbusds.jwt.proc.DefaultJWTProcessor.process(DefaultJWTProcessor.java:294)
我认为我不需要DefaultJWTClaimsVerifier
部分,但删除它不会改变任何事情。我只希望它能坚持这个例子。
您知道为什么会发生这种情况吗?
感谢您的帮助。
PS:无法使用jwt.io进行验证。我粘贴了Access_Token和来自jwk的";key";部分的第一个条目。推荐答案
您需要expose an API scope
在Azure中,并让客户端使用它。还要确保访问令牌的JWT报头中没有nonce
字段。我的blog post有更多信息。
Azure AD行为
以上行为完全特定于Microsoft,并且在将Azure AD用作提供程序时是必需的:
JWT标头中带有随机数字段的令牌仅针对MS API(如Graph)设计,并使用内部验证机制。其目的是使这些应用程序始终无法通过自定义API的验证。
您自己的自定义API的令牌必须通过请求自定义作用域的客户端检索。请注意,在Azure AD中配置的OAuth客户端可以是一个逻辑条目,而不需要为每个单独的API维护一个。
我认为MS的行为是基于OAuth resource indicators的,虽然我个人倾向于在API中接收访问令牌时使用更主流的scopes、claims和受众检查技术。
这篇关于无法使用Nimbus验证来自Azure的访问令牌签名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:无法使用Nimbus验证来自Azure的访问令牌签名
基础教程推荐
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01