oauth2.0 从id_token获取用户信息

9lowa7mx  于 2023-08-02  发布在  其他
关注(0)|答案(2)|浏览(155)

我在前端使用了chrome.identity.launchWebAuthFlow来获取Google OAuth2 id_token。我正在尝试使用此令牌在Django后端获取用户信息。作为一个实验,我硬编码了新获得的id_token并验证了它:

from google.oauth2 import id_token
from google.auth.transport import requests

MY_APP_CLIENT_ID = 'xxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com'
token = 'a very long id_token'

idinfo = id_token.verify_oauth2_token(token, requests.Request(), MY_APP_CLIENT_ID)
print(idinfo.keys())

字符串
下面是输出:

dict_keys(['iss', 'azp', 'aud', 'sub', 'at_hash', 'c_hash', 'nbf', 'iat', 'exp', 'jti'])


因此,idinfo没有用户的姓名和电子邮件。我错过了什么?我如何获得这些?

编辑在我的扩展名的清单文件和传递给chrome.identity.launchWebAuthFlow的字典中添加emailprofile作用域后,我确实得到了电子邮件地址,但仍然没有用户的名字或姓氏。

gorkyyrv

gorkyyrv1#

看起来id_token确实不包含此信息。对我有用的方法是从chrome.identity.launchWebAuthFlow获取code,然后按照文档中的步骤从这里开始。
请注意,code是一次性的,因此如果遇到错误,请获取另一个code以进行下一次尝试。

izj3ouym

izj3ouym2#

ID令牌不会给予你太多的用户配置文件信息,它只是用来验证用户,并与子声明一起提供给你。
如果你想要可靠的用户配置文件信息,那么你应该去通过people api

更新

userinfo_endpoint可以并将为您提供有限的用户配置文件数据,但不能保证每次都会返回索赔。如果你想100%确保每次都能取回个人资料数据,Google建议你使用people API。
如果您选择使用userinfo端点,请确保检查空值,以便在数据返回空值时不会出现任何错误。

相关问题