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'参数的目的是啥的主要内容,如果未能解决你的问题,请参考以下文章

weixin oauth 授权

OAuth中授权码的用途是啥

每次我提出请求时 Youtube oAuth 提示授权窗口

state参数如何阻止CSRF攻击

OAuth 2身份验证中grant_type参数的目的是啥

Google OAuth 2 和 state 参数值需要在重定向 url 中注册