JWT令牌中的无状态身份验证和权限


  1. 应用程序中的用户根据他们在中的组拥有权限

  2. 我们希望将用户所在组的列表存储在JWT令牌中

  3. 当用户被添加或从组中删除时,这实际上意味着权限发生了变化,这就是用户端应该发生的事情:

    如果他们已经从系统中完全删除,用户会立即被踢回登录屏幕

    例如,如果他们刚刚从一个组中删除,则用户不会被踢出

    他们被通知他们的权限已经更新,他们被告知请刷新页面

    当用户刷新时,他们会停留在他们正在查看的页面上

    如果用户在他们不再可以访问的屏幕上,他们将被发送到主页

1.到目前为止,我们一直在编写完全无状态的RESTAPI,但这似乎打破了这一点。实现这一目标的最佳方式是什么?2.如果我们要保持简单并确保无国籍状态,最好的方法是什么

使用无状态身份验证,包含组信息的ID令牌在过期(通常为一小时(之前不会续订。您可以将此持续时间减少到5分钟。这将是确保对组的任何更新都能快速反映在前端的最简单方法。这些代币是独立的,一旦发行就不能撤销。即使运行全局注销API调用或忘记设备API调用,也只有刷新令牌被吊销,而ID和访问令牌在过期之前仍然有效。

您提到的要求与无状态身份验证方法不兼容。当然,你可以创建一个";"黑客";流中,您有一个数据库,记录被踢出的用户的id,在每次调用之前,它都会检查数据库,但这将是大量不必要的工作,并且您将破坏使用无状态身份验证的全部意义。

如果你想继续使用cognito,我的建议是将所有代币的到期时间缩短到最短。您也可以从流中删除刷新令牌,但这意味着用户需要每5分钟登录一次。但是,如果您真的需要实现这一点,我建议您使用有状态身份验证方法。

最新更新