使用 Azure AD 验证签名
Verify Signature with Azure AD
我正在尝试使用 Java:
验证 Azure AD 中的签名
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-storage</artifactId>
<version>8.6.6</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.18.2</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>jwks-rsa</artifactId>
<version>0.19.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.5</version>
</dependency>
如果我尝试验证令牌,我会收到以下错误:
The Token's Signature resulted invalid when verified using the
Algorithm: SHA256withRSA
应用以下方法:
private boolean verifyJWT(String azureDiscoveryKeys, String token) {
try {
JwkProvider provider = new UrlJwkProvider(new URL(azureDiscoveryKeys));
DecodedJWT jwt = JWT.decode(token);
Jwk jwk = provider.get(jwt.getKeyId());
RSAPublicKey publicKey = (RSAPublicKey) jwk.getPublicKey();
Algorithm alg = Algorithm.RSA256(publicKey, null);
JWTVerifier verifier = JWT.require(alg).build();
verifier.verify(token);
return true;
} catch(JWTVerificationException | JwkException | MalformedURLException ex) {
System.out.println(ex.getMessage());
return false;
}
}
使用 MS ADFS 提供的令牌测试相同的方法,我能够验证,但使用 Azure AD,我不能。如何验证令牌以避免此错误?如何为 Azure AD 调整代码或添加对 SHA256withRSA 的支持?我的代码有什么问题?
非常感谢
胡安·安东尼奥
您正在尝试验证用于 Microsoft Graph API 的访问令牌。
你不应该这样做,主要是因为它不适合你的应用程序。
他们使用一些不同的东西来签名,你不能使用相同的方法来验证 Graph API 令牌。
获取令牌时,请确保使用您的应用程序定义的范围来为您的应用程序接收令牌。
您应该能够验证的那个。
如果您还需要调用MS GraphAPI,那么您需要获取两个token。
我正在尝试使用 Java:
验证 Azure AD 中的签名<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-storage</artifactId>
<version>8.6.6</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.18.2</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>jwks-rsa</artifactId>
<version>0.19.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.12.5</version>
</dependency>
如果我尝试验证令牌,我会收到以下错误:
The Token's Signature resulted invalid when verified using the Algorithm: SHA256withRSA
应用以下方法:
private boolean verifyJWT(String azureDiscoveryKeys, String token) {
try {
JwkProvider provider = new UrlJwkProvider(new URL(azureDiscoveryKeys));
DecodedJWT jwt = JWT.decode(token);
Jwk jwk = provider.get(jwt.getKeyId());
RSAPublicKey publicKey = (RSAPublicKey) jwk.getPublicKey();
Algorithm alg = Algorithm.RSA256(publicKey, null);
JWTVerifier verifier = JWT.require(alg).build();
verifier.verify(token);
return true;
} catch(JWTVerificationException | JwkException | MalformedURLException ex) {
System.out.println(ex.getMessage());
return false;
}
}
使用 MS ADFS 提供的令牌测试相同的方法,我能够验证,但使用 Azure AD,我不能。如何验证令牌以避免此错误?如何为 Azure AD 调整代码或添加对 SHA256withRSA 的支持?我的代码有什么问题?
非常感谢
胡安·安东尼奥
您正在尝试验证用于 Microsoft Graph API 的访问令牌。 你不应该这样做,主要是因为它不适合你的应用程序。 他们使用一些不同的东西来签名,你不能使用相同的方法来验证 Graph API 令牌。
获取令牌时,请确保使用您的应用程序定义的范围来为您的应用程序接收令牌。 您应该能够验证的那个。 如果您还需要调用MS GraphAPI,那么您需要获取两个token。