0

根据文档(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中所示那样调用呢?

4

1 回答 1

0

我不确定你的场景是什么,但想象一下单页应用程序 (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并声称她是超级管理员用户而不是普通用户)。

于 2018-08-06T08:16:21.007 回答