ASP. NET Core 3.1.1 Jwt перенаправляет вместо возврата статуса http 401 после перехода с ASP. NET Core 2.2 - PullRequest
0 голосов
/ 18 марта 2020

После переноса моего веб-сайта с. NET Core 2.2 на 3.1.1 мои конечные точки API внезапно начали пытаться перенаправить мой запрос API на страницу входа по умолчанию (/Account/Login?ReturnUrl=, которой у меня даже нет мои маршруты).

Мой API-интерфейс использует схему аутентификации канала-носителя JWT со схемой вызова JWT, но перенаправление все же произошло.

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

Я наконец нашел решение проблемы, но Я понятия не имею, почему это действительно помогло.

Первоначально мои службы были установлены как:

services
  .AddIdentity<IdentityUser, IdentityRole>()
  .AddSignInManager()
  .AddEntityFrameworkStores<CleWebToolsIdentityDbContext>();

Но это сделало перенаправление.

То, что наконец решило мою проблему, было установив их в:

services
  .AddIdentityCore<IdentityUser>()
  .AddRoles<IdentityRole>()
  .AddSignInManager()
  .AddEntityFrameworkStores<CleWebToolsIdentityDbContext>();

Может кто-нибудь сказать мне, что здесь происходит?

Как метод AddIdentity вызывает перенаправление, даже если схема вызова должна быть JWT?

1 Ответ

1 голос
/ 19 марта 2020

Это связано с тем, что AddIdentity регистрирует стандартные схемы аутентификации на основе Cook ie для самого приложения, внешнего входа (например, Facebook и Google) и 2FA. Будет сброшена схема по умолчанию, если вы поставите services.AddIdentity<IdentityUser, IdentityRole>() ниже конфигурации AddJwtBearer, чтобы избежать этого, вы можете поместить конфигурацию идентификации выше конфигурации носителя jwt:

services
.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders().AddDefaultUI();

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

});

Использование AddIdentityCore работает, потому что работает он не регистрирует схемы аутентификации на основе Cook ie по умолчанию, см. AddIdentity против AddIdentityCore для получения более подробной информации.

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