OAuth 2.0“state”和 OpenID“nonce”参数之间的区别?为什么状态不能重用?

2024-03-22

OAuth 2.0 定义了客户端在请求中发送的“状态”参数,以防止跨站请求攻击。 OpenID 规范中也提到了“nonce”。除了 ID 令牌而不是查询参数中返回“nonce”这一事实之外,它们似乎具有完全相同的目的。如果有人能解释他们为什么分开


状态和随机数似乎很相似。但如果你深入挖掘,你会发现它们有不同的用途。

State是为了保护最终用户免受跨站点请求伪造(CSRF)攻击。从OAuth 2.0协议引入RFC6749 https://www.rfc-editor.org/rfc/rfc6749#section-10.12。协议规定,

一旦获得最终用户的授权, 授权服务器将最终用户的用户代理重定向回 客户端与包含在所需的绑定值"state"范围。绑定值使客户端能够验证 通过将绑定值与 用户代理的身份验证状态

这用于授权请求。它使客户端能够验证授权响应未被更改并由原始服务器发送。请求已发送。简而言之,它允许客户端交叉检查授权请求和响应。

(更详细地说:要接受授权代码响应,客户端需要接受来自授权服务器的响应(例如:- 在网络应用程序中,这可以通过重定向和表单发布到后端来完成)。这意味着我们的客户端应用程序有一个打开并接受请求的端点。状态参数通过将原始授权请求绑定到响应来保护该端点。这就是 CSRF 保护。)

Nonce服务于不同的目的。它将令牌与客户端绑定。它用作令牌验证参数并从OpenID 连接规范 https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowSteps.

nonce- 用于将客户端会话与 ID 令牌相关联并减轻重放攻击的字符串值。该值未经修改地从身份验证请求传递到 ID 令牌。如果 ID 令牌中存在,则客户端必须验证随机数声明值是否等于身份验证请求中发送的随机数参数的值。如果出现在身份验证请求中,授权服务器必须在 ID 令牌中包含一个随机数声明,该声明值是身份验证请求中发送的随机数值。授权服务器不应该对使用的随机数值执行其他处理。 nonce 值是区分大小写的字符串

如您所见,nonce 值源自授权请求,由客户端生成。如果包含随机数,它将出现在令牌中。因此,客户端可以根据初始授权请求验证其收到的令牌,从而确保令牌的有效性。

此外,根据流量类型,nonce可以是强制参数。隐式流程和混合流程指令nonce价值。两个值都是生成的 and 已验证通过客户应用程序。

为什么状态不能重用?

如果捕获到授权请求,则恶意方可以伪造授权响应。这可以通过改变状态参数来避免。

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

OAuth 2.0“state”和 OpenID“nonce”参数之间的区别?为什么状态不能重用? 的相关文章

随机推荐

  • 为什么首先调用 ShowWindow()?

    首先需要注意的是 我最近才开始学习 WinAPI 我确信这个问题以前已经被问过很多次了 但由于某种原因我在网上找不到它 问题很简单 为什么要费心最初的电话ShowWindow 在体内WinMain 在消息循环执行之前 为什么不简单地通过使用
  • 如何找出 C++ 警告的数量

    我已开启 Wall在我的代码中消除所有警告 然而 有些我想在代码中允许 所以我在代码中禁用这些 在常见的问题中 我可以轻松地在 Google 中找到警告编号并禁用它们 例如 pragma warning disable 4127 但有些 我
  • PyCharm 和外部工具过滤器

    我正在尝试使用 PyCharm 进行 Django 开发 到目前为止我非常高兴 我的团队严格遵循 PEP8 格式 并使用 pep8 命令行程序进行检查以确保我们的代码符合要求 我已经配置了一个外部工具命令来运行 pep8 并且运行良好 我看
  • gsutil:仅列出目录(错误?)

    gsutil ls d gs XXX test gs XXX test gs XXX test 336x280 swf gz 所以它不仅列出目录 以 以及常规文件 以 gz例如 但据我了解 这个命令应该只列出目录 错误在哪里 gsutil
  • 使用 Twitter Bootstrap 导航栏进行导航的正确方法是什么?

    我正在使用 Twitter Bootstrap 3 创建一个网页 我使用导航栏的直觉是让每个项目导航到新的 href 然而 我见过以不同的方式处理这个问题 有些页面确实导航到新的 href 并触发页面加载 可能使用某种模板在所有 html
  • Html Agility - 将解析保存到字符串

    刚刚第一次尝试使用 Html Agility Pack 并遇到了问题 首先 我从字符串变量加载 string NewsText dr Message ToString HtmlAgilityPack HtmlDocument htmlDoc
  • 如何创建堆积线图

    在 R 中创建堆积条形图有多种解决方案 但如何绘制堆积线图呢 可以使用以下命令创建堆积线图ggplot2包裹 一些示例数据 set seed 11 df lt data frame a rlnorm 30 b 1 10 c rep LETT
  • 当报告需要很长时间运行时,如何解决套接字关闭的问题?

    我正在运行用 iReport 制作的 Clarity 报告 我的一份报告非常复杂 有时需要很长时间才能运行 取决于参数 有时 花了太长时间 我收到一条消息说 插座关闭 当报表快速运行时 不会出现此消息 我认为这意味着运行已超时 我目前正在努
  • 单元测试应该如何处理预期和意外的异常?

    当预期的异常发生时 它是否应该通过测试 当出现意外异常时 测试是否会失败 处理异常是否多余 因为它会使测试失败并因此充当测试 测试预期的异常 你必须添加expected属性具有预期的异常 因此如果抛出指定的异常 测试将通过 否则就会失败 例
  • 逐行编写 Lua 脚本

    我使用以下命令将 Lua 脚本添加到我的 C 应用程序中动态Lua http dynamiclua codeplex com 图书馆 它运作得很好 我想实现您获取正在执行的当前行 就像在 Visual Studio 中一样 并突出显示它 目
  • 将 opencv BackgroundSubtractorMOG 保存到文件吗?

    我使用 opencv 进行车辆计数过程 如何将我的BackgroundSubtractorMOG对象 例如BackgroundSubtractorMOG2等 保存到文件中 以便我可以从文件中读取它 再次使用经过训练的背景模型而无需长时间训练
  • Alphablend 和透明Blt

    这个问题与我有关先前的问题 https stackoverflow com q 12700165 62576 on SO 我想组合两个图层 并仅将 alpha 应用于源图层的特定部分 我尝试的一种方法是将 SourceConstantAlp
  • 从服务器的标头中获取标头令牌

    我如何更改代码才能获取令牌 因为它始终为空 控制台不会返回任何错误 并且在邮递员 应用程序 中服务器端正常工作 我在服务器端有这段代码 router post async req res gt const error validate re
  • 如何在TableLayout周围添加边框?

    下面是我的表代码 我的屏幕看起来像这样https i stack imgur com U5ppn jpg https i stack imgur com U5ppn jpg但我想让它看起来像这样https i stack imgur com
  • Javascript 中嵌套函数的返回值[重复]

    这个问题在这里已经有答案了 我有一个设置如下的函数 function mainFunction function subFunction var str foo return str var test mainFunction alert
  • PHP 混合类型与 Typescript 任意类型

    我正在尝试 PHPmixed输入自定义函数 但这个错误让我难住了 标点符号是我的 类型错误 参数 1 传递给 必须是一个实例mixed string given 下面的一些 示例 代码会导致错误消息并说明我希望实现的目标 下面是一些 TLD
  • 如何在前端使用 JavaScript Fetch API 从 FastAPI 后端下载文件?

    这是我的 FastAPI python 代码 它返回一个 ics file app get latLong async def read item lat float long float mainFunc lat long return
  • Node.js - PostgreSQL (pg):客户端已连接。您不能重复使用客户端

    我只是想编写简单的注册 登录系统 我正在尝试查找用户名是否存在 步骤如下 Go 本地主机 3000 用户 注册 page 填写所有字段并单击注册按钮 检查我的命令行如果用户名存在 它应该使用 console log 打印它 到目前为止一切正
  • CodeIgniter 中的公共函数与函数

    在 PHP 中 在类内部声明方法有什么区别 public function VS function 例如 public function contact data header Contact this gt load gt view ad
  • OAuth 2.0“state”和 OpenID“nonce”参数之间的区别?为什么状态不能重用?

    OAuth 2 0 定义了客户端在请求中发送的 状态 参数 以防止跨站请求攻击 OpenID 规范中也提到了 nonce 除了 ID 令牌而不是查询参数中返回 nonce 这一事实之外 它们似乎具有完全相同的目的 如果有人能解释他们为什么分