我正在将一个项目迁移到Spring Authorization Server(1.0.0),遇到了一个问题。
尽管缺乏太多的示例或文档,我还是继续尝试使用授权代码流(使用PKCE)将其设置为返回不透明令牌。
我已经成功地部署了该方案并连接了所有服务,并且已经达到了这样的程度:我的SPA可以发送用户登录到授权服务器上,并使用返回的代码从服务器获得令牌。
当尝试将访问令牌发送到内省端点时,问题出现了(我没有对此进行任何配置,它一直保留为默认值)。
无论我使用什么工具(SpringOauth2Resourceserver或Postman),当我传入访问令牌时,我都会得到下面的响应。
{
"error": "invalid_request"
}
我已经确认访问令牌存在于oauth2_authorization表中,并且使用了正确的客户机id和secret(自省请求中不正确的客户机id或secret会返回不同的错误)。
控制台中没有显示任何错误(无论日志级别如何),所以我真的有点迷路了。
这个项目的文档似乎真的很有限,所以我想联系社区,看看是否有人有任何如何设置不透明令牌的例子,或者我可能出错的地方。
1条答案
按热度按时间pepwfjgg1#
听起来我们需要文档中的官方示例或指南来演示此设置。
碰巧的是,我们将在几天后(2023年1月26日)在SpringOne Essentials上的“配置和扩展Spring授权服务器”演讲中介绍这一点。我将在即将到来的演讲中介绍不透明令牌和令牌自省。
我配置入门示例的一般方法如下:
RegisteredClient
拆分为两个名为oidc-client
和messaging-client
的客户端oidc-client
配置为OIDC,这意味着它将保持使用JWT的配置messaging-client
以将不透明令牌与.tokenSettings(TokenSettings.builder().accessTokenFormat(OAuth2TokenFormat.REFERENCE).build())
一起使用oidc-client
将只用于在客户端登录,因此它只需要openid
和profile
这样的作用域。messaging-client
将被客户端用于获取访问令牌,以访问资源服务器上的受保护资源,因此在本例中它需要message.read
和message.write
这样的作用域。有必要将
RegisteredClient
拆分为两个单独的客户端,以便JWT可以继续用于UserInfo端点[1]。请参见下面的提交示例:
[1]**注意:**配置Spring Authorization Server为UserInfo端点使用opaque令牌实际上有点困难(尽管很有可能)。它涉及到从Spring Security配置一个
OpaqueTokenIntrospector
以在内部内省令牌。这将是一个相当高级的设置,可能会有点混乱,所以我们选择不尝试在讨论中涉及它。