正如其他人提到的,您可以将 GET 发送到https://www.googleapis.com/oauth2/v3/userinfo,使用您刚刚收到的 OAuth2 不记名令牌,您将收到包含有关用户的一些信息(id、名称等)的响应。
还值得一提的是,Google 实现了OpenID 连接这个用户信息端点只是其中的一部分。
OpenID 连接是 OAuth2 之上的身份验证层。交换授权时code
在 Google 的令牌端点,您会获得一个访问令牌(access_token
参数)以及 OpenID Connect ID 令牌(id_token
范围)。
这两个令牌都是JWT(JSON 网络令牌,https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token).
如果你解码它们,你会得到一些断言,包括id用户的。如果您将此 ID 链接到数据库中的用户,您可以立即识别他们,而无需执行额外的 userinfo GET(节省时间)。
正如评论中提到的,这些令牌是使用 Google 的私钥签名的,您可能需要使用 Google 的公钥来验证签名(https://www.googleapis.com/oauth2/v3/certs)以确保它们是真实的。
您可以通过将 JWT 粘贴到以下位置来查看 JWT 中的内容https://jwt.io/(向下滚动查看 JWT 调试器)。这些断言看起来像这样:
{
"iss":"accounts.google.com",
"id":"1625346125341653",
"cid":"8932346534566-hoaf42fgdfgie1lm5nnl5675g7f167ovk8.apps.googleusercontent.com",
"aud":"8932346534566-hoaf42fgdfgie1lm5nnl5675g7f167ovk8.apps.googleusercontent.com",
"token_hash":"WQfLjdG1mDJHgJutmkjhKDCdA",
"iat":1567923785,
"exp":1350926995
}
还有各种编程语言的库可以以编程方式解码 JWT。
PS:要获取 Google 的 OpenID Connect 提供商支持的 URL 和功能的最新列表,您可以检查该 URL:https://accounts.google.com/.well-known/openid-configuration.