Как изменить локальную аутентификацию JWT по умолчанию в ядре dot net - PullRequest
0 голосов
/ 02 января 2019

В моем приложении есть аутентификация jwt, Вот как я реализовал в своем классе startup.cs

services.AddAuthentication()
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII
                        .GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
                    ValidateIssuer = false,
                    ValidateAudience = false
                };

            });

внутри Настроить метод

app.UseAuthentication();

в контроллерах используется атрибут

[Authorize]

Обычная аутентификация работает нормально. Я хочу проверить некоторые пользовательские вещи при аутентификации, не теряя процесс аутентификации по умолчанию, что я имею в виду, что не хочу писать весь свой новый метод аутентификации.

1 Ответ

0 голосов
/ 02 января 2019

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

Во-первых, вы можете реализовать собственный обработчик аутентификации:

public class CustomAuthenticationHandler : AuthenticationHandler<CustomAuthHandlerOptions>
{
    public CustomAuthenticationHandler(IOptionsMonitor<CustomAuthHandlerOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
    {
    }

    protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
    {
        //Write custom logic here
        return await Context.AuthenticateAsync(Scheme.Name);
    }
}

public class CustomAuthHandlerOptions : AuthenticationSchemeOptions
{
    public string MyCustomOptionsProp { get; set; }
}

А затем вы можете добавить схему к AuthenticationBuilder:

        services.AddAuthentication()
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII
                        .GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
                    ValidateIssuer = false,
                    ValidateAudience = false
                };

            })
            .AddScheme<CustomAuthHandlerOptions, CustomAuthenticationHandler>("CustomAuthJwt", options =>
                {
                    options.MyCustomOptionsProp = "Custom Value";
                });

У меня нетфактически проверял это, но я знаю, что идея этого подхода работает, потому что он был реализован в IdentityServer4.AccessTokenValidation Nuget Package .Мой пример - только самая простая версия этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...