https://www.rfc-editor.org/rfc/rfc6749#section-4.1.1状态:
4.1.1。授权请求”
“状态”
受到推崇的。客户端用来维护请求和回调之间状态的不透明值。授权服务器在将用户代理重定向回客户端时包含此值。该参数应该用于防止跨站点请求伪造,如第 10.12 节所述。
uuid/v4
除了 CSRF 保护之外,在 OAuth2 授权请求中使用我生成的“状态”参数( )来识别授权流程中提供者回调中的用户是否安全?从而使 oauth2 流“无状态”并且不需要负载均衡器的“粘性会话”。
目前,当用户启动 OAuth2 流程(访问登录页面)时,我为他创建了一个唯一的auth-request-id
andstate
并将其存储在 Redis 中并auth-request-id
在 cookie 中发送。
用户在回调请求中登录提供者(Google 或 Facebook)后,我尝试从auth-request-id
Redis 中的cookie 中查找用户的会话,并验证会话是否存在以及接收到的会话是否state
与我发送的会话匹配(针对 CSRF 攻击)。
想知道,我可以跳过创建auth-request-id
cookie 并在回调中识别用户state
吗?给定逻辑,如果state
在 Redis 中找不到匹配项,则假定状态无效,并且所有存储的 Redisstate
都有 5 分钟的过期时间。