Google OAuth v2.0生成无效JWT



我们正在将现有的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();

从某种意义上说,一切都很好,我能够从Google检索令牌,只是看起来新库生成的JWT令牌无效。更准确地说,它不符合JWT令牌规范——令牌没有由3部分组成(报头/有效负载/签名),而且它太短(这意味着它可能没有携带所有应该携带的数据)。它也没有通过https://jwt.io/

中的验证让我给你举个例子。

  1. 由先前版本的库生成的Token:

    eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg2MTY0OWU0NTAzMTUzODNmNmI5ZDUxMGI3Y2Q0ZTkyMjZjM2NkODgiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJhY2NvdW50cy<……在1 mwmifq.ogoohbttblyzcxnhndvozf1<……在4 brlt3dilyweo1fx64waabgrjcr2amq

  2. 由新库生成的令牌:

    ya29。A0ARrdaM_hHsX50Qim6c1NudaZvv6qMpMkbNxW-ltOh49s6U4JKZNvPJV3d0TAE_rqqvkvVG2983ryewiufhdsklKGiH-vEdIs7u2389iwek-dcgkY1SE-b21g0932oiweKT-ZKTJvmHAY

  3. 因此,问题是新版本的库没有返回正确的JWT令牌(如上所述)。我们不能使用这个新令牌做任何事情,因为我们无法验证它的完整性(谁颁发的,令牌秘密是否与我们的应用id匹配,令牌何时过期,等等)。

    我也尝试使用Google自己的OAuth调试端点进行测试,但它也抱怨第二个令牌无效:

    https://oauth2.googleapis.com/tokeninfo?id_token=ya29.A0ARrdaM_hHsX50Qim6c1NudaZvv....
    

    注意:由于JWT包含一些私有数据,因此我剥离了第一个令牌的base64编码部分(第一个点之后和第二个点之前的部分),与第三部分(第二个点之后)相同。由于我无法理解最后一个令牌,所以我也替换了其中的一些字符,但这应该不会影响这个问题的演示。

    有人遇到过这样的事情吗?我们有一组现有的项目需要迁移到新的JS库,但它似乎根本不起作用。我尝试从头开始创建一个新项目,只是为了看看这个问题是否只影响旧项目,但没有成功-使用新方法时,Google OAuth返回相同的破损令牌。

Google OAuth访问令牌不是jwt。它们是不透明的二进制值,这意味着您不能直接从令牌中提取信息。然而,谷歌可以在其系统中查找令牌。

你可以通过调用这个端点来验证Google OAuth访问令牌:
curl -H 'Authorization: Bearer $ACCESS_TOKEN' https://www.googleapis.com/oauth2/v3/tokeninfo

从用户身份创建令牌的附加信息:

curl -H 'Authorization: Bearer $ACCESS_TOKEN' https://www.googleapis.com/oauth2/v3/userinfo

如果令牌无效,请求将失败。

返回的信息将是描述token的JSON。

相关内容

  • 没有找到相关文章

最新更新