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);
如果您需要的所有信息都包含在访问令牌中,则可以在客户端上解码访问令牌。访问令牌是智威汤逊,很容易研究的代码示例访问令牌解码像以下主题:
Decoding and verifying JWT token using System.IdentityModel.Tokens.Jwt
如果你还需要更多的用户信息,您可以刷新访问令牌的Microsoft Graph,并调用Microsoft Graph的me
端点(请参阅here)。下面是关于如何通过刷新令牌刷新访问令牌的文档: