根据文档(https://auth0.com/docs/tokens/id-token#control-the-contents-of-an-id-token),可以请求包含用户个人资料的 id_token,e-邮件...
那么我为什么要像示例https://auth0.com/docs/libraries/lock/v11#2-authenticating-and-getting-user-infogetUserInfo
中所示那样调用呢?
根据文档(https://auth0.com/docs/tokens/id-token#control-the-contents-of-an-id-token),可以请求包含用户个人资料的 id_token,e-邮件...
那么我为什么要像示例https://auth0.com/docs/libraries/lock/v11#2-authenticating-and-getting-user-infogetUserInfo
中所示那样调用呢?
我不确定你的场景是什么,但想象一下单页应用程序 (SPA) 与后端 API 的结合。
TL;博士
后端 API 应该使用access_token
+ /userinfo
。这id_token
为前端应用程序提供了便利。
更多细节:
假设您直接在 SPA 中进行身份验证。这产生和access_token
和一个id_token
。
id_token
SPA 可以使用它来显示一些额外的信息(昵称、电子邮件、...)。
现在,如果 SPA 想要调用后端 API 中受保护的端点怎么办?
这里的一种可能性是它access_token
在 Authorization 标头中传递了(例如,Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
参见 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
并声称她是超级管理员用户而不是普通用户)。