我正在尝试使用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”);
不确定如何提供粗体信息。
答案 0 :(得分:1)
更多信息后编辑
如果您使用的是v2端点,则无法使用ADAL。
如果您已在v2 dev门户中注册了应用程序,则需要通过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中看到该请求,因为它会从您的网络服务器转移到Azure AD。浏览器不是链的一部分。 这是一件好事,因为我们将客户端密钥传递给Azure AD 。您可以使用Fiddler等工具来监控流量。