当前位置: 首页 > 知识库问答 >
问题:

如何在微服务架构中处理身份验证

韶兴德
2023-03-14

我现在读了很多关于微服务的书,但仍然不了解其中的一些部分。我画了以下图:

每个微服务有2个访问:

  • REST:对于超文本传输协议使用
  • gRPC:用于内部/后台通信/交换

如果我想登录,我可以向我的身份验证服务发送一个Http请求。但是,如果我想访问需要您连接的Stuff服务,该怎么办?

假设用户希望显示数据库中可用的内容,服务人员将首先通过与身份验证服务交换来检查连接用户的“令牌”是否正确,然后返回内容或“登录需要请求”。

所以我不明白的是,如果每个需要已经连接的客户端的服务都需要与身份验证交换,那么它会产生巨大的互联网流量来检查每个用户请求...所以我想为每个服务提供一个身份验证服务,但既然我应该只有一个数据库,那么是数据库会减慢流量?

另外,如果我理解的话,每个微服务应该在不同的服务器上,而不是同一个服务器上?

我希望我是清楚的,不要犹豫,要求更多的细节!

提前感谢:)

马克斯

根据@ConceptQuest的回答:

所以看起来应该是这样的,对吧?

此外,根据Peter的评论,每个服务都可以实现自己的中间件(如前所述的JWT),因此API网关只是一个“传递”。然而,我觉得这对我来说并不好,因为每个服务都会对每个内部交换进行令牌检查,不是吗?

对于这些东西,它很简单,因为它只检查令牌的1倍。现在,假设用户拿到东西后,他选择了一个并想买。然后“购买服务”将调用stuff服务来验证商品的价格,但是。。。它必须检查用户令牌,因为stuff是“经过身份验证的访问”,所以这意味着“购买”服务和“stuff”服务都要检查令牌,这会增加额外的检查。

我想关于服务之间的内部保证访问,但这值得吗?

此外,您可能说过要为每个服务实现中间件,因为它们具有REST访问权限,但API网关只会破坏具有REST访问权限的想法

共有2个答案

罗晨
2023-03-14

除了@ConceptQuest answer,还有另一种方法不涉及API网关;

您可以在所有服务之间共享会话机密,因此身份验证服务的唯一任务是根据数据库验证用户名和密码,然后使用会话机密加密此信息,并返回jwt令牌。所有其他服务不需要与身份验证服务交互,只需使用会话密钥检查jwt令牌是否有效(可以解密)。

然后你有另外两个选择;

>

  • 将您需要的所有用户数据存储在令牌中-这将增加从客户端传输到micro服务的数据量。根据此信息的大小,这可能是禁止的

    您只能存储用户ID,并根据每个微服务的需要请求额外的数据,这取决于您的数据的频率/大小,将产生您所描述的问题。

    请注意,您并不总是能够使用这种方法,但根据您的特定场景和需求,记住这种体系结构可能会很有用。

    还请记住,旋转SESSION\u SECRET可能很棘手(尽管出于安全原因需要)。AWS刚刚发布了一个名为AWS Secrets Manager的服务,因此简化工作的一个方法是让您的微服务定期查询这样的服务,以获取当前有效的会话\u SECRET,而不是将此值硬编码或作为环境变量。

  • 那鹏
    2023-03-14

    此问题有多种解决方案。解决方案之一是API网关模式。

    1. 第一个请求转到API网关
    2. API网关身份验证

    API网关是所有服务的单一入口点。因此,您可能不需要为每个服务使用单独的缓存。

    请参阅本页中的图表。

     类似资料:
    • 我要找的是一些别人如何解决这个问题的建议/经验。如果需要,我很乐意提供更多的信息。 为了让您更容易地给出建议,这里有两个选择的简短描述:1)使用JWT处理身份验证和授权?为什么?2)保持JWT的轻量级,并在每个微服务中向授权服务器发出请求?为什么?

    • 简而言之,应该在哪里执行输入验证和身份验证验证?在 API 网关和每个微服务中?仅在 API 网关中?仅在每个微服务中? 也许部分在api网关中,部分在每个网关中? 谢谢你的回答!

    • 我读了一些文章,看了一些视频,但在为这些微服务提供服务方面,没有找到具体的建议。我的理解是,他们应该使用自己的应用程序服务器。 我的问题是它们应该部署在不同的服务器上,还是没关系。 当它们在同一台服务器(计算机)上提供服务时,不会有端口冲突吗?

    • 我们正在尝试找出IPC身份验证和授权的最佳实践。我会解释的。我们有一个基于微服务的体系结构SaaS和一个专门的认证服务。该服务负责执行身份验证和管理身份验证令牌(JWT)。 现在的问题是如何验证和授权由其他服务发起的请求(没有特定用户的上下文)? 我们是否应该为每个服务生成一个专用用户,并像对待系统中的任何其他用户一样对待它(具有适当的权限)? 我们是否应该在服务之间部署“硬编码”/动态令牌? 还

    • 我正在尝试在一个microservice中配置一个microservice,但我正在尝试在另一个microservice中配置一个microservice如何进行身份验证。这就是我试图归档的体系结构: 我已经设法让用户授权工作并保护了微服务A,现在我正在尝试授权来自微服务B的请求,但我不确定如何做到这一点,我是否应该为微服务B在KeyCape中创建一个专用用户,或者在realm中创建客户端,或者其

    • Kubernetes 设计之初就是按照 Cloud Native 的理念设计的,Cloud Native 中有个重要概念就是微服务的架构设计,当将单体应用拆分微服务后, 随着服务数量的增多,如何微服务进行管理以保证服务的 SLA 呢?为了从架构层面上解决这个问题,解放程序员的创造性,避免繁琐的服务发现、监控、分布式追踪等事务,Service mesh 应运而生。 微服务 下图是Bilgin Ibr