OAuth2 csrf保护理解

时间:2019-05-15 04:12:47

标签: http security oauth-2.0 csrf clickjacking

我有三台服务器

  • frontend-server-1
  • frontend-server-2
  • 后端服务器

和三个域

  • client-1.com
  • client-2.com
  • api.com

一台服务器对应一个域。

另一个条件:

  • 用户可以使用在api.com下运行的client-1.com或client-2.com。
  • 所有对api.com的请求都来自用户的浏览器
  • 所有ajax请求都包含X-Auth-Token标头,而不是cookie。
  • 所有OAuth2应用程序都必须定位到api.com(因此它们只能在api.com/auth / ...上重定向)
  • 所有请求都通过HTTPS

我已经了解了很多有关OAuth2 csrf的信息,所以我设计了一种更合适的身份验证流程,并希望确保它不受攻击。

  1. 浏览器将参数为“ redirect_to = client-N.com / oauth / complete”的ajax POST请求发送到“ api.com/auth-begin”
  2. 后端服务器检查是否允许redirect_to地址和响应,

    • auth-token(如果未登录用户,则它是用于进一步身份验证的匿名令牌,否则是他的实际身份验证令牌)
    • csrf令牌
    • 状态为= urlencoded(redirect_to = redirect_to&csrf-token = token)的oauth-redirect-url(例如“ github.com/oauth2 /...”)
  3. 浏览器将auth-token和csrf-token保存到client-N.com的SessionStorage

  4. 浏览器转到oauth-redirect-url(第三方网站)

  5. 第三方站点响应并重定向到“ api.com/oauth2-process?state=my_state&3rd-party-code=my_code”

  6. 浏览器转到“ api.com/oauth2-process?state=my_state&3rd-party-code=my_code”

  7. 后端服务器从“状态”中读取“ redirect_to”,并将响应重定向到带有“状态”和“第三方代码”的“ client-N.com”

  8. 浏览器转到重定向页面“ client-N.com”

  9. 浏览器使用

    将ajax POST请求发送到“ api.com/auth-end”
    • 参数“状态”
    • 参数“第三方代码”
    • 标头X-Auth-Token(来自SessionStorage的auth-token)
    • 标头X-Csrf-Token(SessionStorage中的csrf-token)
  10. 后端服务器检查“ csrf令牌”是否从“状态”等同于X-Csrf令牌

  11. 后端服务器通过将3rd-party-code交换为3rd-party-token来完成oauth2,如果用户登录则生成新的X-Auth-Token,否则令牌保持不变,并使用X-Auth-Token响应浏览器< / li>

所以主要问题是:有什么方法可以攻击此身份验证流?

0 个答案:

没有答案