2017-10-20 576 views

回答

6

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

状态是否有保护最终用户免受跨站请求伪造(CSRF)攻击。

RFC6749指出,

一旦授权被从最终用户所获得,所述 授权服务器的最终用户的用户代理重定向回 客户端与包含在所需要的结合值“状态” 参数。所述结合值使得客户端通过匹配结合值到 用户代理的认证状态

来验证该请求的有效性 ,这是用于授权请求。它使客户能够验证授权响应没有被改变。基本上它允许客户交叉检查授权请求和响应。

随机数服务于不同的目的。它将令牌与客户绑定。它用作令牌验证参数。

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

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

此外,根据流量类型,现时值可以是强制参数。隐式流和混合流授权值现时值值。

+0

如果我们将状态本身作为随机数传递给ID标记,并且在ID之外,那么会有什么坏处?使用外部阻止CSRF和内部阻止在客户端绑定会话。 – dvsakgec

+0

@dvsakgec从协议的角度来看,利用状态和随机数来进行安全性和验证是个问题。据我所知,规范并不限制你为状态和随机数使用相同的值。在复杂的攻击向量中,人们可以从授权响应中提取状态值(例如: - 移动应用程序)。因此,具有相同的值会从您的令牌验证过程中删除一个条件,这并不好 –

相关问题