使用ASP.NET身份从Azure AD承载令牌保存AspNetUser

时间:2019-02-12 20:23:18

标签: asp.net-core .net-core asp.net-identity azure-active-directory

我正在使用Azure Active Directory通过身份验证(例如,通过Azure AD OAuth 2 https://login.microsoftonline.com/<tenant-id>/oauth2/authorize?client_id=<app-id>&redirect_uri=<callback>&response_type=id_token&scope=openid%20profile)使用仅DotNet Core 2.2 API后端编写Angular SPA前端。 SPA使用Azure AD进行身份验证并接收JWT id_token,当通过Authorization Bearer HTTP标头调用DotNet Core后端时,也会使用该JWT id_token。后端使用控制器上的[Authorize]属性对其进行了验证。

我可以读到JWT用户在控制器端点上的声明。但是,我希望能够将有关经过身份验证的用户的基本详细信息存储到ASP.NET Identity提供的AspNetUsers表中,以便在数据层将记录与经过身份验证的用户相关联(也许由{{3} }?)。

将经过验证的Azure AD JWT用户信息添加到ASP.NET标识表的最佳位置是哪里?

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<MyApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddIdentityCore<IdentityUser>(config => { config.User.RequireUniqueEmail = true; })
        .AddRoles<IdentityRole>()
        .AddEntityFrameworkStores<MyApplicationDbContext>();

    services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme)
        .AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
    ...
}

SampleDataController.cs

[Authorize(Roles="employee")]
[HttpGet("[action]")]
public IEnumerable<WeatherForecast> WeatherForecasts()
{
    var userEmail = User.Identity.Name; // e.g. david.yee@myworkemail.com
    ...
}

0 个答案:

没有答案