我开发了一个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。创建实现
的实体CustomClientDetailspublic interface ClientDetails extends Serializable
3。并实施
public interface ClientDetailsService
4。最后
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.withClientDetails(customClientDetailsService);
}
因此,使用这种方式,我能够使用存储库和服务层动态创建客户端吗?
答案 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);
}