IdentityServer4 Авторизация на основе ролей для ASP.NET Core Identity = Доступ запрещен - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть клиентское приложение ASP.NET Core, которое использует IdentityServer4 в качестве сервера входа.Клиент может войти, украшая контроллер с атрибутом [Authorize], но если я использую атрибут с ролями [Authorize(Roles = "test")], я получу Отказ в доступе

Однако, когда я анализирую JWT, явидно, что пользователь назначил правильную роль.

{
  "nbf": xxx,
  "exp": xxx,
  "iss": "xxx",
  "aud": [
    "xxx",
    "xxx"
  ],
  "client_id": "xxx",
  "sub": "xxx",
  "auth_time": xxx,
  "idp": "xxx",
  "email": "xxx",
  "role": "test", <-------------------------------
  "scope": [
    "openid",
    "profile",
    "xxx",
    "xxx"
  ],
  "amr": [
    "xxx"
  ]
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Несмотря на то, что роль пользователя присутствует в маркере доступа, она не распознается как роль, так как она является частью пользовательских утверждений.Например, User.IsInRole("test") возвращает false.

Я решил проблему, создав политику для использования RequireClaim, а затем установив атрибут Authorize для использования политики, например [Authorize(Policy = "RequireUserOnly")]

0 голосов
/ 27 апреля 2019

Пожалуйста, убедитесь, что вы подключаете правильный JWT.Тот, который вы представили, выглядит хорошо, но, вероятно, вы прикрепили его к запросу id_token, который имеет другую полезную нагрузку.

...