我找到了tutorial,我可以使用Azure AD凭据登录我的应用程序。
在我的前端,我正在使用 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提供。 (全名,名字,姓氏,......)
但是我怎样才能在我的前端得到这些信息呢?
答案 0 :(得分:0)
您可能想查看GitHub上的active-directory-dotnet-native-desktop示例。
我展示了如何在桌面应用中使用ADAL.NET来获取服务的令牌。您需要为Xamarin表单客户端调整它,但就身份验证而言,原则是相同的。 它还包含一项服务,您可以使用自己的服务替换它,并通过将资源ID更改为使用ASP.NET向导创建的应用程序之一来获取Web API的令牌(您可以在Azure中找到它)门户网站,如样本的readme.md中所述
这个想法是你首先使用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);
答案 1 :(得分:0)
如果您需要的所有信息都包含在访问令牌中,您只需解码客户端上的访问令牌即可。访问令牌是一个JWT,很容易研究代码样本来解码访问令牌,如下面的线程:
Decoding and verifying JWT token using System.IdentityModel.Tokens.Jwt
如果您还需要更多用户信息,则可以刷新Microsoft Graph的访问令牌,并调用Microsoft Graph的me
端点(请参阅here)。以下是有关如何通过刷新令牌刷新访问令牌的文档: