【问题标题】:Should there be authentication/authorization between microservices? [closed]微服务之间是否应该有身份验证/授权? [关闭]
【发布时间】:2018-01-19 05:11:59
【问题描述】:

我知道这可能不是一个好问题。

有人问我一个问题:我们真的需要微服务之间的身份验证吗?我不知道答案。我确实阅读了一些关于 SOA、微服务以及如何在服务之间添加身份验证的教程。但是我没有太多想法为什么我们需要在微服务之间进行身份验证/授权?任何需要它们的用例?任何不需要它们的用例?没有身份验证/授权的任何潜在风险?

欢迎任何 cmets。最好举一些实际的例子。谢谢

【问题讨论】:

  • 虽然您的个人功能需求应该决定是否在微服务之间执行身份验证的答案是正确的,但需要考虑安全问题(我想这将是需求的一部分):如果恶意用户甚至破坏了一项服务,他们就会得到全部。

标签: soa microservices


【解决方案1】:

如果您的组织被认为存在内部威胁(为什么不这样呢?),那么是的,所有微服务都需要保护免受恶意使用。

【讨论】:

    【解决方案2】:

    在大多数情况下,提供公共 API 的微服务需要身份验证/授权,因为它们对世界可用/可见。

    为什么?因为当来自 World 的某个人调用 API 方法时,我们(在大多数情况下)想知道客户端是谁(进行身份验证)并决定允许客户端做什么(进行授权)。

    另一方面,对于内部微服务(在大多数情况下),客户端是众所周知的,因为它们是其他内部微服务。因此,除非您不需要为不同的内部微服务提供不同的使用限制,否则无需授权。请注意,我假设内部组件仅在组织内可用。

    【讨论】:

    • 是否有必要假设未来所有服务都会公开?
    • @BAE 一点也不。有一种常见的情况,当您只有一个网关 API 作为公共服务,而所有其他组件都被隐藏并且无法从外部访问时
    【解决方案3】:

    您设计和开发的微服务是否需要身份验证取决于您的功能要求和设计方式。

    一种常用的技术是不对每个单独的微服务进行身份验证,而是将它们组合到一个公共门面(例如 API 管理器)后面。然后,您可以在一个地方(策略执行点/API 管理器)为“外部”消费者应用身份验证和其他策略,而在“内部”,在您的公共安全边界之后,您的微服务仍然是轻量级的,并且可以调用彼此无需身份验证(如果这对您的用例/要求/架构等有意义)

    总而言之 - 这是一个设计决策,涉及多种权衡。 显然,如果您有一个获取或更新敏感数据的关键业务服务,您可能只希望授权的调用者访问它。但是您可能不希望在您组织的“受信任”网络中运行的许多内部调用者(可能是其他微服务)承担不必要的策略执行负担。 但是,在某些情况下,即使是内部调用者也需要正确验证(例如,如果它是支付服务)

    【讨论】:

    • 不知道如何to group them together behind a common fascade,有什么例子吗?谢谢
    • 搜索“API 管理器”或“API 网关”或“API 管理”。这个想法是您通过单个策略执行点(包括身份验证)来管理您的“接口”,并且在幕后,您的实现可以是多个独立的轻量级微服务
    • 从设计的角度来看,还有一个值得一提的方面:您可能希望避免微服务之间过多(或任何)交叉依赖(在不知不觉中,您最终可能会遇到难以管理的问题)意大利面)。微服务应该是独立的单元——在代码和部署中都是
    猜你喜欢
    • 2020-10-21
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2019-07-11
    • 2022-01-14
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多