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

时间:2017-07-18 06:06:08

标签: azure azure-active-directory adal azure-ad-b2c

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

中获取了java客户端代码

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

  

“error”:“invalid_grant”,“error_description”:“AADSTS70000:传输数据解析器失败:授权码格式错误或无效。

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

如何查看被解雇的帖子请求?我无法在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);

帖子请求应该是: String redirectUrl = authority                         + 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”);

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

1 个答案:

答案 0 :(得分:1)

更多信息后编辑

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

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

要获取包含授权码的令牌,请使用acquireTokenByAuthorizationCodehttps://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中看到该请求,因为它会从您的网络服务器转移到Azure AD。浏览器不是链的一部分。 这是一件好事,因为我们将客户端密钥传递给Azure AD 。您可以使用Fiddler等工具来监控流量。