Oauth2。服务器如何理解“状态”属于有效的公共客户端?

问题描述 投票:0回答:1

我试图了解 state 如何通过防止 CSRF 来使 Oauth 流程受益。我只是不明白客户端服务器将 URL 中的状态与什么进行比较。我见过这样的例子:

爱丽丝,good.com - 好。马洛里,bad.com - 糟糕。 google.com - 身份验证服务器。 Alice 已通过 google.com 在 good.com 获得授权

  1. Mallory 开始身份验证会话。
  2. good.com 生成 state=xyz,将其存储在数据库中并将 Mallory 重定向到 goodle.com/auth
  3. Mallory 完成流程并使用
    auth code
    state
  4. “捕获”返回 URL
  5. Mallory 将此 URL 提供给 Alice,她会关注该 URL。 good.com 的名称类似于
    good.com/complete-auth?code=abc&state=xyz

那么

good.com
究竟如何验证
state=xyz
不属于Alice的浏览器呢?据我了解,为了使其正常工作,后端必须在整个过程开始之前以某种方式安全地向 Alice 的浏览器提供任何类型的 ID。因此,当调用
complete-auth
时,ID 也会被传输。但看起来只能通过 cookie 来实现。这是服务器在重定向期间告诉浏览器保存某些内容的唯一方法。我简直不敢相信。移动应用程序如何处理这个问题?

security oauth-2.0 oauth authorization csrf
1个回答
0
投票

我找到了真正的原因。为了使整个 OAuth 流程正确发生,公共客户端必须是 OAuth 流程链中的第一个参与者。换句话说,它必须启动流程,而不是后端。通过这样做,客户端会在其一侧生成一个状态,并在需要时存储它(对于 angular-oauth2-oidc 来说,它是本地存储)。

© www.soinside.com 2019 - 2024. All rights reserved.