我在前端使用
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
没有用户的姓名及其电子邮件。我缺少什么?我如何获得这些?
编辑在我的扩展程序的清单文件和传递给
email
的字典中添加profile
和chrome.identity.launchWebAuthFlow
范围后,我确实获得了电子邮件地址,但仍然没有用户的名字或姓氏。
看起来
id_token
确实不包含此信息。
对我有用的是从 code
获取 chrome.identity.launchWebAuthFlow
,然后按照从 here 开始的文档中的步骤进行操作。
请注意,
code
是一次性的,因此如果遇到错误,请获取另一个 code
以便下次尝试。
Id 令牌不会为您提供太多用户个人资料信息,它只是用于验证用户,并通过子声明提供给您。
如果您想要用户个人资料信息,那么您需要通过 people api。
userinfo_endpoint 可以并且将会为您提供有限数量的用户个人资料数据,但不能保证每次都会返回索赔。如果您想 100% 确保每次都能取回个人资料数据,Google 建议使用 people api。
如果您选择使用 userinfo 端点,只需确保检查空值,这样当数据返回空值时就不会收到任何错误。