【问题标题】: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

有人能解释一下这个参数的确切用途吗?

【问题讨论】:

标签: security oauth


【解决方案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 这不是可以猜到的吗?
  • 您错过了一个非常重要的点,状态参数应该以某种方式与您的会话相关联。
猜你喜欢
  • 1970-01-01
  • 2011-11-23
  • 2019-05-28
  • 2017-11-11
  • 2012-11-12
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
相关资源
最近更新 更多