我有一个系统,它通过访问令牌可以访问一组资源。因此,当客户端需要访问某些特定资源时,他们会要求提供令牌(一个资源 - 一个令牌(。我需要制作一次性(或至少在时间限制(代币,以确保即使代币泄露,它们也会很快变得不活跃。
在基于 CQRS 的系统中实现这一目标的正确方法是什么?查询资源不应更改系统状态。换句话说 - 我们不能使查询处理程序中的令牌失效。可以吗?
这些是不同的问题。我会做什么:
- 边缘检查授权(使用提供的令牌(和调用查询处理程序以及查询/令牌信息
- 查询返回结果
- 边缘发布事件"TokenHasBeenUsed">
- 边缘返回查询结果 令牌
- 提供程序使用事件并使令牌无效。
您也可以按计划构建它,如果未使用,则在一段时间后使令牌失效。另外,您还可以使用使用计数器或其他东西,所有这些都不需要混合到边缘或查询处理程序。