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

时间:2021-05-14 23:44:14

标签: amazon-web-services authentication jwt amazon-cognito claims-based-identity

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

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

您提到的要求与无状态身份验证方法不兼容。当然,您可以创建一个“hacky”流程,其中您有一个记录被踢出用户的 id 的数据库,并在每次调用之前检查数据库,但这将是很多不必要的工作,而且您将失去整个观点使用无状态身份验证。

我的建议是,如果您想继续使用 Cognito,请将所有令牌的到期时间减少到最小值。您还可以从流程中消除刷新令牌,但这意味着用户需要每 5 分钟登录一次。 但如果您真的需要实现这一点,我建议您使用有状态的身份验证方法。