Я пишу внешний интерфейс Angular SPA с бэкэндом только для API DotNet Core 2.2 с использованием 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
).SPA аутентифицируется с помощью Azure AD и получает идентификатор id_token JWT, который также используется при вызове бэкэнда ядра DotNet через HTTP-заголовок Authorization Bearer.Он проверяется бэкэндом с атрибутом [Authorize]
на контроллерах.
Я могу читать заявления пользователей JWT очень хорошо на конечных точках контроллера;Тем не менее, я хотел бы иметь возможность хранить основные сведения о прошедшем проверку подлинности пользователя в таблице AspNetUsers
, предоставленной ASP.NET Identity для сопоставления записей проверенному пользователю на уровне данных (возможно, UserManager
?).
Где лучше всего добавить проверенную информацию о пользователе 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
...
}