Что не так с моими Startup.ConfigureServices, из-за которых аутентификация JWT Bearer не работает? - PullRequest
2 голосов
/ 18 июня 2019

Я пытался реализовать «PwdLess» как простой механизм аутентификации без пароля для моего приложения ASP.Net Core 2.2. Он успешно генерирует JWT, которые я пытаюсь использовать в бэкэнд-API моего приложения, при этом JWT передается через Authorization: Bearer <token>.

В моем методе Startup.ConfigureServices у меня есть следующий код:

            // JWT authentication
                services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
                 {
                     options.TokenValidationParameters = new TokenValidationParameters

                    {
                        ValidateIssuer = true,
                        ValidateAudience = true,
                        ValidateLifetime = true,
                        ValidateIssuerSigningKey = true,

                        ValidIssuer = "MYISSUERSTRINGHERE"
                        ValidAudience = "MYAUDIENCESTRINGHERE"
                        IssuerSigningKey = new SymmetricSecurityKey(
                        Encoding.UTF8.GetBytes("MYSECRETHERE"))
                    };
                });

            // ASP.NET Core MVC 
            services.AddMvc();

В контроллере по методу, к которому я хочу разрешить доступ, у меня есть:

        [Authorize]
        public IActionResult SomeMethod()
        {
        }

Это выдает 401, что сбивает с толку ... Тем более, что если я вместо этого использую следующий код в моем контроллере, все будет работать как положено:

        [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
        public IActionResult ValidateToken()
        {
        }

Я не понимаю, чего мне не хватает в моём Startup.ConfigureServices, что делает необходимым значение AuthenticationSchemes для моего атрибута Authorize!

Пожалуйста, вы можете пролить свет на ошибку моих путей?

1 Ответ

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

Согласно приведенным выше комментариям, кроме служб аутентификации, нам также необходимо включить промежуточное программное обеспечение Authentication до UseMvc() (а также любое другое промежуточное программное обеспечение, которое хочет получить доступ HttpContext.User):

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