Настройте JwtBearerOptions из файла конфигурации - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь найти документацию о том, как настроить носитель jwt и его JwtBearerOptions в ядре asp.net из файла конфигурации с использованием предопределенного раздела / ключей защиты от Microsoft. В документации Mucrosoft нет объяснений, возможно это или нет. Я чувствую, что это должно быть возможно, потому что все в генерации ядра .net использует шаблон параметров.

Вот пример , как тот же метод используется для настройки хоста Kestrel.

enter image description here

1 Ответ

0 голосов
/ 06 ноября 2019

Это не настоящий ответ на первоначальный вопрос. Однако я очень доволен этим решением.

После нескольких часов копания в исходном коде AspNetCore я обнаружил, что JwtBearerOptions добавляются в DI в качестве именованных опций . Это означает, что вы не можете предоставить конфигурацию из файла конфигурации без написания кода. Однако я нашел приемлемое решение, которое будет работать в большинстве случаев.

У меня нет списка всех доступных ключей, и в приведенном здесь примере показаны только два из них. Вы можете проверить открытые свойства JwtBearerOptions и добавить их в appsettings.json. Они будут выбраны и использованы каркасом.

См. Код ниже и комментарии там, чтобы узнать, как это работает:

appsettings.json

{
    "Cronus": {
        "Api": {
            "JwtAuthentication": {
                "Authority": "https://example.com",
                "Audience": "https://example.com/resources"
            }
        }
    }
}

Startup.cs

public class Startup
{
    const string JwtSectionName = "Cronus:Api:JwtAuthentication";

    private readonly IConfiguration configuration;

    public Startup(IConfiguration configuration)
    {
        this.configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Gets the settings from a configuration section. Notice how we specify the name for the JwtBearerOptions to be JwtBearerDefaults.AuthenticationScheme.
        services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, configuration.GetSection(JwtSectionName));

        // OR

        // Gets the settings from a configuration. Notice how we specify the name for the JwtBearerOptions to be JwtBearerDefaults.AuthenticationScheme.
        services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, configuration);

        services.AddAuthentication(o =>
        {
            // AspNetCore uses the DefaultAuthenticateScheme as a name for the JwtBearerOptions. You can skip these settings because .AddJwtBearer() is doing exactly this.
            o.DefaultAuthenticateScheme = Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme;
            o.DefaultChallengeScheme = Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme;
        })
        .AddJwtBearer();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...