WHI*_*LOR 6 authentication cqrs event-sourcing
当使用CQRS模式构建系统时,我对Web应用程序中的身份验证/登录的实际场景感兴趣.
假设我们将HTTP服务用于命令/查询.使用JWT(或任何其他身份验证令牌)进行身份验证
LogInUser带凭证的命令(HTTP请求).然后怎样呢?作为命令的结果我们应该返回什么?结果authToken好吗?然后客户端应该在读取服务中查询状态?在这种情况下,我们只是让整个过程更长.这个问题实际上不仅指代身份验证方案,还指我们发送命令并希望尽快获得执行结果的其他方案.
我只想听听那些实施此类事情的人的意见.想要了解使用CQRS进行身份验证的可能的实际数据/请求流.
由于您使用的是 CQRS,因此您决定将写入应用程序与读取应用程序分开。
下图显示了不同选项之间的关系:
(该图取自wolkenkit的文档,它是 JavaScript 和 Node.js 的 CQRS 和事件源框架。)
所以,当你发送你的LogInUser命令时,命令本身不会返回任何东西(当然,当使用 HTTP 时必须有一个响应,但它应该只是一个200 OK,这样你就可以验证服务器是否收到了命令并且会关心迟早是这样)。
现在服务器处理登录、验证发送的凭据等,并生成适当的UserLoggedIn事件。此事件存储在事件存储中,然后发送到读取模型。
读取模型对这个事件做了两件事:
所以你的客户有两个选择:
由于您需要确保只有命令的发送方能够接收 JWT,因此选项 1 实际上是唯一可行的方法。您可以确保事件仅传递给发送相应命令的客户端,但您不能拥有一个包含所有 JWT 的表,其中人们只能在通过身份验证之前读取他们的JWT。使用读取模型,您在这里遇到了先有鸡还是先有蛋的问题。
因此,长话短说:客户端应该等待适当的事件,并且该事件包含 JWT。就是这样。
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |