Для этой конкретной цели есть JdbcClientDetailsService
.
Вам необходимо определить следующую таблицу в вашей базе данных
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)
);
и настроить сервер авторизации Oauth2 следующим образом
@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter {
@Autowired
private DataSource dataSource;
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.jdbc(dataSource);
}
}
И, наконец, вы можете внедрить компонент JdbcClientDetailsService
в местоположение, в котором вы регистрируете companyId
.
@Autowired
JdbcClientDetailsService jdbcClientDetailsService;
...
BaseClientDetails clientDetails = new BaseClientDetails(companyId, resourceIds, scopes, grantTypes, authorities);
clientDetails.setClientSecret("generatedpassword");
jdbcClientDetailsService.addClientDetails(clientDetails);
Наконец, вы можете войти в систему, используя эти учетные данные клиента.
ОБНОВЛЕНИЕ
Если вы хотите, чтобы ваши пароли хешировались, вы можете установить PasswordEncoder, как показано ниже.
clients.jdbc(dataSource)
.passwordEncoder(new BCryptPasswordEncoder())
BaseClientDetails
доступно в пакете org.springframework.security.oauth2.provider.client
.
Секрет клиента не будет сгенерирован службой. Вам нужно сгенерировать его и установить BaseClientDetails
.