【问题标题】:invalid grant when trying to get token for azure AD graph api尝试获取 azure AD graph api 的令牌时授权无效
【发布时间】:2015-01-17 10:49:41
【问题描述】:

在 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

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

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

【问题讨论】:

    标签: azure


    【解决方案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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 1970-01-01
      • 2016-09-09
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多