如何在ASP.NET Core for Azure AD中请求正确的访问令牌以访问Microsoft Graph

时间:2017-10-20 07:02:29

标签: c# azure oauth-2.0 azure-ad-graph-api asp.net-core-2.0

我使用ASP.NET Core Identity并尝试对Azure AD进行身份验证。

services.AddAuthentication()
    .AddOpenIdConnect("AzureAD", "Azure AD", option =>
    {
        option.ClientId = Configuration["AzureAD:AppId"]; 
        option.ClientSecret = "abc";
        option.Authority = string.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAd:Tenant"]);
        option.SignedOutRedirectUri = Configuration["AzureAd:PostLogoutRedirectUri"];
        option.ResponseType = OpenIdConnectResponseType.CodeIdToken;
        option.SaveTokens = true;
        option.SignInScheme = IdentityConstants.ExternalScheme;
        option.Events = new OpenIdConnectEvents
        {
            OnRemoteFailure = OnAuthenticationFailed,                       
        };
    });

一切正常,用户可以使用其凭据登录。

现在我正在尝试访问Microsoft Graph以便接收用户的电子邮件地址(它不会在id_token中作为声明发送)。 但是当我使用登录流程中收到的access_token时,Graph aPI会返回错误:

Code: InvalidAuthenticationToken
Message: CompactToken parsing failed with error code: -2147184105

当我看到access_token时,它看起来很奇怪。这不是一个有效的JWT。 AQABAAAAAABHh4kmS_aKT5XrjzxRAtHzymKlkayx9UvCfyg_uHq1prmSP8f0Mi5BfiqkdIZeqJsBbm9SSbDbMrQ0JgNa6pa6M97IjVr6ZHdtt3ryT8vns_kz5BxkdJFkL79Ql3ywzyKldfLuX9jwq1eCgQ1MMdqKUDW4q5g38...

我做错了什么?

1 个答案:

答案 0 :(得分:2)

您需要使用OnAuthorizationCodeReceived通知,该通知可用于使用ADAL / MSAL获取微软图api的访问令牌。有关ASP.NET Core 2.0 Azure AD身份验证,请参阅this blog