我在公司的SSO中使用了identityserver3的OAuth2.0,我无法理解state参数如何阻止CSRF。
我已将攻击流程复制如下:
1.Mallory访问某个客户的网站,并启动授权该客户使用OAuth访问某个服务提供商的过程
2.客户要求服务提供商允许代表Mallory代表请求访问权限
3.Mallory被重定向到服务提供商的网站,在那里她通常会输入她的用户名/密码以授权访问
4.相反,Mallory陷阱/阻止此请求并保存其URL(Callback Url)
5.现在,Mallory以某种方式让Alice访问该URL。如果Alice使用自己的帐户登录服务提供商,则其凭据将用于颁发授权码
6.授权代码交换访问令牌
7.现在客户的Mallory帐户有权访问服务提供商的Alice帐户
我可以理解第1步到第4步。但是从第5步开始,我有些困惑。根据我的理解,在步骤5中,Alice在登录时访问回调URL,然后服务器只使用授权码访问OAuth服务提供商以在后端获取openid和访问令牌,然后Alice&#39 ;浏览器只是使用Mallory的帐户和访问令牌执行登录。与Mallory的浏览器有什么关系? 你能详细解释一下吗?感谢您花时间阅读我的话!
答案 0 :(得分:36)
我认为第3步和第4步并不完全正确。我编辑了你的例子来说明我认为攻击是如何运作的。
1.Mallory访问某个客户的网站(例如https://brilliantphotos.com)并启动授权该客户端使用OAuth访问某个服务提供商的过程(例如Acebook - 由于brilliantphotos.com允许其用户将图片发布到他们的Acebook页)
2.brilliantphotos.com将Mallory的浏览器重定向到Acebook的授权服务器,请求在验证完成后重定向回自身。
3.Mallory被重定向到授权服务器,在那里她输入了她的Acebook用户名/密码以授权访问。
4.成功登录后,Mallory陷阱/阻止后续重定向请求并保存其URL(Callback Url,其中包含与Mallory相关的身份验证代码),例如
https://brilliantphotos.com/exchangecodefortoken?code=malloryscode
5.现在,Mallory以某种方式让Alice访问该URL(可能是论坛帖子上的链接......)请注意,Alice可能已经使用自己的帐户登录到brilliantphotos.com。
6.Alice点击链接到brilliantphotos.com,授权代码交换访问令牌(访问顽皮的Mallory帐户)。如果Alice已登录,那么brilliantphotos.com可以将Alice的帐户与新创建的访问令牌联系起来。
7.如果Alice继续使用brilliantphotos.com网站,客户可能会无意中将图片发布到服务提供商(Acebook)上的Mallory帐户。
如果一个状态参数由brilliantphotos.com维护,那么Mallory的状态代码将绑定到她的浏览器而不是Alice的。因此,当Alice点击恶意URL时,brilliantphotos.com将无法将状态代码与Alice的浏览器会话相关联。
答案 1 :(得分:2)