实现客户端详细信息服务(Spring Security OAuth2)用于使用JPA



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

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

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(休眠)来做到这一点。

我是否正确理解我需要:

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. 创建实现的实体自定义客户端详细信息

public interface ClientDetails extends Serializable

3. 并实施

public interface ClientDetailsService

4. 终于

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

那么使用这种方式,我是否能够使用存储库和服务层动态创建客户端?

它为我工作的方式,1. 使用与oauth_client_details模式匹配的列名对 JPA 对象进行建模2. 编写 ClientService 类以对 OathClientDetails 对象执行 CRUD 操作3. 更改客户端服务器配置为使用 jdbc

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

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

最新更新