Как проверить токен JWT в веб-API aspnet.core?

Я создал собственный класс промежуточного программного обеспечения, который проверяет токен JWT. Я вызываю этот метод перед app.AddMvc() в методе настройки. ***

Я хотел бы знать, что я должен добавить в службы конфигурации для аутентификации моего веб-API с помощью JWT? Я добавил [Авторизовать] в свой класс контроллера

Нужно ли мне сначала вызывать мой класс промежуточного программного обеспечения, который проверяет токен JWT в методе Configure? или мне следует позвонить App.UseAuthentication() Я использую следующий порядок:

 app.UseAuthentication();
 app.MessageHandlerMiddleware();
 app.UseMvc();

Я новичок в реализации веб-API .net. Не могли бы вы мне помочь?


person Girish    schedule 21.08.2018    source источник
comment
В чем причина создания специального класса промежуточного программного обеспечения для проверки JWT? Есть ли конкретная причина, по которой вы не можете использовать встроенный процесс проверки?   -  person Kirk Larkin    schedule 21.08.2018
comment
Честно говоря, я не уверен, как проверить это с помощью встроенного процесса проверки !! Из-за чего я создал собственный материал для аутентификации.   -  person Girish    schedule 21.08.2018
comment
Прочтите Защита ASP.NET Core 2.0 Приложения с JWT и посмотрите, поможет ли это.   -  person Kirk Larkin    schedule 21.08.2018
comment
Спасибо Кирику Ларкину. Позволь мне проверить   -  person Girish    schedule 21.08.2018


Ответы (1)


Из одного из моих ответов вы можете увидеть, как мы передаем токен JWT и как выглядит код для классической .NET (неосновной ) ASP.NET WebAPI 2.

Отличий не много, код для ASP.NET Core похож.

Ключевой аспект - когда вы добавляете конфигурацию JWT в автозагрузку, приложение выполняет проверку автоматически.

services
    .AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddJwtBearer(x =>
    {
        x.RequireHttpsMetadata = false;
        x.SaveToken = true;
        x.TokenValidationParameters = new TokenValidationParameters()
        {
            ValidateIssuerSigningKey = true,
            ValidateLifetime = true,
            IssuerSigningKey = _configuration.GetSymmetricSecurityKey(),
            ValidAudience = _configuration.GetValidAudience(),
            ValidIssuer = _configuration.GetValidIssuer()
        };
    });

(используйте ссылку выше, чтобы увидеть реализацию GetSymmetricSecurityKey, GetValidAudience, GetValidIssuer доп. методов)

Также очень важная часть:

services.AddAuthorization(auth =>
{
    auth
    .AddPolicy(
        _configuration.GetDefaultPolicy(),
        new AuthorizationPolicyBuilder()
            .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme‌​)
            .RequireAuthenticatedUser().Build()
    );
});
person Alex Herman    schedule 15.10.2018