Spring Security 5使用JdbcOauth2AuthorizedClientService持久化OAuth2授权客户端报错
尝试在无状态微服务中使用JdbcOauth2AuthorizedClientService持久化access_token、refresh_token等授权客户端信息,但遇到以下错误,无法获取所需资源,授权客户端信息也从未保存到Postgres中。
错误信息
[invalid_token_response] 尝试获取OAuth 2.0访问令牌响应时出错:500内部服务器错误:"{"timestamp":1672302575797,"status":500,"error":"Internal Server Error","exception":"org.glassfish.jersey.server.internal.process.MappableException","message":"java.lang.IllegalArgumentException: Unsupported contentType: application/json","path":"/oauth2-v1/oauth2/token"}"
使用InMemoryOAuth2AuthorizedClientService实现时,OAuth2流程运行正常,错误信息看起来与JDBC/数据库连接无关。此实现选择是参考Stack Overflow相关答案做出的。
Postgres数据库表结构
CREATE TABLE oauth2_authorized_client ( client_registration_id varchar(100) NOT NULL, principal_name varchar(200) NOT NULL, access_token_type varchar(100) NOT NULL, access_token_value bytea NOT NULL, access_token_issued_at timestamp NOT NULL, access_token_expires_at timestamp NOT NULL, access_token_scopes varchar(1000) DEFAULT NULL, refresh_token_value bytea DEFAULT NULL, refresh_token_issued_at timestamp DEFAULT NULL, created_at timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL, PRIMARY KEY (client_registration_id, principal_name) );
已尝试的操作
- 查阅LobHandler接口文档,其中提到不同数据库驱动对BLOB数据类型的处理行为不同,针对Postgres,文档建议创建
wrapAsLob=true的DefaultLobHandler
内容的提问来源于stack exchange,提问作者Randy Mujica
相关产品推荐
相关产品推荐

