Я пытаюсь создать доказательство концепции с использованием Spring Boot и OAuth2. Я создал некоторый проект, очень похожий на тот, описанные здесь:Использование аутентификации Active Directory в Spring Boot OAuth2 Authorization Server
https://spring.io/guides/tutorials/spring-boot-oauth2/
и здесь: https://spring.io/guides/tutorials/spring-security-and-angular-js/
Основное отличие от шахты я оставил из всех вещей AngularJS.
У меня есть следующие услуги:
- Авторизация сервер
- сервер ресурсов (как защищенный клиент oauth2)
- сервер UI (как защищенный клиент oauth2)
Все, что я хочу должно произойти следующее:
- Хит сервер UI
- Получить перенаправлены авторизовать сервер и получить запрос на ввод учетных данных сервер
- UI будет получать некоторый текст с сервера ресурсов и отображать их
я могу получить это все нормально работать с Basic аутентификации на сервере auth. Однако я хочу заменить базовую аутентификацию на Active Directory.
У меня есть пара других проектов Spring Boot, которые могут выполнять аутентификацию AD, и она работает, однако всякий раз, когда я пытаюсь ее перебросить, все происходит неправильно. Я думаю, что это связано с безопасностью вокруг конечных точек сервера auth, но я не уверен, что.
Кроме того, мне не ясно, какие конечные точки должны быть защищены каким протоколом (OAuth2 v. Basic) в производственной среде? Документы рекомендуют, чтобы некоторые конечные точки были защищены базовым. Должны ли все «клиенты OAuth2» каким-то образом включать эти учетные данные в свои запросы?
Вот мое приложение аутентификации сервера (с битами для Active Directory добавлены):
@EnableResourceServer
@EnableAuthorizationServer
@SpringBootApplication
@RestController
public class AuthServerLdapApplication {
public static void main(String[] args) {
SpringApplication.run(AuthServerLdapApplication.class, args);
}
@RequestMapping("/user")
public Principal user(Principal user) {
return user;
}
@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)
@Configuration
protected static class ActiveDirectoryConfig extends WebSecurityConfigurerAdapter {
@Value("${activedirectory.url}")
private String activeDirectoryUrl;
@Value("${activedirectory.domain}")
private String getActiveDirectoryDomain;
@Autowired private AuthenticationManager authenticationManager;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(getActiveDirectoryDomain,
activeDirectoryUrl);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
auth.authenticationProvider(provider);
auth.parentAuthenticationManager(authenticationManager);
}
}
}
В основном то, что тогда происходит то, что я получаю это, когда я попал на сервер интерфейса:
<oauth>
<error_description>
Full authentication is required to access this resource
</error_description>
<error>unauthorized</error>
</oauth>
Если вы делаете это на сервере авторизации:
curl -v http://localhost:9004/uaa/login
* Trying ::1...
* Connected to localhost (::1) port 9004 (#0)
> GET /uaa/login HTTP/1.1
> Host: localhost:9004
> User-Agent: curl/7.44.0
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Server: Apache-Coyote/1.1
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: 0
< X-Frame-Options: DENY
< Cache-Control: no-store
< Pragma: no-cache
< WWW-Authenticate: Bearer realm="null", error="unauthorized", error_description="Full authentication is required to access this resource"
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Tue, 01 Dec 2015 12:38:53 GMT
<
{"error":"unauthorized","error_description":"Full authentication is required to access this resource"}* Connection #0 to host localhost left intact
Похоже, что конечная точка входа теперь ожидает токен-носитель? Я не уверен, как поступить сейчас ...
Любая помощь/советы будут оценены ...
ОК, прежде чем я увидел ваш ответ я добавил это к WebSecurityConfigurerAdapter: '@Override общественного недействительными настроить (HttpSecurity HTTP) бросает исключение { http.httpBasic() и() authorizeRequests() antMatchers (... .. "/ Логин") permitAll() anyRequest() аутентифицировано(). } ' Неважно, какой компонент @Configuration находится в? Казалось, это работает и в ... –