Возможное решение:
Вы можете сделать области (scp в токене доступа) вашими разрешениями. Ниже приведены шаги:
- На своем сервере авторизации создайте свои настраиваемые области (разрешения) и установите их как области по умолчанию (это необходимо). Например, создайте 2 области действия по умолчанию:
books.read (default=true)
books.write (default=true)
Перейдите к политикам доступа на вашем сервере авторизации, создайте одну, если она не определена.
Создайте правила политики доступа на странице политик доступа, правила будут вашим сопоставлением между группами и областями.
Проверьте, что на вкладке предварительного просмотра токена хитрость заключается в том, чтобы оставить поле scopes пустым, чтобы сервер авторизации мог возвращать области по умолчанию, которые установлены для пользователя, как объяснил Okta:
Область по умолчанию будет возвращена в токене доступа, когда клиент опускает параметр области в запросе токена, при условии, что эта область разрешена как часть правила политики доступа.
Теперь в вашем приложении при запросе кода авторизации убедитесь, что параметр запроса области пуст.
В зависимости от библиотеки, которую вы используете, вы можете столкнуться с некоторыми проблемами, если по умолчанию они ожидают, что id_token всегда будет возвращаться, но вы, вероятно, сможете его настроить. Например: https://github.com/okta/okta-auth-js/issues/827
Ограничения решения:
Как упоминалось в шагах 4 и 5, мы опускаем параметр запроса области, это означает, что будут возвращены только наши настраиваемые области, назначенные для пользователя или его групп, поскольку базовые области, которые предопределены Okta, такие как profile
, openid
, email
. .. не возвращается. Это также означает, что мы пропускаем OIDC, которому нужна область openid
, поэтому id_token
не будет возвращен, а вернется только access_token
. Таким образом, это решение предполагает, что вам не нужны никакие базовые области, предопределенные Okta.
Если вам нужен какой-либо из базовых прицелов
Как описано в ограничениях, решение предполагает, что вам не нужны никакие базовые области действия, предопределенные Okta. Но если вы это сделаете, то ниже представлено решение, которое работает в этом случае, но не так хорошо.
При запросе кода авторизации в потоке oauth нужно отправить запрос дважды
первый: опустить параметр запроса области, поэтому возвращаются области по умолчанию.
второй: добавьте области, возвращенные из первого запроса, в список необходимых вам базовых областей, например openid
, profile
, 'email'. Итак, вы бы отправили что-то вроде (уже закодировано)
?scope=books.read%20books.write%20openid%20profile%20email
Заявление об ограничении ответственности:
Приведенное выше решение не рекомендуется, но оно работает. Если кто-то может найти какие-либо проблемы с безопасностью с помощью вышеуказанного решения, оставьте это в комментариях.
person
Said Saifi
schedule
20.06.2021