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

如何授权微服务内部沟通?

习和通
2023-03-14

我有多个微服务。客户端可以通过API网关调用这些微服务,微服务之间也可以相互通信。

理想情况下,请求将来自拥有所有权限的用户的API网关。例如,如果用户(浏览器)需要来自微服务A的数据,则只将该角色授予用户,如果内部微服务A需要来自B的数据(rest call),则不应将该角色分配给用户。

要求:如何限制/授权微服务之间的内部通信,以便只有经授权的微服务才能呼叫其他服务。

选项:

>

  • 将所有角色分配给用户,即使是内部通信(在所有通信中传递相同的令牌)。

    如果需要内部通信,则仅将面向用户的微服务角色分配给用户,然后每个微服务将充当其他微服务的用户,并在调用之前生成自己的令牌。

    哪个选项最适合使用上述选项或任何其他选项?

  • 共有2个答案

    万俟炯
    2023-03-14

    我们使用选项1和选项2的组合。

    如果用户调用 API,则如果首先网关调用服务 A,然后服务 A 调用服务 B,则 A 将相同的 JWT 令牌传递给服务 B。

    如果服务A中的定时器作业定期从服务B获取一些数据,服务A也有其JWT令牌,它通过该令牌调用服务B。

    花烨
    2023-03-14

    我会选择第2个选项。对于服务内通信,后端服务(应用程序)将充当客户端,并首先请求令牌(/oauth/token)。要验证这些令牌,所有服务都需要一种机制来验证这些令牌(/oauth/check_token)。您可以为此使用客户端凭据授予类型。这些/oauth/**endpoint由Spring提供。要从一个服务向另一个服务发出REST请求,请使用OAuth2RestTemplate及其非线程安全性。

    在每个应用程序中,您需要为各种endpoint定义安全保护规则。大致如下:

    <sec:filter-security-metadata-source id="securityMetadataSource"
                                             request-matcher="ant"
                                             use-expressions="true">
            <sec:intercept-url pattern="/accounts/**" access="isFullyAuthenticated() and hasRole('PRIVATE_SERVICE')"/>
            <sec:intercept-url pattern="/members/member-details" method="GET" access="isFullyAuthenticated() and hasRole('PORTAL_USER')"/>
    

    对于更多限制,您可以为每个应用程序(而不是每个应用程序实例)颁发自签名证书。在单个信任库中添加所有应用程序的公钥。在应用程序启动期间,让所有应用程序下载此信任库。使用此应用程序将仅与它信任的应用程序通信。

     类似资料:
    • 我有两个Spring启动应用程序。后端部分-可以访问数据库,它用作Rest API和管理面板。前端部分-使用Rest API为客户端显示信息。 因此,我对客户端(前端)的配置安全性有问题,对管理面板也有问题,授权是通过会话实现的。以前,客户端部分的授权是通过JWT令牌实现的,但我不太明白如何为每个客户端存储令牌,并在向Rest API发送请求时使用它。 这是我的安全配置: 那么,可以使用JWT令牌

    • 我有一个多租户项目,它将调用多个微服务来执行特定任务。 我希望微服务从发送的请求中了解要使用哪个DB,因为每个租户都将使用微服务,但是,租户将拥有自己的DB。我有另一个解决方案,它有一个处理API密钥管理的Web项目。 比方说,API密钥管理位于域:portal.example.com 当 tenant.example.com 在 microservice.example.com 调用微服务时,我

    • 我正在使用microservies Architect学习API。下面是关于设置的小描述 我有两个微服务应用程序和API网关 包括API网关在内的所有应用程序都是NodeJS-Express app。 Auth Logic-JWT,在API网关上处理 使用http-proxy将每个传入的API网关请求传递给每个微服务应用程序。 还将用户信息作为代理头传递。 客户端请求流: 客户端使用JWT令牌从m

    • 我正试图从现有的应用程序中设计一个具有相当标准的用户管理的微服务:具有认证和授权,并存储用户数据。 我正在开发一个授权服务器来管理用户身份验证和授权,使用作为授权。在另一方面,我必须存储用户的信息/配置文件。 问题:授权服务器应该管理: 授权和用户API?因此,其他微服务可以联系上的授权服务器以获取当前用户,也可以联系以获取完整的用户列表。 还是只有授权,我必须创建用户微服务?因此授权服务器只公开

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

    • 我最近读了不少关于微服务的文章,尤其是关于AuthN和Authz的文章。在很大程度上,这一切都很有意义,我可以看到这一切应该如何工作。 (注意--现在我只实现了客户端凭据授予和资源所有者密码凭据授予,因为我只是想看看它是如何工作的,而且用curl调用它们更容易。但我不知道这有什么不同)