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

Oauth 2.0 您是否为OAuth 2.0请求生成后端或前端状态参数?,oauth-2.0,google-signin,openid-connect,Oauth 2.0,Google Signin,Openid Connect,我一直在网上搜索答案,但找不到一个明确的答案。 由于我不太了解CSRF攻击,而且OAuth 2.0中的state参数是为了避免此类攻击而设计的,我只是想知道是否需要在客户端生成state参数,并将值放入本地存储或后端服务器,然后将其存储到会话变量中,然后返回客户端创建我的URL。第一种解决方案似乎是最好的,但它安全吗 非常感谢您的帮助。有关状态参数的更多信息,请访问 在何处生成状态以及在何处存储将取决于应用程序的性质。无论客户机类型如何,客户机必须做的是验证授权代码响应中的状态参数 对于不包含后

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


非常感谢您的帮助。

有关状态参数的更多信息,请访问

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

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

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

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


此外,窃取状态值仅对试图进行CSRF攻击的一方有价值。但要注意生成无法猜测的状态值。关于存储的进一步阅读-

非常感谢您的介绍,我使用的是angular,因此是一个单页应用程序。我仍然有一个后端服务器,所以我可以有一个函数,在将生成的状态插入URL之前,从后端服务器(google app engine JAVAEE)获取该状态,然后客户端单击并将其与服务器端进行比较。这是一个好的做法吗?非常感谢。如果您查看此文档,它会提到使用会话cookie的哈希作为状态。如果您不希望从后端执行任何进一步的验证,您可以简单地使用这种方法。这一切都取决于你的设计。好的,非常感谢,我会看看什么是最好的,不一定能理解一切,但我会尝试弄清楚(会话cookie的散列),而且我真的不明白是什么阻止我与我的系统进行后端验证,正如我告诉你的,我需要最终比较后端的值(会话变量与url参数相比)。很抱歉,我的理解不是很好,但我是一个网站建设者新手。最好