OAuth授权请求中'state'参数的目的是啥
Posted
技术标签:
【中文标题】OAuth授权请求中\'state\'参数的目的是啥【英文标题】:What is the purpose of the 'state' parameter in OAuth authorization requestOAuth授权请求中'state'参数的目的是什么 【发布时间】:2014-11-25 17:52:24 【问题描述】:在 OAuth 中,初始授权请求有一个state
参数。显然它是出于安全原因,但我真的不明白它保护的是什么......例如,on GitHub 这个参数的描述是:
一个不可猜测的随机字符串。用于防止跨站请求伪造攻击。
据我所知,授权请求的状态只是作为参数传递给重定向 URL,如下所示:
http://<redirect_url>?code=17b1a8df59ddd92c5c3b&state=a4e0761e-8c21-4e20-819d-5a4daeab4ea9
有人能解释一下这个参数的确切用途吗?
【问题讨论】:
另见csrf - OAuth2 Cross Site Request Forgery, and state parameter - Information Security Stack Exchange 【参考方案1】:state 参数用于防止 XSRF。您的应用程序生成一个随机字符串并使用 state 参数将其发送到授权服务器。授权服务器发回状态参数。如果两个状态相同 => OK。如果状态参数不同,则其他人发起了请求。
Google 的例子可能更清楚:https://developers.google.com/accounts/docs/OAuth2Login?hl=en#createxsrftoken
【讨论】:
“其他人发起了请求”:谢谢,这就是我所缺少的。我不在网络应用程序的上下文中,所以它不适用于我的情况(我只是在桌面应用程序的 WebBrowser 控件中检测到重定向,没有人会向我发送请求......) Au fait, tu es le meziantou de Developpez.com? ckanext-oauth2 的开发人员也使用 state 参数来存储有关先前访问过的页面的信息,以在登录后将用户重定向回那里,例如:"came_from": "/dashboard"
。他们对其进行 base64 编码以使其成为 URL 安全的,然后将其用于 state
参数。
@jeverling 这不是可以猜到的吗?
您错过了一个非常重要的点,状态参数应该以某种方式与您的会话相关联。以上是关于OAuth授权请求中'state'参数的目的是啥的主要内容,如果未能解决你的问题,请参考以下文章