繁体   English   中英

API网关+登录微服务+redis

[英]API gateway + Login microservice + redis

我正在开发一个 web 应用程序,我正在尝试设计和实现微服务架构。 我已经阅读了很多关于身份验证和授权的文章,我想知道我的设计是否走在正确的轨道上。

我有一个 API 网关,用于管理前端应用程序和后端服务之间的所有通信流。 在网关后面,我有两个微服务,分别称为身份提供者和前端微服务。 身份提供者管理诸如登录、注册和交付访问令牌之类的事情。 前端微服务包含一个 angular 应用程序。 因此,在正常流程中,用户将向身份提供者进行身份验证,身份提供者依次打开存储在 redis 中的登录名 session,并将 session id 作为 cookie 返回。 身份提供者将用户重定向到前端服务,该服务检查存储在 redis 中的登录状态,并且仅在通过身份验证后返回 angular 应用程序。

所以,我没有使用 OAuth,因为我认为此时此刻我真的不需要它。 此外,我不在网关级别管理身份验证。 为登录和 redis 存储 session 的微服务是否是一种好方法,以便所有其他微服务可以在需要时对用户进行身份验证? 我看到很多在网关级别实现身份验证的示例,那么委托微服务来对用户进行身份验证是不是一种糟糕的方法? 在某种程度上,网关仅用作路由器。 你怎么看待这件事?

将用户 session 存储在 Redis 上并不是一个坏习惯,但是使用 Redis 进行授权/认证可能会导致安全问题。 在理想的微服务架构中,服务需要尽可能无状态。 通过将授权作业授予 redis,您将创建一个额外的层,您需要在每个请求上对其进行管理。 当用户信息发生变化时会发生什么? 您还需要更新 redis,当它与授权服务器不同步时,问题就会开始出现。 在网关后面使用单独的授权服务器也不是坏习惯。

当你使用 API-GATEWAY 时,你必须记住,在微服务架构中,我们必须处理 Api-Gateway 中的横切关注点。意味着,一旦你将一些功能(如安全性日志记录用户跟踪)放在一个地方来执行整个应用程序区域,当你想改变它们时,你改变一个地方而不是整个微服务,.,.所以,你可以使用 oauth2 和 spring 云网关或 zull 作为 oauth2 客户端并使用 Oauth2 提供者。成功登录后,网关执行 TokenRelay (从请求中删除 cookie 并将其替换为 jwt 令牌并将其发送到您的微服务)。现在您可以将Redis用作网关中的HttpSession管理。此外,通过这种方法,您还可以使用服务的多个实例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM