У меня есть система с REST API. Пользователи API REST должны иметь возможность проходить аутентификацию с использованием OpenID Connect через Oauth2. Сама система имеет собственную систему разрешений. Мне нужно сопоставить пользователя IDP с моей локальной системой разрешений. Я думаю о сохранении ключа openid scope sub в локальной базе данных в качестве уникального идентификатора пользователя.
Но какой токен я должен вернуть пользователю в API. Должен ли это быть идентификатор доступа oauth2 или token_id из уровня OpenID Connect, или, возможно, оба?
Итак, я вижу эти альтернативы для конечного пользователя API:
Authorization: Bearer <access_id>
Authorization: Bearer <token_id>
Authorization: Bearer <access_id>
TokenID: <token_id>
Не сохраняя token_id / access_id в системе, мне нужно получить это от клиента для каждого запроса API. Идентификатор токена содержит утверждения (под) JWT, поэтому мне нужно это проверить, что клиент может сделать в моей системе.
Нужно ли хранить какой-либо из приведенных ниже идентификаторов в моей локальной базе данных, чтобы проверить API запрашивает, или пользователь должен предоставить его?
- Refre sh token?
- Access token?
- ID токена?
Я в основном после аутентификации и идентификации пользователя. Я не получаю доступ к каким-либо внешним ресурсам, кроме этого.
И последний вопрос. Нужно ли проверять токен доступа при каждом запросе к IDP или я могу его кэшировать? Нужно ли проверять токен доступа и идентификатор токена при использовании OpenID Connect?
Редактировать:
Моя система сама имеет REST API и собственную систему разрешений. Система разрешений использует идентификаторы пользователей, данные любой системой аутентификации, использующей OpenID Connect. Первый пользователь добавляется в систему разрешений вручную.
Поток мысли:
- Пользователь моей системы запрашивает https://mysystem/login
- Пользователь получить перенаправление на https://idp/auth
- IDP перенаправляет успешный вход на https://mysystem/callback Моя система получает идентификатор пользователя ( sub ) и электронную почту от токена id JWT.
- И обратно к пользователю с токеном доступа (не OID C id токена).
- Теперь пользователь может выполнить: curl -H "Авторизация: токен доступа к носителю" https://mysytem/some/resource
- Mysytem получает этот запрос от пользователя, но не знает, как сопоставить токен доступа с идентификатором пользователя в базе данных, не запрашивая IDP для идентификатора пользователя.
Я хочу использовать внешний IDP, чтобы позволить пользователям входить в систему, а не получать доступ к ресурсам из сторонних систем.