假设我想使用JWT进行身份验证,对于直接使用我的应用程序API的用户,我想发出一个不会过期的令牌(但确实包含一个ID,以便它可以被撤销)。其次,假设我有一个基于角色的访问系统,我还希望将用户的角色编码到令牌中。但是,如何解决用户角色可能会发生变化但令牌仍会对其进行编码的问题?显然,如果某人的角色改为某些具有较少特权的东西,这将是一个安全问题?问题不仅限于这个用例,理论上有效的令牌也会产生相同的角色变化问题而不会立即产生影响。
我的初始解决方案也没有将角色/权限级别编码到主令牌中,而是使用辅助令牌,只有在从更大的互联网通过应用程序的边界时才会添加到我的系统中,但我是还想知道别人怎么解决这个问题?
答案 0 :(得分:2)
如果您需要使令牌无效,您必须跟踪您发出的令牌,并确保您可以在某个时间点“删除”它们。
我的建议是使用一个令牌,并在某处跟踪USER
和TOKEN_VALID_IF_ISSUED_AFTER
之间的关系。
此时,当用户注销时,当他们的权限更改时,他们更改密码时......您可以使用$USER_ID
和NOW()
在此表中插入记录。< / p>
下次令牌通过您的API时,您会验证它是在TOKEN_VALID_IF_ISSUED_AFTER
之后通过iat声明发出的 - 如果没有,则用户必须获得一个全新的令牌。