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

How to make available the identity of a user across multiple microservices?

那么让我们来看看基本的电子商务微服务。

  1. 身份和访问权。此微服务将负责用户帐户、角色
    和认证。身份验证方法将基于通常的
    基于令牌的流程(用户输入用户名+密码和服务器returns一个唯一的和
    通过 cookie 的随机令牌)。此服务也可用于获取用户配置文件。
  2. 购物车微服务。此微服务可用于将产品放入购物车。
    检查购物车有哪些产品。等等...

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

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

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

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

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

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