根据文档(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_tokenSPA 可以使用它来显示一些额外的信息(昵称、电子邮件、...)。
现在,如果 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并声称她是超级管理员用户而不是普通用户)。