Ролевая авторизация с использованием Keycloak и ядра .NET - PullRequest
0 голосов
/ 27 мая 2019

Имеется несколько незначительных проблем с авторизацией на основе ролей в 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.

Я думаю, что должен быть лучший путь, или я что-то не так делаю.

...