Сохранение AspNetUser из токена носителя Azure AD с удостоверением ASP.NET - PullRequest
0 голосов
/ 12 февраля 2019

Я пишу внешний интерфейс 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
    ...
}
...