Где я могу найти пример передового опыта по реализации авторизации на основе ресурсов в nodeJS или использованию внешнего сервиса?

Я буду рефакторить большую систему с довольно сложными бизнес-требованиями, которые также могут измениться в будущем, и у нас уже есть тип аутентификации на основе ресурсов, который плохо реализован. По сути, мне нужен детальный контроль над доступом пользователей для каждого элемента. Если в нашей базе данных есть, например, книги, авторы, издатели, мне понадобится возможность:

  1. Предоставьте пользователю доступ для чтения ко всем книгам авторов.иY
  2. Предоставьте пользователю доступ для записи к книгам,иbook72
  3. Предоставьте пользователю доступ для чтения и записи ко всем книгам изpublisher1

Поскольку данные довольно динамичны, доступ должен оцениваться при каждом запросе любого пользователя. Разрешения не могут быть кэшированы. Ресурсов также может быть довольно много, примерно 10-100 тысяч предметов.

Я ищу лучший способ сделать это. Я предполагаю, что для этого существуют как платные, так и открытые решения, хотя быстрый поиск в Google не дал ничего полезного. Возможно, я использую плохие ключевые слова.

Я смотрел на keycloak, но он кажется довольно громоздким. Мне нужно создать каждую книгу/издателя/автора как ресурс в keycloak. Также кажется, что мне также нужно добавить явное разрешение для каждой комбинации ресурс/пользователь И что не существует простого способа моделирования отношений между ресурсами, чтобы предоставить доступ ко всем книгам, имеющим общего издателя. Возможно, в этом ошибаюсь. Тот факт, что мне приходится поддерживать актуальность данных между моей базой данных и keycloak, кажется плохой практикой, и похоже, что keycloak здесь просто помеха.

Судя по тому, что я видел до сих пор, мне кажется, что лучшим решением было бы написать собственную логику аутентификации и использовать keycloak или другой сервис только в качестве поставщика удостоверений. Поскольку производительность важна, я готов поспорить, что мог бы просто сохранить права пользователя в своей базе данных PG вместе с моими фактическими данными в форме таблиц «многие ко многим» и оценить доступ, используя внутренние соединения в фактическом запросе, извлекающем данные из PG. Я упускаю какую-либо причину, почему это было бы плохой идеей?

0 ответов

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