Где я могу найти пример передового опыта по реализации авторизации на основе ресурсов в nodeJS или использованию внешнего сервиса?
Я буду рефакторить большую систему с довольно сложными бизнес-требованиями, которые также могут измениться в будущем, и у нас уже есть тип аутентификации на основе ресурсов, который плохо реализован. По сути, мне нужен детальный контроль над доступом пользователей для каждого элемента. Если в нашей базе данных есть, например, книги, авторы, издатели, мне понадобится возможность:
- Предоставьте пользователю доступ для чтения ко всем книгам авторов.
и Y
- Предоставьте пользователю доступ для записи к книгам
, и book72
- Предоставьте пользователю доступ для чтения и записи ко всем книгам из
publisher1
Поскольку данные довольно динамичны, доступ должен оцениваться при каждом запросе любого пользователя. Разрешения не могут быть кэшированы. Ресурсов также может быть довольно много, примерно 10-100 тысяч предметов.
Я ищу лучший способ сделать это. Я предполагаю, что для этого существуют как платные, так и открытые решения, хотя быстрый поиск в Google не дал ничего полезного. Возможно, я использую плохие ключевые слова.
Я смотрел на keycloak, но он кажется довольно громоздким. Мне нужно создать каждую книгу/издателя/автора как ресурс в keycloak. Также кажется, что мне также нужно добавить явное разрешение для каждой комбинации ресурс/пользователь И что не существует простого способа моделирования отношений между ресурсами, чтобы предоставить доступ ко всем книгам, имеющим общего издателя. Возможно, в этом ошибаюсь. Тот факт, что мне приходится поддерживать актуальность данных между моей базой данных и keycloak, кажется плохой практикой, и похоже, что keycloak здесь просто помеха.
Судя по тому, что я видел до сих пор, мне кажется, что лучшим решением было бы написать собственную логику аутентификации и использовать keycloak или другой сервис только в качестве поставщика удостоверений. Поскольку производительность важна, я готов поспорить, что мог бы просто сохранить права пользователя в своей базе данных PG вместе с моими фактическими данными в форме таблиц «многие ко многим» и оценить доступ, используя внутренние соединения в фактическом запросе, извлекающем данные из PG. Я упускаю какую-либо причину, почему это было бы плохой идеей?