将 Google OIDC 与代码流和 PKCE 结合使用

2024-04-08

经过反复试验,在我看来,Google OIDC 在不提供客户端密钥的情况下不支持代码流:https://developers.google.com/identity/protocols/oauth2/native-app#exchange-authorization-code https://developers.google.com/identity/protocols/oauth2/native-app#exchange-authorization-code

根据 SPA 的最新最佳实践(https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-13 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-13),代码流+PKCE是推荐的处理认证方式。有谁知道让 Google 的代码流接受 code_challenge 而不是 client_secret 所需的任何技巧?也许是一个虚假的秘密?


截至 2020 年 8 月,引用的最佳实践文件仍处于草稿阶段并正在积极更新 - 此处的头部修订版:https://datatracker.ietf.org/doc/draft-ietf-oauth-security-topics/ https://datatracker.ietf.org/doc/draft-ietf-oauth-security-topics/。 Google 的 OAuth2 实现尚未将 PKCE 的“正在进行的工作”建议应用于 Web 应用程序。 SPA 仍然被指示使用 Google 在线文档中的隐式流程:https://developers.google.com/identity/protocols/oauth2/javascript-implicit-flow https://developers.google.com/identity/protocols/oauth2/javascript-implicit-flow).

PKCE 标准(https://www.rfc-editor.org/rfc/rfc7636 https://www.rfc-editor.org/rfc/rfc7636)详细说明,它是为了缓解移动平台上发现的授权代码拦截攻击而开发的,最初建议由本机客户端实施。 Google 的“移动和桌面应用程序”文档确实指导开发人员使用 PKCE 授权代码流程。使用 Google Android、iOS 或 Windows 的客户端通过 PKCE 存储凭证类型可能会忽略client_secret(请参阅刷新令牌参数表上的注释 - 并由 Cristiano 确认)。

现在人们认识到 PKCE 消除了对any公共客户端来存储客户端机密,因此可用于弃用隐式流,该流始终存在在重定向 URI 中包含返回的访问和身份令牌的缺陷。https://developer.okta.com/blog/2019/05/01/is-the-oauth-implicit-flow-dead https://developer.okta.com/blog/2019/05/01/is-the-oauth-implicit-flow-dead.

IETF 文件草案第 2.1.1 节指出,这种认识很可能成为一项发布的标准。

希望 Google 能够更新其实施,以取消对client_secret当最佳实践被接受时,用于 PKCE 令牌请求。与此同时,我们似乎别无选择,只能继续使用隐式流程编写 SPA。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Google OIDC 与代码流和 PKCE 结合使用 的相关文章

  • 通过 Discord OAuth 传递字符串?

    我想知道是否可以使用 Discord OAuth 识别范围 同时还将重要的补充信息传递到重定向 URL site with important variable gt oauth page gt site that needs import
  • 使用 Passport-facebook 的 Facebook OAuth 安全性

    我目前正在使用客户端 React 组件让用户通过我的应用程序中的 OAuth 登录 Facebook 在服务器端 我使用 npm 包护照 Facebook 令牌 https github com drudge passport facebo
  • 如何使用 Curl CLI 执行 OAuth 2.0?

    我想在 Windows 命令提示符下使用curl 来执行Google OAuth 2 0 我的目标是更好地理解 OAuth 服务器实现的身份验证流程 查看 HTTP 标头等 如何在 Windows 命令提示符下使用curl exe 来完成此
  • 作为 iOS 应用程序向 Google Cloud Endpoints 进行身份验证(不是具有 Google 帐户凭据的用户)

    我的一个 iOS 应用程序使用 Google Cloud Endpoints 联系我的一项服务 我想限制该应用程序实例对该服务的访问 我已按照有关添加的说明进行操作授权 https developers google com appengi
  • Google API 控制台 - 缺少客户端密钥

    我尝试为 Android 应用程序创建一个测试客户端 ID 该应用程序使用 OAUTH 2 0 作为检索用户配置文件的登录名 我按照步骤在谷歌控制台上完成了客户端 ID 的创建 但我没有在任何地方看到客户端密钥 我正在尝试帮助我的雇主获取其
  • 为什么不调用 GrantRefreshToken 方法 - Oauth2 ASP.NET Web API

    我使用请求正文向 oauth2 服务器发送请求 grant type refresh token refresh token abc 我将refresh token保存在数据库中 接收异步方法 public async Task Recei
  • OAuth:从 Google App Engine 中启动 Google 计算实例

    我有一个 Google App Engine 网络应用程序 它运行着我网站的大部分内容 然而 对于某些功能 我需要一台linux机器 我希望我的 Google App Engine 应用程序能够在某些事件上自动启动 Google 计算实例
  • 我可以使用开发者密钥通过 Google Sheets API 无需 Oauth 向 Google Sheet 写入数据吗?

    我正在开发一个使用 Google Sheets API 读取和更新 Google 电子表格中的值的应用程序 我可以使用我的开发人员密钥进行读取 但是尝试写入会返回此错误 请求缺少所需的身份验证凭据 需要 OAuth 2 访问令牌 登录 co
  • 在 Angular 中将图像 url 转换为 base64

    我正在努力尝试将给定的图像 url 转换为 base64 在我的例子中 我有一个带有图像路径的字符串 var imgUrl assets logoEmpresas empresa logoUrl 我如何直接将给定的图像网址转换为base64
  • OAuth 2.0:优点和用例 - 为什么?

    谁能解释一下 OAuth2 的优点以及为什么我们应该实施它 我问这个问题是因为我对此有点困惑 这是我目前的想法 OAuth1 更准确地说是 HMAC 请求看起来合乎逻辑 易于理解 易于开发并且非常非常安全 相反 OAuth2 带来了授权请求
  • Oauth 2:为什么刷新令牌必须是有状态的?

    我正在开发一个基于 Node 的 SPA 应用程序 并使用 JWT 进行基于令牌的身份验证 目前 jwt 令牌永远不会过期 这不太好 我希望它过期以提高安全性 但我不希望我的用户被迫重新登录 这就是为什么我需要刷新令牌 所以我正在阅读有关
  • 在 SPA 中加载外部脚本和样式文件

    我有一种 SPA 它使用 API 来获取数据 该 SPA 有一些实例 它们都使用通用样式和脚本文件 所以我的问题是 当我更改这些文件中的一行时 我将必须打开每个实例并更新文件 这对我来说真的很耗时 一种方法是将这些文件放在服务器中的文件夹中
  • 如何在 access_token 中添加角色声明,目前它是在 id_token 中?

    我正在使用 PKCE 跟踪身份验证代码流 我的身份提供程序是 Azure Active Directory 我从应用程序注册创建了一个应用程序 客户端应用程序 在清单中 我添加了如下所示的 appRoles appRoles allowed
  • Blazor WASM OIDC 指出无论我做什么,重定向 uri 都未定义

    因此 我遵循了和这个中等文章 https medium com marcodesanctis2 securing blazor webassembly with identity server 4 ee44aa1687ef它建议将 OIDC
  • Sails js 路由静态 html

    我想在我的 sails js 应用程序中完全分离客户端和服务器端 如果我删除 路由 它将自动从 assets 文件夹中提供一个名为index html的文件 我想从资产文件夹中提供另一个文件 我该怎么做 如果你看看 sails 使用的中间件
  • ASPNET Core OIDC 关联失败

    我在 StackOverflow 上查看了一堆与此类似的类似问题 但没有一个解决方案对我有用 这个问题快把我逼疯了 我与这里的许多类似服务器的主要区别在于 负载均衡器后面只有一台服务器 因此问题不在于我的请求发送到不同的服务器 我已经实现了
  • 为 NFL api 生成访问令牌

    NFL 有一个 API 服务 link https api nfl com docs getting started index html https api nfl com docs getting started index html
  • 雅虎 OAuth2 隐式授予流程不适用于新的雅虎应用程序

    我有现有的网络应用程序和专用雅虎应用程序 https developer yahoo com apps 在职的 它用OAuth2 隐式授权流程 https developer yahoo com oauth2 guide flows imp
  • 本地测试 Azure Active Directory 安全性

    我在 Azure 上部署了一个 Web 应用程序 并启用了 Azure Active Directory 安全性 快速设置 因此 当我尝试访问该应用程序时 我需要成为 AD 的一部分才能访问 我想向应用程序添加更多功能 例如显示当前登录的用
  • OAuth2.0 redirect_uri 的参数值无效:缺少方案

    我正在将 Oauth 2 0 流程用于部署在 GCP 中的 appengine Web 应用程序 我正在使用 IAP 我有一个使用 Cloud KMS 加密的有效 cliend secret 文件 但我遇到了以前没有的错误 oauthlib

随机推荐