2

假设我们有许多(无状态的、基于 HTTP 的)(微)服务和一堆“守护进程”,它们通过实际使用所述服务来进行各种后台处理。

现在,我想有一种方法让服务和守护进程能够相互验证和授权。例如,执行订单全文索引的守护进程需要:

  • OrdersCustomers(本身需要对Companies服务具有只读访问权限)和Inventory服务的只读访问权限
  • 对OrdersSearch服务的读写访问权限,以便能够更新全文索引。

还有一些应用程序,它们“代表”用户操作。例如,Inventory Web 应用程序需要对Inventory服务的读写权限,但Inventory服务本身需要验证操作应用程序的用户的权限。

说了这么多,我如何实现我刚才描述的?我不想使用庞大的企业框架或标准。根据我的阅读,两足 OAuth2 是我需要的,但我不确定。

我正在考虑建立一个授权服务,该服务将用于回答诸如“嘿,我是库存服务。现在打电话给我的客户服务对我有什么权限?”,但这在分发方面有两个主要弱点共享的秘密。

4

1 回答 1

2

验证:

我想象一个身份验证服务,其中请求 API 使用已建立的协议对其请求进行签名:例如,将请求的部分与可过期的 NONCE 和应用程序 ID 连接,然后对其进行散列以创建签名。然后使用私钥对该签名进行加密。所有请求都必须包含此加密签名和 NONCE 以及应用程序标识符。然后接收服务查找请求应用程序的公钥。在验证 NONCE 没有过期后,接收服务使用公钥解密摘要并验证签名有效(通过重复签名过程并得出相同的签名)。获取公钥需要服务。服务可以将应用程序 ID 缓存到公钥映射。

授权:
这可以使用某种基于角色的访问控制方案来完成。另一个服务可用于查找请求服务是否有权访问所请求的资源。

我认为授权和身份验证都可以在内部完成,这取决于时间和金钱以及专业化的需要。如果您使用 Java,请查看Spring Security。如果您决定创建自定义代码,请向您的经理证明它的合理性并获得支持。在网上彻底搜索任何其他解决方案,并在您的文章中说明它不适合的原因以及仍然需要自定义解决方案。

于 2015-05-14T13:22:48.427 回答