我正在尝试将 oauth2 支持添加到我的 java rest 服务中,
我设法让它在内存中工作:
protected static class MyAuthorizationServerConfigurerAdapter extends
AuthorizationServerConfigurerAdapter {
...
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.inMemory()
.withClient("myapp")
.authorizedGrantTypes("password", "refresh_token")
.authorities("USER")
.scopes("read", "write")
.resourceIds(RESOURCE_ID)
.secret("mysecret");
}
...
}
问题,每次服务器重新启动时,数据库都会丢失。 所以我想将它和现有的独立 SQL 数据库连接起来,有什么想法或指导如何完成吗?
我发现有一个 jdbc 选项,但我找不到让它工作的方法
clients.jdbc(dataSource)
谢谢
最佳答案
您确定要将客户端配置放入数据库吗?这将只允许您动态配置新客户端。
我想你想要的是将你的 token 保存在数据库中,这样如果你重新启动你的服务器,客户端就不会丢失他们的 session 。
这可以用下面的代码来实现:
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception }
endpoints.tokenStore(new JdbcTokenStore(dataSource)).userApprovalHandler(userApprovalHandler)
.authenticationManager(authenticationManager);
}
下面是创建数据库表的代码:
CREATE TABLE `oauth_access_token` (
`token_id` varchar(255) DEFAULT NULL,
`token` blob,
`authentication_id` varchar(255) DEFAULT NULL,
`user_name` varchar(255) DEFAULT NULL,
`client_id` varchar(255) DEFAULT NULL,
`authentication` blob,
`refresh_token` varchar(255) DEFAULT NULL
);
CREATE TABLE `oauth_refresh_token` (
`token_id` varchar(256) DEFAULT NULL,
`token` blob,
`authentication` blob
);
关于java - 将 spring oauth db 从内存迁移到 jdbc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835444/