实现ClientDetailsS​​ervice(Spring Security OAuth2)以使用JPA

时间:2016-05-20 20:37:19

标签: java spring spring-security spring-boot oauth-2.0

我开发了一个REST服务,我想添加OAuth2。我是否正确理解OAuth2中的客户端是受信任的应用程序,开发人员必须注册它们,例如在Intstagram或VK.com中Facebook?

目前我以这种方式创建客户:

public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients
            .inMemory()
                .withClient("clientapp")
                    .authorizedGrantTypes("password", "refresh_token")
                    .authorities("USER")
                    .scopes("read", "write")
                    .resourceIds(RESOURCE_ID)
                    .secret("123456");
    }

但我想动态创建它们并保存到数据库中。我找到了JBDC的实现。但我想用JPA(Hibernate)来做。

我是否理解我需要:

1.创建数据库架构

create table oauth_client_details (
client_id VARCHAR(256) PRIMARY KEY,
resource_ids VARCHAR(256),
client_secret VARCHAR(256),
scope VARCHAR(256),
authorized_grant_types VARCHAR(256),
web_server_redirect_uri VARCHAR(256),
authorities VARCHAR(256),
access_token_validity INTEGER,
refresh_token_validity INTEGER,
additional_information VARCHAR(4096),
autoapprove VARCHAR(256)
);

2。创建实现

的实体CustomClientDetails
public interface ClientDetails extends Serializable

3。并实施

public interface ClientDetailsService

4。最后

public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
            clients
                .withClientDetails(customClientDetailsService); 
        }

因此,使用这种方式,我能够使用存储库和服务层动态创建客户端吗?

1 个答案:

答案 0 :(得分:1)

它对我有用的方式, 1.使用与oauth_client_details模式匹配的列名对JPA对象建模 2.编写ClientService类以对OathClientDetails对象执行CRUD操作 3.更改ClientServerConfigure以使用jdbc

@Autowired
DataSource dataSource;

public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.jdbc(dataSource);
}


@Bean
public PasswordEncoder userPasswordEncoder() {
   return new BCryptPasswordEncoder(4);
}