Имеется несколько незначительных проблем с авторизацией на основе ролей в dotnet core 2.2.3 и Keycloak 4.5.0.
В Keycloak я определил роль «тестировщика» и клиентскую роль «разработчика» с соответствующими сопоставлениями ролей для пользователя «администратор». После аутентификации в Keycloak; если я смотрю на JWT в jwt.io, я вижу следующее:
"realm_access": {
"roles": [
"tester"
]
},
"resource_access": {
"template": {
"roles": [
"developer"
]
},
...
},
В ядре .NET я пробовал несколько вещей, таких как добавление [Authorize(Roles = "tester")]
или [Authorize(Roles = "developer")]
к моему методу контроллера, а также использование авторизации на основе политик, где я проверяю context.User.IsInRole("tester")
внутри моей реализации AuthorizationHandler<TRequirement>
.
Если я установлю несколько точек останова в обработчике аутентификации. Когда его ударили, я могу видеть роли «тестировщик» и «разработчик», перечисленные как элементы под context.user.Claims
IEnumerable следующим образом.
{realm_access: {"roles":["tester"]}}
{resource_access: {"template":{"roles":["developer"]}}}
Так что я должен быть в состоянии успешно выполнить авторизацию в обработчике аутентификации, проверив значения для realm_access
и resource_access
в коллекции context.user.Claims
, но это потребует от меня десериализации значения утверждений, которые кажутся просто строками JSON.
Я думаю, что должен быть лучший путь, или я что-то не так делаю.