Keycloak, Nestjs — ResourceGuard всегда приводит к ошибке 403 Forbidden?

У меня есть REST API NestJS. Я пытаюсь использовать Keycloak в качестве службы авторизации. Я хочу защитить конечные точки моего REST API с помощью ресурсов, областей действия и разрешений.

Проблема в том, что я получаю 403 Forbidden Resource Error при каждом запросе. Я пытаюсь объяснить всю свою конфигурацию с большим количеством изображений. Я что-то упустил или я что-то неправильно понял?

Конфигурация маскировки ключей

Конфигурация клиента:

Мой тестовый ресурс:

Моя политика:

Мое разрешение:

Оценка Для проверки моей конфигурации я использую внутренний инструмент оценки. У меня есть пользователь: « testcustomer », который является членом группы: Testproject. Поэтому он должен иметь доступ к ресурсу. Оценка показывает, что он работает правильно:

ОТДЫХА API:

В моем REST API NestJs я использую пакет nest-keycloak-connect.

Это конфигурация KeycloakModule:

Мой Тест-Контроллер

Мое понимание пакета: когда пользователь (в данном случае testcustomer) отправляет запрос к API на следующий URI: «http://localhost:3002/api/test/test», ресурс из Keycloak связан с это. И testcustomer уполномочен вызывать эту конечную точку. Другие пользователи, не входящие в группу Testproject, получат ответ 403 Forbidden.

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

Примечание. Работает общая аутентификация или даже авторизация через роли.

1 ответ

благодаря владельцу пакета я получил ответ:

https://github.com/ferrerojosh/nest-keycloak-connect/issues/137

Его ответ/решение:

Ах, я думаю, это из-за того, что у ваших прицелов есть характер.

Если вы думаете о файле в официальной библиотеке:https://github.com/keycloak/keycloak-nodejs-connect/blob/f8e397cd7a1a763db5a45a07c3c3e40fec5cf8f2/middleware/enforcer.js#L18-L33

Он отделяет разрешение, котороеpermission:scopeпросто расколом.

Здесь произошло то, что библиотека андерилинга получает строкуFile:files:readи он отправляется исполнителю keycloak в качестве ресурсаFileс размахомfiles.

тлдр; решение состоит в том, чтобы удалить:персонаж в вашей области. Если это не сработает для вас, вы можете подать заявку наkeycloak-connectкоманда, так как я не контролирую это поведение.

Другие вопросы по тегам