van*_*art 1 oauth-2.0 jwt google-oauth google-cloud-platform
我们正在将现有的 Javascript Google 登录迁移到新的 Google OAuth 库,如此处弃用通知中所述 - https://developers.googleblog.com/2021/08/gsi-jsweb-deprecation.html
我们遵循本指南,我们的 javascript 代码如下所示:
const client = google.accounts.oauth2.initTokenClient({
client_id: <our-client-id>,
scope: 'https://www.googleapis.com/auth/userinfo.email \
https://www.googleapis.com/auth/userinfo.profile',
callback: (tokenResponse: any) => {
if (tokenResponse && tokenResponse.access_token) {
if (google.accounts.oauth2.hasGrantedAllScopes(tokenResponse,
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile')) {
console.log(tokenResponse.access_token );
.. further auth logic
}
}
}
});
client.requestAccessToken();
Run Code Online (Sandbox Code Playgroud)
从某种意义上说,一切工作正常,我能够从 Google 检索令牌,只是看起来新库生成的 JWT 令牌无效。更准确地说,它与 JWT 令牌规范不匹配 - 令牌不由 3 部分组成(标头/有效负载/签名)并且太短(意味着它可能不携带应携带的所有数据)。它也没有通过 https://jwt.io/中的验证
让我给你举个例子。
以前版本的库生成的令牌:
eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg2MTY0OWU0NTAzMTUzODNmNmI5ZDUxMGI3Y2Q0ZTkyMjZjM2NkODgiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJhY2NvdW50cy<...>1MWMifQ.OgOOhbTTbLYzcx NhNdvozf1<...>4bRLT3DILyWeO1FX64WaabGRjCR2amQ
新库生成的令牌:
ya29.A0ARrdaM_hHsX50Qim6c1NudaZvv6qMpMkbNxW-ltOh49s6U4JKZNvPJV3d0TAE_rqqvkvVG2983ryewiufhdsklKGiH-vEdIs7u2389iwek-dcgkY1SE-b21g0932oiweKT-ZKTJvmHA是
因此,问题是新版本的库不会返回正确的 JWT 令牌(如上所述)。我们不能将这个新令牌用于任何用途,因为我们无法验证它的完整性(谁颁发的、令牌秘密是否与我们的应用程序 ID 匹配、令牌何时过期等)。
我还尝试使用 Google 自己的 OAuth 调试端点对此进行测试,但它也抱怨第二个令牌无效:
https://oauth2.googleapis.com/tokeninfo?id_token=ya29.A0ARrdaM_hHsX50Qim6c1NudaZvv....
Run Code Online (Sandbox Code Playgroud)
注意:由于 JWT 包含一些私有数据,因此我剥离了第一个令牌的 base64 编码部分(第一个点之后和第二个点之前的部分),与第三部分(第二个点之后)相同。由于我无法理解最后一个标记,我也替换了其中的一些字符,但这应该不影响这个问题的演示。
有人遇到过这样的事情吗?我们有一组现有项目需要迁移到新的 JS 库,但看起来它根本不起作用。我尝试从头开始创建一个新项目,只是为了看看问题是否仅影响旧项目,但没有成功 - 使用新方法时,Google OAuth 返回相同的损坏令牌。
Google OAuth 访问令牌不是JWT。它们是不透明的二进制值,这意味着您无法直接从令牌中提取信息。然而,谷歌可以在其系统中查找该令牌。
您可以通过调用此端点来验证 Google OAuth 访问令牌:
curl -H 'Authorization: Bearer $ACCESS_TOKEN' https://www.googleapis.com/oauth2/v3/tokeninfo
Run Code Online (Sandbox Code Playgroud)
根据用户身份创建的令牌的附加信息:
curl -H 'Authorization: Bearer $ACCESS_TOKEN' https://www.googleapis.com/oauth2/v3/userinfo
Run Code Online (Sandbox Code Playgroud)
如果令牌无效,则请求将失败。
返回的信息将是描述令牌的 JSON。
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |