What's the best way to do authentication in modern applications
2 days ago
- #frontend development
- #web security
- #authentication
- JWT(JSON Web Token)通常用于身份验证,但将其存储在本地存储中易受跨站脚本攻击,因为页面上的任何JavaScript都能读取本地存储。
- 使用带有Secure和SameSite=Lax等标志的HTTP-only Cookie可以防止JavaScript读取令牌,降低了在跨站脚本攻击中令牌被窃取的风险。
- Cookie存在跨站请求伪造攻击的风险,但可以通过使用CSRF令牌、SameSite属性以及检查Origin或Sec-Fetch-Site等请求头来缓解。
- 无状态JWT存在撤销问题;而使用HTTP-only Cookie存储不透明会话ID的服务端会话允许立即使会话失效,对于单应用程序来说更为安全。
- 对于OAuth或第三方令牌,应采用后端为前端模式,将令牌存储在服务器端,浏览器仅持有HTTP-only会话Cookie,从而防止令牌暴露给JavaScript。
- 刷新令牌轮换和重用检测通过使被盗的刷新令牌失效并强制重新认证来增强安全性。
- 设备绑定会话凭证将会话与硬件绑定,防止被盗Cookie被长期使用,但目前该技术的采用仍有限。
- 对于React应用,应在API包装器中集中处理令牌管理,以管理令牌刷新并防止并发的刷新请求导致登出。