Внедрение JwtBearerOptions в контроллер - PullRequest
1 голос
/ 09 июля 2019

В Startup.cs я включаю аутентификацию JWT, которая отлично работает во всех моих приложениях.

b.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, o =>
{
    o.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = key,
        ValidateIssuer = true,
        ValidIssuer = JwtConstants.Issuer,
        ValidateAudience = true,
        ValidAudience = JwtConstants.Audience,
        ValidateLifetime = true,
        ClockSkew = TimeSpan.Zero
    };
});

В одном из моих контроллеров я хотел бы получить дескриптор TokenValidationParameters, который установлен в конфигурации Startup.cs. Я думал, что смогу сделать это, предоставив моему конструктору контроллера значение IOptions<JwtBearerOptions> options и прочитав options.Value.TokenValidationParameters, однако при вводе свойства не соответствуют значениям, установленным в Startup.cs.

Моя конечная цель - вручную проверить токен JWT, как показано ниже.

var handler = new JwtSecurityTokenHandler();
var user = handler.ValidateToken(token, validationParameters, out var validatedToken);

1 Ответ

1 голос
/ 09 июля 2019

Чтобы получить параметры, которые вы зарегистрировали в своей схеме аутентификации при запуске, вам придется использовать IOptionsMonitor для извлечения названных параметров.

В вашем контроллере введите его вот так

public YourController(IOptionsMonitor<JwtBearerOptions> jwtOptions, ...) { ... }

Затем, когда вы хотите получить экземпляр параметров, вы получите его с тем же именем, которое вы использовали для регистрации схемы аутентификации. Вот как в вашем случае:

var yourOptions = _jwtOptions.Get(JwtBearerDefaults.AuthenticationScheme);

Подробнее о шаблоне опций в ядре aspnet вы можете прочитать здесь: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-2.2

...