尝试获取azure AD graph api的令牌时无效授权

时间:2015-01-17 10:49:41

标签: azure

在OIDC中间件中将代码交换为图形令牌时,我正在解决invalid_grant错误:

我之前有过像这样的东西,但似乎找不到这个和样品的区别。下面是试图获取azure AD Graph api的代码的代码:

AuthorizationCodeReceived = async context =>
{
    try
    {

    string userObjectID = context.AuthenticationTicket.Identity.FindFirst("oid").Value;
    string tenantID = context.AuthenticationTicket.Identity.FindFirst("tid").Value;

    var credential = GetCredential(); 
    var authContext = new AuthenticationContext(string.Format("https://login.windows.net/{0}", tenantID));
                                Uri redirectUri = new Uri(context.Request.Uri.GetLeftPart(UriPartial.Path));
    Logger.InfoFormat("redirect {0}", redirectUri);
    AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(
        context.Code, redirectUri, credential, graphResourceID);
   }catch(Exception ex)
   {
       Logger.ErrorException("oidc", ex);
   }
}

但得到了

1/17/2015 4:22:42 AM: a0e69d43-1c91-4069-8d1f-4b03103dc227 - AsyncMethodBuilderCore: Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException: AADSTS70002: Error validating credentials. AADSTS70000: The provided access grant is invalid or malformed.
Trace ID: 2112568f-fbe6-4ac6-bd67-de5904a9b9f5
Correlation ID: a0e69d43-1c91-4069-8d1f-4b03103dc227
Timestamp: 2015-01-17 04:22:42Z

应用程序权限设置为读取数据。 委托权限设置为读取用户配置文件。

我说得对,上述还不够,我还需要在用户登录后为图资源创建授权请求。

1 个答案:

答案 0 :(得分:1)

答案是确保正确处理拖尾斜线!

重定向必须与启动令牌交换时的重定向相同,这意味着当您开始重定向到授权端点时,在那里使用的重定向uri需要与在令牌端点处将代码交换到令牌时相同。

这样做的好方法是使用

RedirectToIdentityProvider = async (context) =>
{
                         string appBaseUrl = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase;
                         context.ProtocolMessage.RedirectUri = appBaseUrl + "/";
                         context.ProtocolMessage.PostLogoutRedirectUri = appBaseUrl;
}

我也做了,但我忘记了拖尾斜线。现在它与你在做

时得到的相同
Uri redirectUri = new Uri(context.Request.Uri.GetLeftPart(UriPartial.Path));