假设我们有许多(无状态,基于HTTP)(微)服务和一堆"守护进程",它们通过实际使用所述服务来进行各种后台处理。
现在,我想让服务和守护进程能够进行相互身份验证和授权。例如,执行Orders需要的全文索引的守护程序:
还有代表"代表"用户。例如,Inventory Web应用程序需要读取和写入访问 Inventory 服务,但 Inventory 服务本身需要验证用户操作的权限申请。
所有这一切,我如何实现我刚才描述的内容?我不想使用巨大的企业框架或标准。根据我的阅读,双腿OAuth2是我需要的,但我并不完全确定。
我认为建立授权服务将用于回答诸如"嘿,我库存服务等问题。现在正在给我打电话的客户服务对我有什么权限?",但这有两个主要的弱点,分发共享机密。
答案 0 :(得分:2)
验证
我想象一种身份验证服务,其中请求API使用已建立的协议签署其请求:例如将请求的部分与可过期的NONCE和应用程序ID连接起来,然后对其进行散列以创建签名。然后使用私钥加密此签名。所有请求必须包含此加密签名和NONCE以及应用程序标识符。接收服务然后查找请求应用程序的公钥。在验证NONCE尚未到期之后,接收服务使用公钥解密摘要并验证签名是否有效(通过重复签名过程并获得相同的签名)。获取公钥需要服务。服务可以将应用程序ID缓存到公钥映射。
授权:
这可以使用某种role based access control方案来完成。可以使用另一个服务来查找请求服务是否可以访问所请求的资源。
我认为授权和身份验证都可以在内部完成,具体取决于时间和金钱以及专业化需求。如果您使用的是Java,请查看Spring Security。如果您决定创建自定义代码,请向您的经理证明其合理性。请在线搜索任何其他解决方案,并在撰写内容中了解其不适合的原因以及仍需要自定义解决方案。