OAuth2从资源服务器流向另一个

ioc*_*tos 10 security spring-security oauth-2.0 spring-oauth2

实施不可知的讨论.

假设如下图. 在此输入图像描述

  • 黑线表示哪些服务受auth服务器保护.
  • 绿线表示服务之间的交互(客户和订单服务需要通过将访问数据库的数据服务.StandAlone服务不喜欢其他服务)
  • 红线显示特定的请求流程
  • 数据服务不直接暴露给外部,只能由允许的其他服务访问.

我假设当用户使用auth服务器进行身份验证时,客户端已获得访问令牌.选择哪个流(隐式,授权代码,密码)是无关紧要的.我想从客户端已经获得访问令牌的角度开始讨论.

从那时起,我很清楚当客户端需要访问单个资源服务器时会发生什么.

  1. 向资源服务器发出请求并传递获取的令牌
  2. 资源服务器验证令牌(不相关如何)
  3. 如果有效,请提供服务.

因此,在该图中,如果客户端要访问"StandAlone Service"(它不与任何其他资源服务器通信),那么流程对我来说很清楚.

当客户端跟随图中的红线时,我遇到了麻烦.所以我需要访问一个服务(资源服务器),以便回复需要访问另一个服务(也是资源服务器).在这种情况下,流程如何?

场景1.

  1. "订单服务"既设置为资源服务器,也设置为客户端.
  2. 客户端使用访问令牌发出请求,但"订单服务"将获取具有其自己的客户端凭证的另一个令牌,以便与"数据服务"通信.

我认为这里的问题是我放弃了用户权限.我将使用"订单服务"权限而不是用户的权限执行对"数据服务"的请求.

情景2.

  1. "订单服务"仅设置为资源服务器.
  2. 客户端使用用户令牌发出请求,"订单服务"会将相同的令牌转发到"数据服务"

在这里,我执行用户的权限,但现在我看到我的"数据服务"已公开,并对任何其他服务开放.(实际上我不知道oauth2是否提供了这样的限制.仅将客户端限制为特定的资源服务器)

场景3.

在这里,我看到了上述场景的组合,其中"订单服务"将为数据服务提供两种令牌.用户访问令牌,以便使用正确的权限和"订单服务"客户端访问令牌执行请求,以便我知道该服务可以与"数据服务"通信.

履行

我正在使用spring boot和spring security来设置我上面看到的oauth2组件.我已经有一个auth服务器,一个资源服务器和一个客户端.客户端此时与资源服务器进行通信,而不会将请求委托给另一个资源服务器.

根据最佳方法,我将如何进入实施方面?我需要对资源服务器进行哪些更改才能使它们能够安全地相互通信?

感谢您的时间

Gab*_*ica 3

您正在混合授权和身份概念。

oauth2 角色(resource ownerresource server和)是角色而不是身份authorization serverclient您的订单服务resource server在一种场景中扮演角色,client在另一种场景中扮演角色。

场景 1 是正确的方法。

Oauth2 令牌确实与某些资源标识符相关联,因此将客户端限制为特定资源是一项内置功能。

scope使用 Oauth2概念处理客户端相关的授权集

如果您想在请求流中传播最终用户身份,则必须在流中传播身份令牌(例如 JWT)(请参阅OIDC)。然而,处理最终用户授权可能不是数据服务的责任。