如何在多个微服务之间共享用户身份?

3
让我们来看看基本的电子商务微服务:
1. 身份验证与授权。这个微服务将处理用户账户、角色和认证。认证方法将基于常规令牌流程(用户输入用户名+密码,服务器通过 cookie 返回一个唯一且随机的令牌)。这项服务也可以用于获取用户配置文件。
2. 购物车微服务。这个微服务可以用于将产品放入购物车中,检查购物车里有哪些产品等。
假设“身份验证与授权”微服务将用于生成成功认证后的随机令牌,并将该令牌与用户进行关联,那么该如何使用此令牌使用户的身份信息可供购物车微服务使用呢?例如,当用户将产品添加到购物车中时,他会发送授权令牌,购物车微服务将根据该令牌识别用户。
那么,分布式数据库是一个选择吗?一个将这些令牌存储并链接到用户的数据库,所有微服务都有访问权限?还是所有微服务都应该从特殊的身份验证与授权 API 中获取用户的身份信息,该 API 将基于访问令牌暴露用户呢?

可能是 https://dev59.com/9l0b5IYBdhLWcg3wEdkx 的重复问题。 - Christophe Roussy
1个回答

1
一个分布式数据库肯定会与微服务的以下基本原则相冲突: 微服务拥有其数据并通过明确定义的接口公开它。 任何其他微服务都不能直接访问另一个微服务拥有的数据。 因此,在这种情况下的一个解决方案是拥有一个令牌微服务或您所描述的最后一个解决方案。

谢谢。已接受并点赞。最终使用了身份验证和访问服务。拥有一个数据库,服务可以从中获取有关用户的信息,或者以某种方式使用API,这两者是相同的。下游服务(仅读取用户信息)永远不会干扰用户数据库的结构。对于API结构也是如此,如果使用API。我认为在网络上有很多误导性的文章,涉及到服务解耦时应该考虑什么才是良好的实践。HTTP API或数据库API都是相同的。 - Geo C.
继续进行:一切都取决于您达成的约定。无论是http API还是数据库,它们都是访问下游服务数据的简单接口。因此,从设计角度来看,它们是相等的。您甚至可以利用rdbms安全概念来限制下游服务中的某些操作/数据,而不是为HTTP API构建自己的安全机制。 - Geo C.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接