从id_token获取用户信息

问题描述 投票:0回答:2

我在前端使用

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
范围后,我确实获得了电子邮件地址,但仍然没有用户的名字或姓氏。

python oauth-2.0 google-oauth google-api-python-client
2个回答
0
投票

看起来

id_token
确实不包含此信息。 对我有用的是从
code
获取
chrome.identity.launchWebAuthFlow
,然后按照从 here 开始的文档中的步骤进行操作。

请注意,

code
是一次性的,因此如果遇到错误,请获取另一个
code
以便下次尝试。


0
投票

Id 令牌不会为您提供太多用户个人资料信息,它只是用于验证用户,并通过子声明提供给您。

如果您想要用户个人资料信息,那么您需要通过 people api

更新

userinfo_endpoint 可以并且将会为您提供有限数量的用户个人资料数据,但不能保证每次都会返回索赔。如果您想 100% 确保每次都能取回个人资料数据,Google 建议使用 people api。

如果您选择使用 userinfo 端点,只需确保检查空值,这样当数据返回空值时就不会收到任何错误。

© www.soinside.com 2019 - 2024. All rights reserved.