【发布时间】:2016-05-15 11:52:32
【问题描述】:
我一直在开发一个使用 Tomcat API 发送/接收数据、登录、注销等的 Android/IOS 应用程序。我的主要身份验证形式是使用 SHA-512 通过带有 HMAC 的 JSON Web 令牌。认证照常进行。用户提供他们的凭据(用户 ID 和密码)以进行首次登录。服务器验证凭据,如果它们是正确的,它会生成一个 JWT 并将其返回给用户,用户可以使用该 JWT 在未来的请求中对自己进行身份验证。该令牌包含一个自定义声明,该声明指定了用户 ID,用于了解哪个用户正在发出请求。我对 JWT 进行了一些研究,并且在许多问题上意见不一。我有几个问题希望您能阐明:
1- 使用 JWT 作为我的 API 的唯一身份验证机制是否足够?
2- 在安全性方面,使用 HMAC 的 JWT 和使用 RSA 的 JWT 有区别吗?
3- 理想情况下,我应该在哪里存储我用来签署我的令牌的对称签名密钥?目前,我将密钥直接传递给生成我的令牌的函数。这样做安全吗?
4- 我应该定期更改签名密钥以提高安全性吗?
5- 我是否可以信任我插入到令牌中以识别发出请求的用户的用户 ID 声明?
6- 令牌是否有“理想”的到期时间?有些人建议只需 15 分钟,而另一些人则说 3 小时就可以了。
7- 我应该担心限制特定用户可以拥有的令牌数量吗?一个用户可能有多个移动设备,并且在任何时候都可能有多个令牌。在这种情况下,只要用户有凭据,就没有什么能阻止用户从我的服务器获取数千个令牌。我是否应该实施某种机制(例如:数据库)来跟踪用户拥有的令牌?如果在验证/生成令牌时必须进行额外的数据库查询,这似乎违背了 JWT 的目的并增加了复杂性。
8- 我是否需要担心撤销令牌?一些人建议拥有到期时间短的令牌就足够了。其他人指出,如果您在用户退出应用程序后不撤销令牌,那么您永远无法拥有真正的退出机制。只是等待令牌过期是错误的吗?在安全性方面,我什么时候需要撤销令牌?
抱歉,帖子太长了。我一直在担心处理这些问题的最佳方法。我很感激任何帮助。谢谢
【问题讨论】:
-
我建议您将这些问题拆分为不同的问题) 它会使其更加独立于您的系统实施/问题。
标签: api security authentication jwt