Spring Security Spring授权服务器:将不透明令牌发送到内省端点返回“invalid_request”

slwdgvem  于 2023-01-26  发布在  Spring
关注(0)|答案(1)|浏览(232)

我正在将一个项目迁移到Spring Authorization Server(1.0.0),遇到了一个问题。
尽管缺乏太多的示例或文档,我还是继续尝试使用授权代码流(使用PKCE)将其设置为返回不透明令牌。
我已经成功地部署了该方案并连接了所有服务,并且已经达到了这样的程度:我的SPA可以发送用户登录到授权服务器上,并使用返回的代码从服务器获得令牌。
当尝试将访问令牌发送到内省端点时,问题出现了(我没有对此进行任何配置,它一直保留为默认值)。
无论我使用什么工具(SpringOauth2Resourceserver或Postman),当我传入访问令牌时,我都会得到下面的响应。

{
    "error": "invalid_request"
}

我已经确认访问令牌存在于oauth2_authorization表中,并且使用了正确的客户机id和secret(自省请求中不正确的客户机id或secret会返回不同的错误)。
控制台中没有显示任何错误(无论日志级别如何),所以我真的有点迷路了。
这个项目的文档似乎真的很有限,所以我想联系社区,看看是否有人有任何如何设置不透明令牌的例子,或者我可能出错的地方。

pepwfjgg

pepwfjgg1#

听起来我们需要文档中的官方示例或指南来演示此设置。
碰巧的是,我们将在几天后(2023年1月26日)在SpringOne Essentials上的“配置和扩展Spring授权服务器”演讲中介绍这一点。我将在即将到来的演讲中介绍不透明令牌和令牌自省。
我配置入门示例的一般方法如下:

  • 将示例RegisteredClient拆分为两个名为oidc-clientmessaging-client的客户端
  • oidc-client配置为OIDC,这意味着它将保持使用JWT的配置
  • 更改messaging-client以将不透明令牌与.tokenSettings(TokenSettings.builder().accessTokenFormat(OAuth2TokenFormat.REFERENCE).build())一起使用

oidc-client将只用于在客户端登录,因此它只需要openidprofile这样的作用域。messaging-client将被客户端用于获取访问令牌,以访问资源服务器上的受保护资源,因此在本例中它需要message.readmessage.write这样的作用域。
有必要将RegisteredClient拆分为两个单独的客户端,以便JWT可以继续用于UserInfo端点[1]。
请参见下面的提交示例:

[1]**注意:**配置Spring Authorization Server为UserInfo端点使用opaque令牌实际上有点困难(尽管很有可能)。它涉及到从Spring Security配置一个OpaqueTokenIntrospector以在内部内省令牌。这将是一个相当高级的设置,可能会有点混乱,所以我们选择不尝试在讨论中涉及它。

相关问题