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

如何在应用程序发起调用时处理微服务之间的身份验证

阳建弼
2023-03-14

我读了很多关于微服务架构中身份验证的文章,最终得出的结论是 JWS 安全性是必经之路。这意味着

  • 当客户端发出请求时,它需要具有有效的访问令牌
  • 请求的身份验证在网关级别进行,授权在微服务应用程序级别进行
  • 当客户端向微服务 A 发出请求,
  • 我需要调用微服务 B 时,我需要重复使用相同的访问令牌来向 A 和 B 发出请求。

但是当请求的发起者不是客户端时,我仍然有很多疑问,它是另一个应用程序,来自微服务架构外部和内部

>

  • 如果我们有一个整体式应用程序,并且想要调用微服务,我们计划开发一种带有 API 密钥的轻型身份验证模型,该模型将在网关级别转换为 JWS。因此,应用程序不需要维护会话(使用令牌和刷新令牌),并且只需使用 API 密钥即可发出请求,但在网关级别,该 API 密钥将被转换为 JWS,因此微服务架构中的所有内容都将使用 JWS 作为授权模型。

    但是,如果我们想将微服务 A 与微服务 B 进行通信,并且发起调用的是微服务 A,该怎么办?这意味着在同一微服务体系结构中的应用程序到应用程序。这是我的疑问:

    1. 如果我遵循上面解释的相同逻辑,我需要通过网关将 API 密钥转换为 JWS,只是为了传达两个微服务,这没有意义。
    2. 同一架构内微服务之间的通信是否需要进行身份验证/授权?我们正在使用 Istio 进行双向 TLS
    3. API 密钥是应用到应用身份验证的好主意吗?或者最好将所有内容都使用 JWS?
    4. 如果要走的是另一种完全不同的身份验证/授权模型。这是否意味着应用程序需要支持这两种模式?(这将增加所有微服务的复杂性)

    这个话题让我感到困惑,所以非常欢迎有关这个主题的任何帮助

  • 共有1个答案

    谯振国
    2023-03-14

    是否考虑过使用客户端凭据流?看起来整体式应用调用微服务就足够了。它是专为应用到应用通信而设计的 OAuth 流。您的整体式应用程序将能够轻松获取 JWS 访问令牌,只需向授权服务器发出一个请求。

    就个人而言,我不会使用 API 密钥,而是使用客户端凭据流。它是基于标准的,因此您不必重新发明轮子。

    如果您将 Istio 与 mTLS 一起使用,则通信已经过身份验证。如果我没记错的话,你也可以在 Istio 中定义一些授权规则(允许哪个服务调用哪个服务等)。如果整体式应用位于同一网络中,则可以使用它对其进行身份验证,并且根本不需要客户端凭据流。

     类似资料:
    • 我现在读了很多关于微服务的书,但仍然不了解其中的一些部分。我画了以下图: 每个微服务有2个访问: REST:对于超文本传输协议使用 gRPC:用于内部/后台通信/交换 如果我想登录,我可以向我的身份验证服务发送一个Http请求。但是,如果我想访问需要您连接的Stuff服务,该怎么办? 假设用户希望显示数据库中可用的内容,服务人员将首先通过与身份验证服务交换来检查连接用户的“令牌”是否正确,然后返回

    • 管理员-能够创建内容,上传文件等(管理员帐户只能由另一个管理员创建) 未经授权的用户-可以查看内容 授权用户-可以评论内容 以下是我到目前为止对身份验证流的思考: 身份验证服务-使用用户凭据和权限访问数据库 API Gateway--检索来自用户的请求,检查用户是否登录(即用auth服务验证OAuth2访问令牌),并根据用户请求将流传输到其他服务(附加一些基本用户信息的JWT令牌) 另一个服务--

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

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

    • 我的webapp是用。NET核心并部署在Azure中。我已启用Azure应用程序服务身份验证,并将其配置为使用Azure Active Directory。当我访问webapp时,我确实会被重定向到正确的登录页面。登录后,我可以浏览到endpoint。对我进行身份验证,并查看是否存在针对我的用户的声明。我还可以验证下面的请求标头是否存在值: X-MS-TOKEN-AAD-ID-TOKEN X-MS

    • 我在AWS上托管了几个微服务(Springdge)。例如,让我们假设Service1和Service2是两个微服务。Service1是前端和移动应用程序访问的微服务。Service1调用Service2。Service2完全是内部的。 我已经设置了位于Service1前面的Amazon API网关。我使用cognito配置了身份验证(Oauth)。 这一切都在起作用。当从前端/应用程序调用时,请求

    • 假设我已经有入口点(api网关)来处理身份验证和发布JWT令牌。然后用户用这个令牌调用某个APIendpoint。到目前为止,一切都很清楚。现在--这个endpoint需要与另一个微服务通信。该微服务必须获得授权信息(角色等)。另外-这个通道是异步的(JMS/Kafka),这意味着处理可能会被dalayed... 我也在考虑其他情况:我们有两个服务A和B,它们都公开可能被外部用户访问的API(JW

    • react中的前端 基于Spring Boot“resource-service”的后端服务 keycloak 其他后端服务(使用者) 前端和使用者服务都使用REST API与后端通信。我们使用Keycloak作为我们的用户管理和身份验证服务。 我们希望通过提供web应用程序和服务流来将基于Spring的服务“资源服务”与Keycloak集成: > 基于web application-react的