azure - 使用 Azure AD 验证签名

标签 azure spring-security azure-active-directory auth0 adfs

我正在尝试使用 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>

如果我尝试验证 token ,我会收到以下错误:

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 提供的 token 测试相同的方法,我能够验证,但使用 Azure AD 则无法验证。如何验证 token 以避免此错误?如何调整 Azure AD 的代码或添加对 SHA256withRSA 的支持?我的代码有什么问题?

提前非常感谢

胡安·安东尼奥

最佳答案

您正在尝试验证适用于 Microsoft Graph API 的访问 token 。 您不应该这样做,主要是因为它不适合您的应用程序。 他们使用稍微不同的东西来签名,并且您不能使用相同的方法来验证 Graph API token 。

获取 token 时,请确保使用应用程序定义的范围来接收应用程序的 token 。 您应该能够验证这一点。 如果您还需要调用MS Graph API,那么您需要获取两个 token 。

关于azure - 使用 Azure AD 验证签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69266224/

相关文章:

类库中的 Azure Function 引用

azure - Window Azure 表存储查询性能

Spring Boot : Securing api endpoint with oauth2 while having mvc UI pages

java - Spring Security Login 中的附加参数

azure - 使用 DSC 和 ARM 模板传递凭据并使用 Visual Studio 2017 进行部署

azure - 如何在ARM模板部署中为资源组字段赋予默认值?

scala - 反向 AJAX( cometd )和 Spring MVC 与 Scala/LIFT?

reactjs - 如何使用 React 获取 Azure 广告刷新 token

Azure Microsoft Graph API - 订阅 - 验证请求失败

Azure Functions/Microsoft Graph 绑定(bind)未获取 token (clientCredentials)