根据文档(https://auth0.com/docs/tokens/id-token#control-the-contents-of-an-id-token),可以要求提供一个ID_token,其中包含用户的个人资料,电子邮件...
那我为什么要像示例https://auth0.com/docs/libraries/lock/v11#2-authenticating-and-getting-user-info所示那样呼叫getUserInfo
?
答案 0 :(得分:0)
我不确定您的情况是什么,但是可以想象将单页应用程序(SPA)与后端API结合使用。
TL; DR
后端API应该使用access_token
+ /userinfo
。 id_token
方便了前端应用程序。
更多详细信息:
假设您直接在SPA中进行身份验证。这将产生access_token
和id_token
。
SPA可以使用id_token
来显示一些额外的信息(昵称,电子邮件等)。
现在,如果SPA要调用后端API中的受保护端点怎么办?
这里可能是它通过了Authorization标头中的access_token
(例如Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
see jwt.io)
因此后端应:
access_token
。 例如,使用JSON Web Key Set(https://YOUR_AUTH0_DOMAIN/.well-known
)
呼叫/userinfo
以获取真实用户信息,例如Auth0 Get User Info
GET https://<YOUR_AUTH0_DOMAIN>/userinfo
Authorization: 'Bearer {ACCESS_TOKEN}'
您也可以(在自定义标头中或作为有效负载)也传递id_token
,但后端不应信任该信息(最终用户可以通过更改密码来伪造该信息) id_token
,并声称她是超级管理员用户,而不是普通用户。