Здесь имеется несколько проблем.
В потоке учетных данных клиента нет пользователя.Маркер не содержит претензию sub
.Вот почему нет аутентифицированного пользователя.Это объясняет Несанкционированную ошибку, которая имеет HttpStatusCode 401.
Фильтр вызывает авторизацию для всех методов .Когда к методу обращается неавторизованный пользователь, это приводит к HttpStatusCode 404. Это означает, что определенные методы должны оставаться доступными для анонимных пользователей.Вы можете исключить методы из глобальной авторизации, установив атрибут AllowAnonymous
на уровне низший .
Например, HomeController:
[AllowAnonymous]
public IActionResult Error()
{
Дляпоток учетных данных клиента, вы можете захотеть изменить фильтр на что-то, что является частью токена, например область:
var policy = new AuthorizationPolicyBuilder()
.RequireClaim("scope", "MyScope").Build();
Хотя это может не подходить в качестве глобального фильтра, когда вы смешиваете функциональность (изIdentityServer и Api).
Вместо этого вы можете настраивать политики и использовать атрибуты.При запуске:
Services.AddAuthorization(option =>
{
option.AddPolicy("MyScopePolicy", p => p.RequireScope("MyScope"));
}
И в контроллере:
[Authorize("MyScopePolicy")]
[ApiController]
public class MyController : ControllerBase
{