如何在重定向时验证 OAuth 状态



我想我误解了OAuth OpenID Connect规范,原因如下:

我尝试实现"使用 Apple 登录"。您可以选择使用弹出窗口或重定向到苹果页面 我想一开始保持简单,所以我正在使用重定向选项。单击"使用 Apple 登录"按钮会将我重定向到苹果登录页面,其中填写了state以防止 CSRF 攻击。

身份验证成功后,Apple 会"重定向"到我指定的重定向 URL,方法是向具有statecodeid_token值的 URL 发出 POST 请求。

现在的事情是这样的:当 POST 请求来自不同会话时,我应该如何验证状态?我从点击"使用 Apple 登录"按钮的用户发送一个 CSRF 令牌作为state,但来自 Apple 的响应是作为不同的会话进行的——具有不同的 CSRF 令牌。

我什至应该在这种流中验证状态吗?我觉得我必须否则有人可以使用 CSRF 向我的重定向 URL 发送带有任意code的 POST 请求并id_token

有人知道如何验证state吗?我将不胜感激:D提前谢谢。


补充:使用弹出选项,一切都应该正常工作,我在成功进行身份验证后在浏览器事件中收到statecodeid_token,因此我可以验证statenonce是否匹配。

有人知道如何验证状态吗?

客户端负责验证状态以防止CSRF攻击。因此,客户端必须生成一些状态值,将其存储在其一侧的可用存储(cookie、会话或本地存储)中。将其传递给身份验证服务器。身份验证后,控制权将从身份验证服务器重定向回客户端。现在,客户端可以检索状态参数并将其与之前存储的参数进行比较。如果值不匹配,请终止流。

最新更新