微服务系统中的身份验证和资源所有权

时间:2017-12-12 14:04:14

标签: authentication authorization microservices ownership

我正在开发一个基于微服务的系统,用于管理公司,零售商及其产品和合同。该系统应该允许用户注册,创建他们的公司,邀请其他用户加入他们的公司,并根据他们在公司内部的角色,管理和查看公司的零售商和合同。当然,公司可以拥有许多零售商,零售商可以代表公司处理许多合同。我想出了一个系统,其核心服务如下:

  1. 发布包含用户权限的JWT令牌的身份验证组件。
  2. 管理用户,公司和零售商信息的注册表组件。
  3. 合同组件,负责处理有关公司合同及其状态的所有数据。
  4. 目前,注册组件包含描述用户,公司及其零售商的模型,而合同组件描述了系统中的所有合同,并且外部参考了规定合同的零售商。

    在此系统中,只有用户应进行身份验证才能代表公司行事,但公司本身从不进行身份验证(即身份验证服务仅保留对用户及其权限的引用)。因此,用户的令牌需要说明用户对其所属公司的权限。

    现在我发现自己处于以下两难境地:

      

    当用户想要查看业务的所有合同时,他/她的请求将被路由到合同组件。该组件可以查看用户uuid以及他/她对每个业务的权限。但是,合同组件对业务以及哪个业务拥有哪个零售商不了解,因为这些信息由注册组件处理。

    当然,一个解决方案是合同组件联系注册组件并要求所有零售商提供所请求的业务,并将该信息与用户在令牌中说明的许可进行比较,但这会破坏服务自身包含,因此使合同组件依赖于注册表组件。

    另一种解决方案将涉及始终将所有者与所代表的资源(即业务的每个零售商的每个合同中的业务的uuid)存储在一起,但这看起来很混乱并且引入了大量冗余。

    总而言之,我的问题是:如何处理微服务系统中的资源所有权,而不会在微服务之间创建相互依赖关系或依赖于中央权威机构?

0 个答案:

没有答案