如果可以从id_token获取相同的内容,为什么还要调用getUserInfo?

时间:2018-07-10 12:13:39

标签: auth0 auth0-lock

根据文档(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

1 个答案:

答案 0 :(得分:0)

我不确定您的情况是什么,但是可以想象将单页应用程序(SPA)与后端API结合使用。

TL; DR

后端API应该使用access_token + /userinfoid_token方便了前端应用程序。

更多详细信息:

假设您直接在SPA中进行身份验证。这将产生access_tokenid_token

SPA可以使用id_token来显示一些额外的信息(昵称,电子邮件等)。

现在,如果SPA要调用后端API中的受保护端点怎么办?

这里可能是它通过了Authorization标头中的access_token(例如Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c see jwt.io

因此后端应:

  • 验证access_token

例如,使用JSON Web Key Sethttps://YOUR_AUTH0_DOMAIN/.well-known

  • 呼叫/userinfo以获取真实用户信息,例如Auth0 Get User Info

    GET https://<YOUR_AUTH0_DOMAIN>/userinfo
    Authorization: 'Bearer {ACCESS_TOKEN}'
    

也可以(在自定义标头中或作为有效负载)也传递id_token,但后端不应信任该信息(最终用户可以通过更改密码来伪造该信息) id_token,并声称她是超级管理员用户,而不是普通用户。