授权中出现错误“MsalInteractionRequiredException:AADSTS90083:请求不受支持”

问题描述 投票:0回答:1

我们已在 Microsoft Entra Id 中注册了 1 个 Azure Function App 和 1 个相应的客户端应用程序。 使用 grant_type“授权代码”,API 的授权工作正常,但对于 grant_type“客户端凭据”,我们收到以下错误:

java.util.concurrent.CompletionException: com.microsoft.aad.msal4j.MsalInteractionRequiredException: AADSTS90083: 请求不受支持。跟踪 ID: 20d89e47-3937-4535-b174-8cc57d31a400 相关 ID: c2bc0944-902d-4768-851e-615bcfd6776c 时间戳: 2024-04-09 06:09:57Z 在 com.microsoft.aad.msal4j.AuthenticationResultSupplier.get(AuthenticationResultSupplier.java:89) 在 com.microsoft.aad.msal4j.AuthenticationResultSupplier.get(AuthenticationResultSupplier.java:17) 在 java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ... 1 更多 造成原因: com.microsoft.aad.msal4j.MsalInteractionRequiredException: AADSTS90083: 请求不受支持。跟踪 ID: 20d89e47-3937-4535-b174-8cc57d31a400 相关 ID: c2bc0944-902d-4768-851e-615bcfd6776c 时间戳: 2024-04-09 06:09:57Z 在 com.microsoft.aad.msal4j.MsalServiceExceptionFactory.fromHttpResponse(MsalServiceExceptionFactory.java:37) 在

我们尝试将范围更改为不同的值。还添加了应用程序角色。

azure-functions azure-ad-msal microsoft-entra-id
1个回答
0
投票

我使用下面的代码和客户端凭据成功检索了访问令牌。

代码:

import com.microsoft.aad.msal4j.*;
import java.util.Collections;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class Main {

    private static String clientId = "<clien_ID>";
    private static String clientSecret = "<client_secret>";
    private static String authority = "https://login.microsoftonline.com/<tenant_ID>";
    public static void main(String args[]) {
        try {
            acquireToken();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void acquireToken() throws Exception {
        final IClientCredential credential = ClientCredentialFactory.createFromSecret(clientSecret);
        final ConfidentialClientApplication cca = ConfidentialClientApplication.builder(clientId, credential)
                .authority(authority)
                .build();

        final Set<String> scopes = Collections.singleton("https://graph.microsoft.com/.default");
        final ClientCredentialParameters parameters = ClientCredentialParameters.builder(scopes).build();

        CompletableFuture<IAuthenticationResult> future = cca.acquireToken(parameters);
        IAuthenticationResult result;
        try {
            result = future.get();
            System.out.println("Access Token: " + result.accessToken());
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
            throw e;
        }
    }
}

输出:

上面的代码成功运行,获取带有客户端凭据的访问令牌,如下所示。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.