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

时间:2018-12-12 05:20:36

标签: oauth-2.0 google-signin openid-connect

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

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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