2017-10-20 127 views
0

我有一个使用ASP.NET Core Identity并尝试针对Azure AD进行身份验证的ASP.NET Core应用程序。如何在ASP.NET Core for Azure AD中请求正确的访问令牌以访问Microsoft Graph

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中的声明发送)。 但是,当我使用收到登录流程的图形API返回一个错误ACCESS_TOKEN:

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

当我看着它的access_token看起来奇怪。这不是一个有效的智威汤逊。 AQABAAAAAABHh4kmS_aKT5XrjzxRAtHzymKlkayx9UvCfyg_uHq1prmSP8f0Mi5BfiqkdIZeqJsBbm9SSbDbMrQ0JgNa6pa6M97IjVr6ZHdtt3ryT8vns_kz5BxkdJFkL79Ql3ywzyKldfLuX9jwq1eCgQ1MMdqKUDW4q5g38...

我做错了什么?

回答

2

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

+0

谢谢,这有帮助。现在我有一个“真正的”访问令牌。你的代码示例[GitHub repo](https://github.com/juunas11/aspnetcore2aadauth)也帮助了我。尤其是获取Microsoft Graph的特殊访问令牌。 –

+0

请考虑接受为可能帮助其他人遇到同样问题的答案。 –

相关问题