我们有一家医院作为希望开发应用程序的客户。这个应用程序可能会使用各种验证方法,其中OAuth2就是其中之一。他们有一份要求清单,其中有一种困惑我:
对于每个用户会话,应用程序都需要生成不可预测的内容 "状态参数"。该应用程序需要验证"状态值"对于 发送到重定向URL的每个请求; "州"需要 记录所有授权请求;和#34;州价值"具有 用它收到的访问令牌进行验证。
虽然他们没有特别提到它,但我想这会谈到OAuth。我有OAuth2的一些经验。我知道访问令牌和刷新令牌是什么。但这个故事在我头顶。他们在谈论什么样的"state parameter"
和"state value"
?
有人可以对这个故事有所了解吗?
答案 0 :(得分:2)
这是关于OAuth 2.0在授权请求中定义的state
参数,作为RECOMMENDED参数(https://tools.ietf.org/html/rfc6749#section-4.1.1),用于防止跨站点请求伪造以及关联请求和响应:
状态
RECOMMENDED. An opaque value used by the client to maintain state between the request and callback. The authorization server includes this value when redirecting the user-agent back to the client. The parameter SHOULD be used for preventing cross-site request forgery as described in Section 10.12.
答案 1 :(得分:1)
我相信他们选择用自己的语言编写OAuth 2.0客户端应用程序要求。规范声明:
客户端必须为其重定向URI实现CSRF保护。这通常通过要求发送到重定向URI端点的任何请求包括将请求绑定到用户代理的认证状态的值(例如,用于认证用户代理的会话cookie的散列)来实现。 客户端应该在发出授权请求时使用“state”请求参数将此值传递给授权服务器。
(强调我的,阅读section 10.12 of the specification中的整个故事)
有关如何使用state参数的更多分步指导方法,您可以参考Using the State Parameter。此页面提到了Auth0,但对于任何其他符合OAuth 2.0的服务器,该过程应该相同。另请注意,具体步骤假设基于浏览器的应用程序,因此将不可预测的状态参数存储在Web存储中。其他类型的客户将使用其他商店,但原则保持不变。