如何使用适用于 Web 服务器应用程序的 Google OAuth 2.0 向 Google ID_Token 添加自定义声明

Posted

技术标签:

【中文标题】如何使用适用于 Web 服务器应用程序的 Google OAuth 2.0 向 Google ID_Token 添加自定义声明【英文标题】:How to add custom claims to Google ID_Token with Google OAuth 2.0 for Web Server Applications 【发布时间】:2020-11-17 18:23:09 【问题描述】:

我们已经为 Web 服务器应用程序配置了 Google OAuth 2.0,如 https://developers.google.com/identity/protocols/oauth2/web-server#httprest 中所述。

    得到了代码,

    https://accounts.google.com/o/oauth2/v2/auth? 范围=https%3A//www.googleapis.com/auth/drive.metadata.readonly& access_type=离线& include_granted_scopes=true& response_type=代码& state=state_parameter_passthrough_value& redirect_uri=https%3A//oauth2.example.com/code& client_id=client_id。

    使用 JWT,

    POST /token HTTP/1.1 主机:oauth2.googleapis.com 内容类型:application/x-www-form-urlencoded

    代码=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=your_client_id& client_secret=your_client_secret& redirect_uri=https%3A//oauth2.example.com/code& grant_type=authorization_code

现在我解码的 id_token 看起来像,


  "alg": "RS256",
  "kid": "b63ee0be093d9bc312d958c9966d21f0c8f6bbbb",
  "typ": "JWT"
.
  "iss": "https://accounts.google.com",
  "azp": "640523414127-4eaptj129qb79v33pm0il71r4f506ts9.apps.googleusercontent.com",
  "aud": "640523414127-4eaptj129qb79v33pm0il71r4f506ts9.apps.googleusercontent.com",
  "sub": "118185565008542236388",
  "email": "mail_ID@gmail.com",
  "email_verified": true,
  "at_hash": "K_sS85PI2ptkOIrUoWcM7Q",
  "iat": 1595931406,
  "exp": 1595935006
.[Signature]

现在如何添加自定义声明,以便上述 id_token 包含我的新声明,例如,

“政策”:“读写”

最后解码后的 id_token 应该是这样的,


  "alg": "RS256",
  "kid": "b63ee0be093d9bc312d958c9966d21f0c8f6bbbb",
  "typ": "JWT"
.
  "iss": "https://accounts.google.com",
  "azp": "640523414127-4eaptj129qb79v33pm0il71r4f506ts9.apps.googleusercontent.com",
  "aud": "640523414127-4eaptj129qb79v33pm0il71r4f506ts9.apps.googleusercontent.com",
  "sub": "118185565008542236388",
  "email": "mail_ID@gmail.com",
  "email_verified": true,
  "at_hash": "K_sS85PI2ptkOIrUoWcM7Q",
  "iat": 1595931406,
  "exp": 1595935006,
**"policy": "readWrite"**
.[Signature]

【问题讨论】:

【参考方案1】:

也许会有所帮助:

为用户配置自定义声明 (...) 开始之前 安装 管理 SDK。 (...)

admin.auth().setCustomUserClaims(uid, admin: true)

https://cloud.google.com/identity-platform/docs/how-to-configure-custom-claims

【讨论】:

很遗憾,身份平台不是身份。

以上是关于如何使用适用于 Web 服务器应用程序的 Google OAuth 2.0 向 Google ID_Token 添加自定义声明的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Web 应用程序的 AWS 推送通知服务

适用于 iOS 消费的 Web 服务(在 Amazon 上)安全性

将工作 Web 应用程序转变为适用于 Android 的本机 Ionic 应用程序时出现 CORS 问题

适用于 Web 和移动应用程序的 node.js 服务器

Vue 开发工具是不是适用于 Google 应用程序脚本网络?

spring只适用于web项目么