我正在使用Auth0并尝试通过调用Microsoft标识平台来验证Signature,但我在调用验证方法时收到了下面的错误。还请找到我的代码片段。
代码段:
try {
DecodedJWT decodedJWT = JWT.decode(accessToken); // your string
JwkProvider provider = new JwkProviderBuilder(new URL("https://login.microsoftonline.com/tid/discovery/v2.0/keys")).build();
Jwk jwk = provider.get(decodedJWT.getKeyId());
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
JWTVerifier verifier = JWT.require(algorithm)
.withIssuer("auth0")
.build();
verifier.verify(decodedJWT);
} catch (JWTVerificationException | JwkException | MalformedURLException e) {
e.printStackTrace();
}
错误
通用域名格式。auth0.jwt。例外情况。SignatureVerificationException:在com上使用算法SHA256withRSA验证时,令牌的签名无效。auth0.jwt。算法。RSA算法。在com上验证(rsaagorithm.java:50)。auth0.jwt。JWTVerifier。在com上验证(JWTVerifier.java:299)。身份Telsmsidenty。util。MSTokenValidator。com上的validatemstokenvalidator(MSTokenValidator.java:43)。身份Telsmsidenty。控制器。TelsPageController。com上的validateToken(TelsPageController.java:98)。身份Telsmsidenty。控制器。TelsPageController。java上的getUserInfoFromGraph(TelsPageController.java:59)。基本/jdk。内部的反映NativeMethodAccessorImpl。在java上调用0(本机方法)。基本/jdk。内部的反映NativeMethodAccessorImpl。在java上调用(NativeMethodAccessorImpl.java:64)。基本/jdk。内部的反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。基本/java。lang.reflect。方法在org调用(方法java:564)。springframework。网状物方法支持InvocableHandlerMethod。doInvoke(InvocableHandlerMethod.java:189)位于org。springframework。网状物方法支持InvocableHandlerMethod。org上的invokeForRequest(InvocableHandlerMethod.java:138)。springframework。网状物servlet。mvc。方法注释。ServletInvocableHandlerMethod。org上的invokeAndHandle(ServletInvocableHandlerMethod.java:102)。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。org上的invokeHandlerMethod(RequestMappingHandlerAdapter.java:892)。springframework。网状物servlet。mvc。方法注释。RequestMappingHandlerAdapter。位于org的handleInternal(RequestMappingHandlerAdapter.java:797)。springframework。网状物servlet。mvc。方法AbstractHandlerMethodAdapter。handle(AbstractHandlerMethodAdapter.java:87)位于org。springframework。网状物servlet。DispatcherServlet。doDispatch(DispatcherServlet.java:1038)位于org。springframework。网状物servlet。DispatcherServlet。位于org的doService(DispatcherServlet.java:942)。springframework。网状物servlet。FrameworkServlet。org上的processRequest(FrameworkServlet.java:1005)。springframework。网状物servlet。FrameworkServlet。javax上的doGet(FrameworkServlet.java:897)。servlet。http。HttpServlet。服务(HttpServlet.java:634)
下面的代码适用于我,请确保您的令牌版本并使用相应的版本:
String token = "";
String tenantID = "";
// For Azure AD V1 token
String providerURLV1 = "https://login.microsoftonline.com/" + tenantID + "/discovery/keys";
String issuerV1 = "https://sts.windows.net/" + tenantID + "/";
// For Azure AD V2 token
String providerURLV2 = "https://login.microsoftonline.com/" + tenantID + "/discovery/v2.0/keys";
String issuerV2 = "https://login.microsoftonline.com/" + tenantID + "/v2.0";
try {
DecodedJWT decodedJWT = JWT.decode(token);
JwkProvider provider = new JwkProviderBuilder(new URL(providerURLV1)).build();
Jwk jwk = provider.get(decodedJWT.getKeyId());
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
JWTVerifier verifier = JWT.require(algorithm).withIssuer(issuerV1).build();
System.out.println(verifier.verify(decodedJWT).getClaims());
} catch (Exception e) {
e.printStackTrace();
}
结果:
我在使用jwt.io验证我的azure广告访问令牌时获得无效签名(在手动检查后将转移到scala代码)。 我正在使用 curl 生成访问令牌: 虽然它为我提供了访问令牌,但响应不包含“Id_token”。不知道为什么。 我正在使用 BEGIN 和 END 证书包装 https://login.microsoftonline.com/common/discovery/keys 中的公钥。(如 htt
文件上说https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html 必须验证访问令牌。如何验证令牌?
问题内容: 我正在努力验证Azure AD令牌签名。 当我在下面的“ jwks_uri”字段中查找正确的键描述时 https://login.microsoftonline.com/common/.well-known/openid- configuration 我检查所属密钥数据。 我尝试使用“ n”-模数和“ e”字段生成用于签名验证的公钥,但最终出现错误: 安慰: 我尝试了另一种使用“ x5
我目前正在使用Vapor开发Swift后端。我的iOS客户端使用新的iOS 13功能“使用Apple登录”。当用户登录时,我会得到一个身份令牌(访问令牌),这是一个由Apple签名的有效JWT令牌。这将在所有正在进行的通信中发送到服务器,以验证服务器提供的某些路由。 在服务器上,我想通过验证令牌签名来验证发送的令牌是否确实由Apple签名,并且不是由某些恶意用户专门创建的。Apple提供了一个HT
我正在制作一个javascript客户端,它使用JWT令牌连接到Api。在服务器端没有问题,我可以创建令牌对其进行签名,然后验证签名,从而确保没有人篡改令牌。 但我如何在客户端做到这一点。我可以解码JWT令牌并查看头、负载和签名。但是如何在客户端验证签名?是否有用于此的库,如何将公钥传输到客户端? 如果我不验证签名,我怎么知道令牌没有被篡改?
在错误=我正在获取“消息”的上下文中需要帮助:“Access token validation Failure.Invalid Pavior.”, 我正在使用OAuth中的授权代码授予类型。我已经使用Azure广告策略将自定义声明映射到应用程序。因此,如果用户Scope=appid/.default,那么我将在令牌中获得一个自定义声明,并在Azure AD上对应用程序具有API权限,如user.r