我开发了一个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);
}