В настоящее время я работаю над приложением Spring для аутентификации Oauth2, но у меня возникла проблема с внедрением пользовательского ClientDetailsService.spring security OAuth2 - custom ClientDetailsService
Я не могу использовать обычный inMemory ou jdbc clientDetailsService, потому что информация о клиентах не хранится в моем приложении, я получаю их из внешнего веб-сервиса. Но когда я устанавливаю пользовательский ClientDetailService, я больше не получаю страницу access_confirmation (я получаю пустую страницу).
Чтобы показать вам мой вопрос, который я не использую мое приложение, но тест ванили с официальной весны - безопасность OAuth проекта spring-security-oauth
Вот код приложения:
@SpringBootApplication
@EnableResourceServer
@RestController
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@RequestMapping("/")
public String home() {
return "Hello World";
}
@RequestMapping(value = "/", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public String create(@RequestBody MultiValueMap<String, String> map) {
return "OK";
}
@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {
@Autowired
private AuthenticationManager authenticationManager;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.authenticationManager(authenticationManager);
}
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.checkTokenAccess("isAuthenticated()");
}
public ClientDetailsService clientDetailsService() {
return new ClientDetailsService() {
@Override
public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {
BaseClientDetails details = new BaseClientDetails();
details.setClientId(clientId);
details.setAuthorizedGrantTypes(Arrays.asList("authorization_code"));
details.setScope(Arrays.asList("read, trust"));
details.setResourceIds(Arrays.asList("oauth2-resource"));
Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority("ROLE_CLIENT"));
details.setAuthorities(authorities);
return details;
}
};
} //*/
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
// @formatter:off
clients.withClientDetails(clientDetailsService());
/*clients.inMemory()
.withClient("test")
.authorizedGrantTypes("authorization_code")
.authorities("ROLE_CLIENT")
.scopes("read", "trust")
.resourceIds("oauth2-resource");
//*/
// @formatter:on
}
}
}
Как вам можно увидеть, что я добавляю свой заказ clientDetailsService и изменяю конфигурацию ClientDetailsServiceconfigurer, чтобы установить его вместо клиента clientDetailsService.
Моя проблема заключается в том, что при попытке получить мой токен я не получаю свою страницу access_confirmation после того, как я зарегистрировал пользователя.
Я нашел свою проблему, мое определение областей в моем clientDetails было ложным. У меня был Arrays.asList («читать, доверять») вместо Arrays.asList («читать», «доверять»)
Я что-то пропустил? мне нужно установить свой собственный клиентDetailsService в другое место?
Есть ли у вас дополнительная информация, как StackTrace или журнал, которые показывают больше о вашей проблеме? –
Я не получаю никаких ошибок в своем тесте. Если я пытаюсь получить маркер с установкой Почтальон - локальный: 8080/OAuth/авторизацию в качестве URL авторизации - локальный: 8080/OAuth/маркер в качестве маркера URL - тест, как идентификатор клиента - authorization_code как тип гранта I получить пустой экран после аутентификации пользователя (он не пошел на страницу confirm_access) –
Если я тестирую его в своем браузере с этим URL-адресом: http: // localhost: 8080/oauth/authorize? client_id = test & redirect_uri = http: // localhost: 8080/& response_type = code Я перенаправлен на redirect-uri, не получив страницу confirm_access до (для URL-адреса браузера я знаю, что URL-адрес не подходит для моего токена, но он должен быть enuogh для проверки авторизации) –