DefaultAuthenticateScheme не устанавливается - PullRequest
0 голосов
/ 16 апреля 2019

Я установил DefaultAuthenticateScheme при запуске, как это

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultSignInScheme =  JwtBearerDefaults.AuthenticationScheme;
});

Итак, я должен использовать что-то вроде этого:

 [Authorize]
 public IEnumerable<UserViewModel> Get()
 {
    return someData;
 }

Но мне пришлось написать этот код

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    public IEnumerable<UserViewModel> Get()
    {
        return somedata;
    }

Я гуглю проблему и замечаю, что это должно произойти при использовании AddCookie или использовании AddAuthentication () после AddMVC () при запуске, но это не мой случай.

1 Ответ

1 голос
/ 16 апреля 2019

По умолчанию он будет использовать схему аутентификации на основе куки, пока вы не укажете явно. В качестве Asp .Net Core позволяет использовать комбинацию AuthenticationSchemes. Вам нужно немного изменить свой startup.cs, чтобы удалить AuthenticationSchemes из атрибута Authorize.

services
    .AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddJwtBearer(cfg =>
    {
        cfg.RequireHttpsMetadata = false;
        cfg.SaveToken = true;
        cfg.Audience = "http://localhost:5111/";
        cfg.TokenValidationParameters = new TokenValidationParameters
        {
            // token config
        };
    });

Эта строка кода cfg.Audience = "http://localhost:5111/"; установит схему аутентификации по умолчанию, которую вы установили для этой конкретной аудитории (хоста).

Однако атрибут [Authorize] указывает схему или схемы аутентификации, которые следует использовать независимо от того, настроен ли параметр по умолчанию. Например

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]

Он будет использовать указанный AuthenticationSchemes для этого конкретного контроллера независимо от значения по умолчанию.

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