具有基于角色的访问控制的 JWT



假设我想使用 JWT 进行身份验证,对于直接使用我的应用程序 API 的用户,我想颁发一个不会过期的令牌(但确实包含一个 ID,以便可以撤销)。 其次,假设我有一个基于角色的访问系统,我还想将用户的角色编码到令牌中。 但是,如何解决用户角色可能会更改但令牌仍会对其进行编码的问题?显然,如果某人的角色更改为某些特权较少的东西,这将是一个安全问题吗? 这个问题也不仅限于这个用例,理论上活跃的代币也会遇到同样的问题,即角色变化不会立即产生影响。

我最初的解决方案是不要将角色/权限级别编码到主令牌中,而是使用辅助令牌,该令牌仅在从更大的互联网通过应用程序的边界时添加到我的系统,但我也想知道其他人如何解决这个问题?

如果您需要使令牌失效,则必须跟踪您颁发的令牌,并确保您可以在某个时间点"删除"它们。

我的建议是使用一个令牌,并在某处跟踪USERTOKEN_VALID_IF_ISSUED_AFTER之间的关系。

此时,当用户注销时,当他们的权限更改时,当他们更改密码时......您可以在此表中插入带有$USER_IDNOW()的记录。

下次令牌通过您的 API 时,您需要验证它是在通过 iat 声明TOKEN_VALID_IF_ISSUED_AFTER之后颁发的 - 如果没有,用户将不得不获得一个全新的令牌。

最新更新