我有一个设计问题,不确定如何解决。
假设我的主要应用程序包含6个模块:
客户端应该只与网关服务通信。
我是否应该让网关进行用户身份验证(理想情况下会导致JWT)和其他3种生产服务(论坛,画廊,消息)仅验证令牌并检索给定用户自己管理的权限和角色?
如果愿意,请单击此处获取原始的draw.io图形。
我不想使用任何第三方身份验证服务;我只希望我的身份验证服务(已完成)注册用户并让他们登录。还是应该在该服务中管理权限和角色?
我花了几个月的时间来解决这个问题,但是我根本找不到合适的结构,因此我可以让用户注册,登录/注销并与各种生产性服务进行通信。我目前正在使用Java作为后端工具,但是关于微服务的好处是,我不必全部使用一种编程语言。
欢迎任何帮助!
附:我阅读了微服务认证策略和Zuul-Api网关认证,但是这两种方法似乎都不适用。
我已经使用了以下设置,并且效果很好:
现在,这是我们无需任何(很多)第三方帮助就实现的简单工作流程。在某些时候,我们确实必须使用会话cookie,但这是出于其他原因。请注意,除了auth服务中的黑名单外,系统几乎是无状态的。一个不只是用jwt注销!我们有一个REDIS来管理黑名单。您可以在网关或身份验证服务处使用会话Cookie进行注销。
大多数后端服务在jwt中都希望有自己的一组角色/特权/权利。角色由auth服务授予用户,并写入授予的jwt中。如果将新角色分配给用户,则该用户必须注销/登录以反映该特权。如果删除了某些特权,则用户必须强制注销-这就是REDIS播放的位置。
这取决于权限设置的复杂程度。
如果您的权限非常简单,即所有服务都需要身份验证并且只有一个角色可以使用,您可以在网关 api 处添加。
如果您需要更细粒度的方法,则需要在模块级别进行。通常在微服务架构中,每个服务都会调用另一个服务,并且在模块级别进行授权设置可以避免预先了解网关 api 所需的所需权限。并且您可以在不考虑其他服务的情况下部署这些模块中的每一个,在方法级别拥有细粒度的权限等。
| 归档时间: |
|
| 查看次数: |
2351 次 |
| 最近记录: |