AZURE AD ADAL "error":"invalid_grant","error_description":"AADSTS70000: 传输数据解析器失败: 授权码格式错误或无效

AZURE AD ADAL "error":"invalid_grant","error_description":"AADSTS70000: Transmission data parser failure: Authorization Code is malformed or invalid

我正在尝试使用 AZURE AD 进行身份验证。我从 git [https://github.com/Azure-Samples/active-directory-java-webapp-openidconnect][1].

中获取了 java 客户端代码

我可以进行授权调用并获得授权码。通过使用 oauth2 jar 中的 acquireTokenByAuthorizationCode 方法传递授权代码以获取访问令牌。在这里,我收到以下错误。

"error":"invalid_grant","error_description":"AADSTS70000: Transmission data parser failure: Authorization Code is malformed or invalid.

如何将 grant_type=authorization_code 传递给 acquireTokenByAuthorizationCode 方法?

如何查看被触发的 post 请求?我在 chrome?

的网络部分看不到它

代码如下:

        String authCode = authorizationCode.getValue();
        ClientCredential credential = new ClientCredential(clientId,
                clientSecret);
        AuthenticationContext context;
        AuthenticationResult result = null;
        ExecutorService service = null;
        try {

            ThreadFactory factory = ThreadManager.currentRequestThreadFactory();
            service = Executors.newCachedThreadPool(factory);

            context = new AuthenticationContext(authority + tenant + "/", true,
                    service);

            Future<AuthenticationResult> future = context
                    .acquireTokenByAuthorizationCode(authCode, new URI(
                            currentUri), credential, null);

post 请求应该是: 字符串 redirectUrl = 权限 + this.tenant + "/oauth2/v2.0/token?p=b2c_1_abcd&grant_type=authorization_code&resource=https% 3a%2f%2fgraph.windows.net&redirect_uri=" + URLEncoder.encode(REDIRECT_URL, "UTF-8");

不确定如何提供粗体信息。

在获得更多信息后进行编辑

如果您使用的是 v2 终结点,则无法使用 ADAL。

如果您已在 v2 开发门户中注册您的应用,则需要通过 Azure 门户的 Azure AD 界面注册您的应用。然后确保您的 Azure AD URL 不包含 v2.0。


要获取带有授权码的令牌,请使用 acquireTokenByAuthorizationCode (https://github.com/Azure-Samples/active-directory-java-webapp-openidconnect/blob/master/src/main/java/com/microsoft/aad/adal4jsample/BasicFilter.java#L268-L270):

Future<AuthenticationResult> future = context
                .acquireTokenByAuthorizationCode(authCode, new URI(
                        currentUri), credential, null);

您不会在 Chrome 中看到请求,因为它是从您的 Web 服务器发送到 Azure AD。浏览器不是链的一部分。 这是一件好事,因为我们将客户端机密传递给 Azure AD。您可以使用 Fiddler 等工具来监控流量。