Давайте подумаем о простой веб-службе на основе REST для хранения и извлечения объектов JSON. Без какой-либо аутентификации каждый пользователь может получить доступ к любым данным.Аутентификация на основе утверждений и круги пользователей
Теперь давайте добавим использование JWT для аутентификации пользователей. Конечно, поскольку мы не выполняем авторизацию, все же каждый пользователь может получить доступ к чему-либо, но, по крайней мере, теперь мы знаем, кто обращается к чему.
Следующий шаг: при сохранении объекта сохраните заявку пользователя sub
с этим объектом и убедитесь, что запрос пользователя sub
соответствует одному из запрошенных объектов, и если да, поставьте его. Теперь у нас есть авторизация для каждого пользователя. Пока что так просто.
Теперь давайте добавим возможность пользователям обмениваться объектами с другими пользователями. Для простоты, скажем, мы хотим иметь предопределенные группы (т. Е. Роли), и мы хотим разрешить пользователю выбирать, какая группа (роль) имеет доступ к создаваемым им объектам. Это все еще легко, так как у вас есть предопределенный список групп, поэтому вы можете позволить пользователю выбрать один или несколько и прикрепить их к объекту. Кроме того, поставщик идентификации должен быть настроен таким образом, чтобы он вносил в токены каждого пользователя знак groups
, поэтому мы можем их сопоставить. Как мы уже можем видеть из этого абзаца, все становится более сложным.
Вопрос 1: До сих пор я прав, что обработка «статических» групп таким образом - путь?
Теперь давайте пользователям возможность создавать группы самостоятельно. Это все еще не сложно, но как заставить поставщика удостоверений использовать динамически созданные группы? Конечно, мы не хотим, чтобы администратор обновлял конфигурацию поставщика удостоверений каждый день ;-).
Вопрос 2: Как мы обрабатываем динамически созданные группы?
Теперь, наконец, давайте забудем о группах и предположим, что мы хотим, чтобы пользователи могли просто делиться своими объектами с другими пользователями. Это должно настраиваться для каждого объекта отдельно. как нам это сделать? Сохраняем ли мы список пользователей на объекте? Если да, то что именно мы сохраняем? Требование sub
? Если да, то как пользователь владельца знает соответствующие значения? Или ...?
И: Предполагается, что пользователи хотят динамически размещать своих друзей в динамически создаваемых кругах, как мы это сделаем?
Вопрос 3: Как токены и динамически создаваемые группы с динамически назначенными пользователями работают друг с другом?
Спасибо, это очень полезно :-) –