我在前端使用了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
的字典中添加email
和profile
作用域后,我确实得到了电子邮件地址,但仍然没有用户的名字或姓氏。
2条答案
按热度按时间gorkyyrv1#
看起来
id_token
确实不包含此信息。对我有用的方法是从chrome.identity.launchWebAuthFlow
获取code
,然后按照文档中的步骤从这里开始。请注意,
code
是一次性的,因此如果遇到错误,请获取另一个code
以进行下一次尝试。izj3ouym2#
ID令牌不会给予你太多的用户配置文件信息,它只是用来验证用户,并与子声明一起提供给你。
如果你想要可靠的用户配置文件信息,那么你应该去通过people api。
更新
userinfo_endpoint可以并将为您提供有限的用户配置文件数据,但不能保证每次都会返回索赔。如果你想100%确保每次都能取回个人资料数据,Google建议你使用people API。
如果您选择使用userinfo端点,请确保检查空值,以便在数据返回空值时不会出现任何错误。