我正在使用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
...
}