如何跨多个微服务提供用户身份?

Posted

技术标签:

【中文标题】如何跨多个微服务提供用户身份?【英文标题】:How to make available the identity of a user across multiple microservices? 【发布时间】:2016-06-02 14:08:26 【问题描述】:

让我们以基本的电子商务微服务为例。

    身份和访问。此微服务将处理用户帐户、角色 和认证。身份验证方法将基于通常的 基于令牌的流程(用户输入用户名 + 通行证,服务器返回一个唯一且 通过 cookie 的随机令牌)。此服务还可用于获取用户个人资料。 购物车微服务。此微服务可用于将产品放入购物车。 检查购物车有哪些产品。等等……

假设“身份和访问”微服务将用于生成随机令牌作为成功身份验证的结果,并将此令牌链接到用户,该令牌将如何用于使用户的身份可用于购物车微服务?例如,当用户将产品添加到他的购物车时,他将发送授权令牌,并且购物车微服务必须根据该令牌识别用户。

可以选择分布式数据库吗?一个存储了这些令牌并链接到用户构建的数据库,并且所有微服务都可以访问该数据库?

或者所有微服务都应该从一个特殊的身份和访问 API 中获取用户的身份,该 API 将根据访问令牌公开用户?

【问题讨论】:

***.com/questions/29644916/…的可能重复 【参考方案1】:

分布式数据库肯定与微服务的以下基本原则相冲突:

微服务拥有它的数据并通过定义明确的接口公开它。 其他微服务不得直接访问其他微服务拥有的数据。

因此,在这种情况下,一种解决方案是使用令牌微服务或您描述的最后一个解决方案。

【讨论】:

谢谢。接受并赞成。最终使用了身份和访问服务。拥有一个数据库,服务可以从中找到有关用户的信息,或者以某种方式使用 API。下游服务(仅读取用户信息)永远不会干扰用户数据库的结构。如果使用 API,API 结构也是如此。我认为整个网络上有很多关于在服务解耦方面应该被视为良好实践的误导性文章。 HTTP API 或数据库 API 相同 继续:这完全取决于您同意的约定。 http API 或数据库都是访问下游服务数据的简单接口。因此,从设计的角度来看,它们是平等的。您甚至可以利用 rdbms 安全概念来限制来自下游服务的某些操作/数据,而不是为 HTTP API 构建自己的

以上是关于如何跨多个微服务提供用户身份?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django REST 框架跨微服务共享数据库关系

微服务架构:跨服务数据共享

为用户提供集中式身份验证服务器或每个微服务一个数据库?

微服务架构如何运作?

通过多个微服务进行 JWT 授权

API网关实践-网易云轻舟微服务