与第三方服务交互时在 OAuth 2.0 Spring Boot 应用程序中处理授权

问题描述 投票:0回答:1

我有实施涉及客户端和资源服务器的各种 OAuth 2.0 场景的经验,包括从非安全服务到我的客户端的调用,反之亦然。然而,我遇到过一种情况,让我对 OAuth 2.0 授权过程有点困惑,特别是授权提示应该何时何地出现。

场景: 我有一个 Spring Boot 应用程序,我将其称为 Service1,使用 OAuth 2.0 客户端依赖项进行设置。该服务包括一个使用 Google 作为身份提供商的登录表单。我的目标是让 Service1 向另一个服务(我们将其称为 Service2)发送请求,该服务不受 OAuth 2.0 的保护。我不确定在这种情况下授权流程应如何进行以及授权应在何处进行。

之前,我已经成功实现了一个涉及两个 Spring Boot 服务的场景:一个充当资源服务器,另一个充当 OAuth 2.0 客户端。在此设置中,当尝试访问从资源服务器检索数据的端点时,会弹出一个授权窗口。登录后成功返回数据。

我想要实现的目标: 我的目标是复制如上所述的类似流程,但有所不同。这是我设想的概念图:

我打算用虚拟服务代替它们以进行实验,而不是使用图中提到的特定“SnapStore”和“打印服务”。我的主要问题围绕服务间通信的访问令牌的必要性。具体来说,当我从虚拟非 OAuth 2.0 服务向 OAuth 2.0 安全服务发送请求时,我会收到 302 响应以及授权链接,然后我会重定向该链接。

问题:

  • 在这种情况下应该如何处理 OAuth 2.0 授权流程,特别是考虑到与不安全的第三方服务(Service2)的交互?
  • 我的理解是否正确,即服务到服务通信需要访问令牌,如果是这样,在这种情况下应如何适当管理到授权链接的重定向?

任何关于如何正确设置和处理此授权流程的见解或指导将不胜感激。

spring-boot spring-security oauth-2.0 google-oauth
1个回答
0
投票

在您的场景中,Service1 充当 OAuth 2.0 客户端,Service2 是不安全的服务。当 Service1 需要访问 Service2 时,授权流程通常取决于 Service2 的要求以及服务之间交互的性质。

以下是在此场景中处理 OAuth 2.0 授权流程的方法:

  1. 与Service2交互:

    • 由于 Service2 不受 OAuth 2.0 保护,因此不需要访问令牌进行授权。因此,Service1 无需获取专门用于与 Service2 通信的访问令牌。
  2. 授权流程:

    • 当Service1需要访问Service2的资源时,可以直接向Service2发出HTTP请求,无需涉及OAuth 2.0授权。 Service2 应该根据自己的身份验证和授权机制来处理这些请求。
  3. 处理授权提示:

    • 由于 Service1 是 OAuth 2.0 客户端,因此在代表用户访问受保护资源时,它可能仍需要提示用户授权。但是,如果 Service1 只是向 Service2 发出内部请求,而不涉及用户特定的数据,则可能不需要授权提示。
  4. 处理重定向:

    • 如果 Service1 在访问 Service2 时收到 302 响应以及授权链接,则表明 Service2 需要某种形式的身份验证或授权。在这种情况下,您需要适当地处理重定向。如果 Service2 需要 OAuth 2.0 授权,Service1 可能需要将用户重定向到授权服务器(例如 Google)以在访问 Service2 之前获取访问令牌。
  5. 服务间通信:

    • 服务到服务的通信通常需要某种形式的身份验证或授权机制。但是,它不一定必须是 OAuth 2.0。如果Service2不需要OAuth 2.0授权,Service1可以直接与Service2通信,而不涉及访问令牌。

综上所述,在Service1需要访问非安全服务(Service2)的场景下,可以绕过OAuth 2.0授权流程,直接进行HTTP请求。但如果Service2需要认证或授权,则需要根据其要求进行处理,其中可能涉及重定向和用户授权提示。

© www.soinside.com 2019 - 2024. All rights reserved.