我正在使用符合 OAuth 2.1 的授权服务。
从“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
据我了解,此案例存在安全问题。任何允许这样做的理由。
内省应该被视为获取不透明访问令牌的令牌数据的过程。内省通常在 API 网关中运行,然后将令牌数据转发到资源服务器 (API)。过期的代币无法自省。
内省不能代替授权。每个 API 应授权使用访问令牌数据。首先检查所需的发行人、受众、范围和声明。然后应用业务规则。
在授权服务器中,每个客户端都应该配置最小权限访问令牌。可以向客户提供不同(或相同)的受众、范围、声明。这使您能够控制哪些客户端可以调用哪些 API。例如,确保具有
marketing
范围的客户端无法调用 finance
API。
理想情况下,内省响应应该是 JWT 访问令牌。一些授权服务器支持这一点。然后可以将 JWT 转发到 API,从而使访问令牌在流动时保持可验证。