将spring oauth db从inmemory迁移到jdbc

时间:2015-04-23 22:25:52

标签: java spring jdbc oauth

我试图将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)

谢谢

1 个答案:

答案 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
);

来源:https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql