我正在开发一个web应用程序,并试图设计和实现一个microservices体系结构。我读了很多关于身份验证和授权的书,我想知道我的设计是否正确。
我有一个api网关,它管理前端应用程序和后端服务之间的所有通信流。在网关后面,我有两个微服务,分别称为身份提供者和前端微服务。身份提供者管理登录、注册和传递访问令牌。前端微服务包含一个Angular 应用程序。因此,在正常的流中,用户将通过身份提供者进行身份验证,身份提供者反过来打开存储在redis中的登录会话,并将会话id作为cookie返回。身份提供者将用户重定向到前端服务,该服务检查redis中存储的登录状态,并且仅在经过身份验证的情况下才返回应用程序。
所以,我不使用oauth,因为我认为我现在并不真正需要它。我也不是在网关级别管理身份验证。有一个用于登录的微服务和redis来存储会话,这样所有其他微服务都可以在需要时对用户进行身份验证,这是一个好方法吗?我看到了很多在网关级实现身份验证的例子,那么委托微服务对用户进行身份验证是一种不好的方法吗?在某种程度上,网关只能作为路由器工作。你觉得这个怎么样?
1条答案
按热度按时间tsm1rwdh1#
在redis上存储用户会话并不是一个坏习惯,但是使用redis进行授权/身份验证可能会导致安全问题。在理想的微服务体系结构中,服务需要尽可能无状态。通过将授权作业交给redis,您就创建了一个额外的层,您需要对每个请求进行管理。当用户信息改变时会发生什么?您还需要更新redis,当它与授权服务器不同步时,问题就会开始出现。在网关后面使用单独的授权服务器也是不错的做法。