我试图将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");
}
...
}
问题是,每次服务器重启db都会丢失。
所以我想连接它和现有的独立SQL数据库,任何想法或指导它是如何完成的?
我发现有一个jdbc选项,但我找不到让它工作的方法
clients.jdbc(dataSource)
谢谢
答案 0 :(得分:4)
您确定要将客户端配置放在数据库中吗?这只允许您动态配置新客户端。
我认为您想要的是将您的令牌保存在数据库中,这样如果您重新启动服务器,客户端就不会丢失会话。
可以使用以下代码进行此操作:
@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
);