JWT 验证的 Google 公钥在哪里?

Posted

技术标签:

【中文标题】JWT 验证的 Google 公钥在哪里?【英文标题】:Where is the Google Public Key for JWT validation? 【发布时间】:2021-08-14 05:50:04 【问题描述】:

我有一个使用 Google 的 RS256 身份验证的 Angular11 UI 前端

    import SocialAuthService, GoogleLoginProvider, SocialUser from 'angularx-social-login'; 在 app.module.ts 中添加 providers: [ id: GoogleLoginProvider.PROVIDER_ID, provider: new GoogleLoginProvider('my Google-Client-ID')]

当 Google 将 JWT 令牌发回给我时,我会将其发送到我的 NodeJS 应用服务器,以便为会话建立基于 JWT 的通信,因此此 NodeJS 应用服务器必须验证此 JWT。根据此angular-university.io article 部分“利用 RS256 签名”,

不是在应用服务器上安装公钥,而是 最好让身份验证服务器发布 可公开访问的 Url 中的 JWT 验证公钥。

我从 Erji 的 Google Identity 找到了这个 JWK(不是 JWT)链接 https://www.googleapis.com/oauth2/v3/certs。这是正确的公钥吗?

【问题讨论】:

【参考方案1】:

它不完全是 x509 证书,但是是的,JWK 用于验证给定的签名 JWT。

如果我们检查Googles documentation 中的.well-known 端点

它指向我们,

jwks_uri    "https://www.googleapis.com/oauth2/v3/certs"

对于包含用于验证已签名 JWT 的当前有效密钥的 JWK。公钥可以由 JWK 端点中包含的信息构建

n 是密钥本身,alg 是签名算法,kid 是密钥标识符。

RFC7517 定义了 JWK 标准并提供了有关字段的完整详细信息

【讨论】:

以上是关于JWT 验证的 Google 公钥在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

jwt.io 从哪里获取 JWT 令牌的公钥?

Google 公钥端点返回啥?

在 NestJs 中验证 Google JWT

使用带有 C# 的公钥验证 JWT

如何使用 jwt 公钥在 Spring Boot 中验证承载访问令牌

如何将 goog.payments.inapp.buy 与 luciferous jwt 一起使用?