您是否为 OAuth 2.0 请求生成后端或前端状态参数?

JSm*_*ith 10 oauth-2.0 openid-connect google-signin

我一直在网上寻找答案,但找不到明确的答案。由于我不太了解 CSRF 攻击,并且stateOAuth 2.0 中的参数是为了避免这种攻击而制作的,我只是想知道是否state需要在客户端生成参数并将值放在本地存储或后端服务器上,然后将其存储到一个会话变量,然后我将其返回到客户端以创建我的 URL。第一个解决方案似乎是最好的,但它安全吗?

任何帮助是极大的赞赏。

Kav*_*uwa 12

有关状态参数的更多信息可以从此答案中找到。

在哪里生成状态以及在哪里存储状态将取决于应用程序的性质。无论客户端类型如何,客户端必须做的是验证授权码响应中的状态参数。

对于不包含后端的单页应用程序,必须在浏览器本身中生成并存储状态。一旦响应到达,就必须比较状态值。

对于本机应用程序(例如:移动应用程序),状态可以存储在应用程序内存中。它可以附加在授权请求中。当响应到来时,可以从内存中验证它

如果应用程序需要,状态可以存储在后端(例如:服务器)中。这可以被认为更安全(与 SPA 相比),因为除了请求本身之外没有人可以拦截/获取该值。一旦发生重定向,后端就可以验证响应参数。此外,它还可用于关联客户端会话。

此外,窃取状态值仅对尝试进行 CSRF 攻击的一方有价值。但请注意生成无法猜测的状态值。进一步阅读存储 - 3.6。“状态”参数

  • 好的,非常感谢,我会看看什么是最好的,不确定是否理解所有内容,但我会尝试弄清楚(会话 cookie 的哈希值),而且我真的不明白是什么阻止我使用系统进行后端验证,正如我告诉过你的那样,我需要这样做最后比较后端的值(会话变量与 url 参数进行比较)。抱歉我不太了解,但我是网站建设新手。最好的 (3认同)