Зачем вызывать getUserInfo, если я могу получить то же самое из id_token?
Согласно документации ( https://auth0.com/docs/tokens/id-token) можно запросить id_token, содержащий профиль пользователя, e- почта...
Так зачем мне звонить getUserInfo
как показано в примере https://auth0.com/docs/libraries/lock/v11?
1 ответ
Я не уверен, каков ваш сценарий, но представьте себе одностраничное приложение (SPA) в сочетании с бэкэнд-API.
TL; DR
бэкэнд API должен использовать access_token
+ /userinfo
, id_token
удобство для внешнего интерфейса.
Еще несколько деталей:
Предположим, вы делаете аутентификацию прямо в SPA. Это дает и access_token
и id_token
,
id_token
может использоваться SPA для отображения дополнительной информации (псевдоним, электронная почта,...).
Что теперь, если SPA хочет сделать вызов защищенной конечной точки в бэкэнд-API?
Возможность здесь будет состоять в том, что он проходит access_token
в заголовке авторизации (например, Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
см. jwt.io)
Так что бэкэнд должен:
- проверить
access_token
,
Например, используя набор веб-ключей JSON (https://YOUR_AUTH0_DOMAIN/.well-known
)
вызов
/userinfo
чтобы получить реальную информацию о пользователе, например, Auth0 Получить информацию о пользователеGET https://<YOUR_AUTH0_DOMAIN>/userinfo Authorization: 'Bearer {ACCESS_TOKEN}'
Вы также можете передать id_token
(в пользовательском заголовке или в качестве полезной нагрузки), но серверная часть не должна доверять этой информации (конечный пользователь мог подделать ее, например, изменив id_token
и утверждая, что она является пользователем superadmin, а не обычным пользователем).