我一直在网上寻找答案,但找不到清晰的答案。
由于我不太了解CSRF攻击,并且OAuth 2.0中使用了state
参数来避免这种攻击,我只是想知道是否需要在客户端生成state
参数并将值放置在localstorage或后端服务器上,然后将其存储到会话变量中,然后我返回到客户端以创建我的URL。第一个解决方案似乎是最好的,但是它安全吗?
非常感谢您的帮助。
答案 0 :(得分:2)
有关状态参数的更多信息,请访问this answer。
生成状态的位置和存储位置将取决于应用程序的性质。无论客户端类型如何,客户端必须做的是验证授权码响应中的状态参数。
对于不包含后端的单页应用程序,必须生成状态并将其存储在浏览器本身中。响应到达后,必须比较状态值。
对于本机应用程序(例如:-移动应用程序),状态可以存储在应用程序内存中。可以将其附加在授权请求中。当响应到来时,可以从内存中对其进行验证
如果需要应用程序,状态可以存储在后端(例如:-服务器)中。鉴于没有人可以从请求本身中截获/获取该值,因此可以认为这是比较安全的(与SPA相比)。一旦发生重定向,后端就可以验证响应参数。而且,它可以用于关联客户端会话。
此外,窃取状态值仅对试图进行CSRF攻击的一方有价值。但是请注意生成无法猜测的状态值。有关存储的进一步阅读-3.6. "state" Parameter