自省端点验证同一客户端和其他客户端颁发的令牌

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

我正在使用符合 OAuth 2.1 的授权服务。

  1. 有两个oauth2客户端“client-1”,“client-2”
  2. 使用“client-1”创建访问令牌
  3. 使用“client-1”、“client-2”内省生成的令牌

从“client-1”返回成功响应,从“client-1”返回错误响应(无效客户端)。

在这种情况下,如果两个应用程序具有相同的权限,每个应用程序都会接受其他应用程序颁发的令牌。资源服务器在授权之前需要验证内省响应客户端 ID 和应用程序客户端 ID。

如[1]和[2],这是正确的行为。

[1]。 https://github.com/spring-projects/spring-authorization-server/issues/1501

[2]。 https://datatracker.ietf.org/doc/html/rfc7662#section-2.3

据我了解,此案例存在安全问题。任何允许这样做的理由。

oauth-2.0 oauth-2.1
1个回答
0
投票

内省应该被视为获取不透明访问令牌的令牌数据的过程。内省通常在 API 网关中运行,然后将令牌数据转发到资源服务器 (API)。过期的代币无法自省。

内省不能代替授权。每个 API 应授权使用访问令牌数据。首先检查所需的发行人、受众、范围和声明。然后应用业务规则。

在授权服务器中,每个客户端都应该配置最小权限访问令牌。可以向客户提供不同(或相同)的受众、范围、声明。这使您能够控制哪些客户端可以调用哪些 API。例如,确保具有

marketing
范围的客户端无法调用
finance
API。

理想情况下,内省响应应该是 JWT 访问令牌。一些授权服务器支持这一点。然后可以将 JWT 转发到 API,从而使访问令牌在流动时保持可验证。

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