Как настроить JwtBearerOptions для включения имени политики в общеизвестный URL-адрес конфигурации openid? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь добавить проверку токена на предъявителя в мое веб-приложение ASP.NET. Я использую встроенный код аутентификации JWT, настроенный для использования следующего кода ...

services.AddAuthentication(ConfigureAuthentication).AddJwtBearer(ConfigureJwt);

, который выполняет следующие функции ...

private void ConfigureAuthentication(AuthenticationOptions options)
{
    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}

private void ConfigureJwt(JwtBearerOptions options)
{
    var directoryId = Configuration["AzureAd:DirectoryId"];
    var directoryName = Configuration["AzureAd:DirectoryName"];
    var policy = Configuration["AzureAd:SigninPolicyName"];

    options.Audience = Configuration["AzureAd:ApplicationId"];
    options.Authority = $"https://{directoryName}.b2clogin.com/{directoryName}.onmicrosoft.com/v2.0";
}

Метод ConfigureJwt - это тот, с которым я имею дело. Я не могу получить базовый код JWT для получения openid-configuration с соответствующего URL. Это очень близко, но ему не хватает политики из URL. Вот что генерирует мой код выше и пытается извлечь openid-configuration из ...

https://example-directory.b2clogin.com/example-directory.onmicrosoft.com/v2.0/.well-known/openid-configuration

А вот из чего предполагается получить конфигурацию, указанную на портале Azure ...

https://example-directory.b2clogin.com/example-directory.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_SignInPolicy

Как видите, в моем коде выше отсутствует название политики.

Я не могу понять, как это указать где-либо. Кто-нибудь знает, как настроить JwtBearerOptions, чтобы он включал это имя политики?

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Я думаю, что Орган должен быть:

https://{directoryName}.b2clogin.com/{directoryName}.onmicrosoft.com/B2C_1A_signup_signin/v2.0

Замените B2C_1A_signup_signin на свой идентификатор политики.

Содержит идентификатор политики и загружает метаданные из правильного места.

0 голосов
/ 18 июня 2019

Я получил ответ от сотрудника MS о том, как правильно сделать это. Вы можете установить мета-адрес, который является адресом, из которого выбирается конфигурация. Таким образом, вы можете сохранить права доступа на уровне, которые, по словам Azure, должны быть, и в то же время иметь динамический мета-адрес. Ниже показано, как MS предлагает решить эту проблему ...

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<AuthenticationOptions>(configuration.GetSection("Authentication:AzureAd"));

    var serviceProvider = services.BuildServiceProvider();
    var authOptions = serviceProvider.GetService<IOptions<AuthenticationOptions>>();

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) // sets both authenticate and challenge default schemes
        .AddJwtBearer(options =>
        {
            options.MetadataAddress = $"{authOptions.Value.Authority}/.well-known/openid-configuration?p={authOptions.Value.SignInOrSignUpPolicy}";
            options.Audience = authOptions.Value.Audience;
        });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...