Мне не повезло, когда в .Net Core 3 работали какие-либо атрибуты ролей или политик. Я начал свой проект с начального проекта .Net Core Angular с аутентификацией. Я подумал, что это как-то связано с новыми методами .AddDefault, поэтому я максимально упростил его, и он все еще не работает.
Вот моя политика:
services.AddAuthorization(options =>
{
options.AddPolicy("IsAdmin", policy =>
policy.RequireClaim("role", "admin"));
});
Вот мой контроллер:
[Authorize(Policy = "IsAdmin")]
[Route("api/[controller]")]
public class AdminController : Controller
{
...
Я создал специальную службу Profile, которая добавляет требование к токену,
var claims = new List<Claim>();
if (await _userManager.IsInRoleAsync(user, "Admin"))
{
claims.Add(new Claim(JwtClaimTypes.Role, "admin"));
}
context.IssuedClaims.AddRange(claims);
Внутри моего токена доступа (из jwt.io):
Другие части служб конфигурации:
services.AddDefaultIdentity<ApplicationUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
...
services.AddAuthentication()
.AddIdentityServerJwt();
Простой тег [Authorize]
работает нормально, если токен доступа включендругие контроллеры.
Когда я бью этот контроллер токеном доступа, я получаю 403
ответ
Чего мне не хватает, что мешает этому работать?