如何使用谷歌访问令牌获取用户信息

Posted

技术标签:

【中文标题】如何使用谷歌访问令牌获取用户信息【英文标题】:How to get user info ussing google access token 【发布时间】:2021-12-23 22:34:46 【问题描述】:

您好,我正在开发 google oauth2 登录,但我不知道如何使用 access 令牌或 id 令牌使用此 url 获取用户信息

https://www.googleapis.com/oauth2/v3/userinfo 在 Authorization 标头中传递访问令牌会返回此 json:
    "sub": "100366573866312827626",
    "picture": "https://lh3.googleusercontent.com/a/default-user=s96-c"

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=id_token得到这个json

    "iss": "https://accounts.google.com",
    "azp": "375890336523-u4rpach5688ltoc0v4mof1r7j70gem95.apps.googleusercontent.com",
    "aud": "375890336523-u4rpach5688ltoc0v4mof1r7j70gem95.apps.googleusercontent.com",
    "sub": "100366573866312827626",
    "at_hash": "htkn2tQqV4Ff4EmrtPDh9w",
    "iat": "1636631006",
    "exp": "1636634606",
    "alg": "RS256",
    "kid": "27c72619d0935a290c41c3f010167138685f7e53",
    "typ": "JWT"

但在这两个 json 中都没有任何用户信息,如用户名或电子邮件

感谢您的宝贵时间,抱歉我的英语不是我的母语

【问题讨论】:

【参考方案1】:

确保您在授权用户时请求了配置文件范围。

使用您的用户授权您的应用程序时返回的访问令牌。您可以通过调用People.get 方法获取用户个人资料信息

curl \
  'https://people.googleapis.com/v1/people/me?key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --compressed

用户信息端点会给你一点信息,但不如使用用户信息端点那么多。

Google 并不总是在 id 令牌中返回用户声明,所以我不会尝试依赖它。

【讨论】:

您好,我对 oauth 了解不多,我如何获得配置文件范围,以及您所说的 YOUR_API_KEY 是指我的 client_id 吗? 现在我得到了全名和 emial 但在 2 个请求中,将范围配置文件和 emal 分别放入,有可能仅在 1 个请求中获取所有信息?

以上是关于如何使用谷歌访问令牌获取用户信息的主要内容,如果未能解决你的问题,请参考以下文章

laravel socialite 从谷歌授权码获取谷歌访问令牌

使用用户名和密码获取谷歌身份验证令牌

如何获取虚拟谷歌访问令牌来测试 oauth google api

如何获取访问令牌? (Reddit API)

如何正确实现linkedIn登录?

如何正确实现linkedIn登录?