Azure AD JWT持票人令牌和ASP.NET Core 2的用户信息WebApi

Azure AD JWT持票人令牌和ASP.NET Core 2的用户信息WebApi

问题描述:

我发现了一个​​,我可以在其中使用Azure AD凭据登录到我的应用程序。Azure AD JWT持票人令牌和ASP.NET Core 2的用户信息WebApi

在我的前台,我正在使用Xamarin.Forms。 在我的后端我使用的是ASP.NET Core 2.0 WebApi

后端:

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
     if (env.IsDevelopment()) 
     { 
      app.UseDeveloperExceptionPage(); 
     } 

     app.UseAuthentication(); 

     app.UseMvc(); 
    } 

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(); 

     services.AddAuthentication(o => 
     { 
      o.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; 
      o.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; 
     }).AddJwtBearer(options => 
     { 
      options.Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]); 
      options.Audience = Configuration["AzureAd:Audience"]; 
     }); 
    } 

这很简单。

在我的前台,我正在填写凭证并要求提供access_token。

{ 
"token_type": "Bearer", 
"scope": "user_impersonation", 
"expires_in": "3600", 
"ext_expires_in": "0", 
"expires_on": "1507104075", 
"not_before": "1507100175", 
"resource": "my_resource", 
"access_token": "my_access_token", 
"refresh_token": "my_refresh_token" 
} 

在我的access_token填写我的头与授权镶有bearer my_access_token

我的Api知道我的所有信息,因为它会自动为我的access_token中的信息设置声明。此信息由Azure AD提供。 (全名,名字,姓氏,...)

但是我怎样才能在我的前端获得这些信息?

您可能想要查看GitHub上的active-directory-dotnet-native-desktop示例。

我演示了如何在桌面应用程序中使用ADAL.NET来获取服务的令牌。你将需要为你的Xamarin表单客户端进行调整,但就认证而言,其原理是一样的。 此外它还包含一项服务,您可以将其替换为您自己的服务,并通过将资源ID更改为使用ASP.NET向导创建的应用程序之一来获取Web API的令牌(您可以在作为样品的readme.md)描述Azure的门户

的想法是,你首先使用ADAL.Net line 92 of TodoListClient/MainWindow.xaml.cs

result = await authContext.AcquireTokenAsync(todoListResourceId, clientId, redirectUri, ...) 

获得令牌,然后你把它作为标记承载line 121

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 

如果您需要的所有信息都包含在访问令牌中,则可以在客户端上解码访问令牌。访问令牌是智威汤逊,很容易研究的代码示例访问令牌解码像以下主题:

How to decode JWT Token?

Decoding and verifying JWT token using System.IdentityModel.Tokens.Jwt

如果你还需要更多的用户信息,您可以刷新访问令牌的Microsoft Graph,并调用Microsoft Graph的me端点(请参阅here)。下面是关于如何通过刷新令牌刷新访问令牌的文档:

Refreshing the access tokens