我对我正在开发的asp.net核心2.0项目中的持有者令牌安全性(JWT具体)的实现有一些疑问。当前端Web应用程序与单独的Api进行通信时使用不记名令牌(当然,不用说所有这些都是通过Https)。
首先,让我总结一下我实施的内容和我的推理:
访问令牌通过安全的仅限http的cookie存储
我相信这会将攻击面限制为XSRF(如果我错了,请纠正我)。为防止XSRF,我实施了防伪/ XSRF令牌。
访问令牌的版本号为
我的用户表有一个令牌版本列,在为用户发出访问令牌时包含此编号。
- 如果在身份验证/授权期间令牌版本不匹配,则拒绝请求并发出质询
- 有适当的逻辑可自动更新令牌版本(即管理员锁定帐户,用户更改其电子邮件或注销等) - 如果需要,也可以手动更改,例如,如果已知特定帐户遭到入侵或任何其他有效撤销访问权限的原因
- 旁注:我已经实现了一种方法,可以避免在活动用户需要版本号检查时不断进行数据库命中,并且可以根据需要进行详细说明,但我不认为它直接适用于此问题中的安全问题
没有刷新令牌和访问令牌的长期到期
我根本不使用刷新令牌,并且我的访问令牌设置为在7天后过期(除非“记住我”未选中,在这种情况下,过期设置为会话)。这是我的理由:
- 令牌版本功能解决了在访问令牌过期仍然有效时需要撤销访问令牌的问题
- 即使访问权限令牌过期时间很短,受影响的帐户/会话也只能使用较长时间的刷新令牌来获取新的有效访问令牌,所以我只是删掉了中间人(如果我错了,请纠正我)或天真)
所以,这是我的具体问题(并澄清,我不是要求就最佳实践等问题提出意见,而是就实施是否满足合理安全水平的客观答案):
- 使用仅限http的cookie会将攻击面限制为仅仅XSRF攻击吗?并且可以通过Antiforgery / XSRF令牌“完全”阻止XSRF吗?
- 令牌版本控制系统是确保正确访问撤销的有效方法吗?
- 当使用令牌版本控制系统时,放弃刷新令牌并允许更长的访问令牌到期时间是否合理(并且令牌是通过仅限http的cookie和防伪策略保护的)? < / LI>