Если ClaimsIdentity установлен через JwtBearerAuthentication промежуточного оленья кожа иметь достаточное количество ролей требуется черезJwtBearerAuthentication оленья кожа вернется 403 Forbidden, всегда возвращает 401 Несанкционированное
[Authorize(Roles="whateverrole")]
возвращает 401 вместо 403.
Я борюсь с этим в осины .net core web api всю ночь. Я также видел этот вопрос в stackoverflow, но я не видел решения, которое я мог бы сделать. Порядок регистрации промежуточного программного обеспечения или параметра AutomaticChallange выполнял эту работу.
Я не знаю, не хватает ли я чего-то, но кажется шокирующим, что это не было решено должным образом в течение многих лет. Это так раздражает.
Есть ли нормальный, обычный, безотходный, не-взломанный способ решения этого?
UPDATE (в ответ на комментарий от @juunas)
Я попытался, что и роли правильно отображаются в формуле изобретения. Итак, если я удалю требование Роли из атрибута, для всех ролей, которым назначен пользователь (в токене JWT) User.IsInRole (x) возвращает true. Так что картирование работает отлично.
О переходе от авторизации на основе ролей к политикам ... можете ли вы предоставить некоторую ссылку на некоторые рекомендации, рекомендации или что-то, на чем вы основываете это утверждение? Я не говорю, что это не то, что нужно сделать, а просто хотел бы это понять.
Вы пытались удалить требование к роли и посмотреть, будет ли 'User.IsInRole (" whateverrole ")' возвращать true? В ASP.NET Core вы должны попытаться отойти от авторизации на основе ролей, поскольку вам необходимо определить промежуточное программное обеспечение, какое утверждение оно должно рассматривать как роли. Легче просто сделать политику, требующую наличия этого требования, и указать имя политики для AuthorizeAttribute. – juunas
Спасибо за ваш комментарий. Я ответил на это вопросом UPDATE. –
Ну, официальная документация в ASP.NET Core достаточно хороша для понимания того, как можно сделать авторизацию: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims – juunas