【发布时间】:2019-05-29 20:46:40
【问题描述】:
我阅读了很多资料,包括 OAuth 2.0 的 RFC,以使用此协议进行安全登录。我实现的流程是授权码授予,因为我有一个安全的 NET CORE 后端来存储客户端密码。我已经按照 RFC 或其他 Oauth 2.0 实施工作流程表中的描述实施了该协议。
目前我有 access_token 和 refresh_token,但我希望实现记住我的功能。我以不同的方式思考它,但我不知道如何以安全的方式实现它。
如果我将通过服务器将刷新保存在浏览器的 http 安全 cookie 中,我很容易受到 CSRF 攻击,如果我将其保存在本地存储中则更糟糕,因为我很容易受到 XSS 攻击和它可能被盗。
简单来说,我需要缓解 XSS 和 CSRF 漏洞,具有记住我的功能。 (我也想过使用浏览器的同站cookie属性来缓解se CSRF漏洞,但我需要获得背靠背兼容性,该功能仅在最新版本的浏览器中可用。
我的问题是:如何实现记住我功能同时兼顾安全方面?
【问题讨论】:
-
您的浏览器现在如何授权后端请求(OAuth2 登录后)?您是否使用标识后端会话的 cookie 或始终随请求发送的令牌(令牌存储在哪里)?您的经过身份验证的会话的安全模型是否比“记住我”功能的模型(使用 cookie 或 localStorage)更强?
-
我的客户端应用程序在 Vue JS 中的浏览器上运行,将 access_token 存储在代码内的全局变量中,然后在对资源服务器的每个请求中使用它(我不使用本地存储或曲奇饼)。事实上,每次刷新页面时,令牌都会被删除,并向用户请求新的登录。如果我找到安全存储 refresh_token 的方法,即使使用其他安全机制而不是简单地保存 refresh_token,我的应用程序也不会受到攻击。
标签: javascript c# security oauth-2.0