2

Я пытаюсь создать доказательство концепции с использованием 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)

Все, что я хочу должно произойти следующее:

  1. Хит сервер UI
  2. Получить перенаправлены авторизовать сервер и получить запрос на ввод учетных данных
  3. сервер
  4. 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 

Похоже, что конечная точка входа теперь ожидает токен-носитель? Я не уверен, как поступить сейчас ...

Любая помощь/советы будут оценены ...

ответ

1

Вы @EnableResourceServer, но вы не предоставили каких-либо правил для ресурсов, которые вы хотите защитить, так он пытается чтобы защитить все.Вам нужно добавить @Bean типа ResourceServerConfigurerAdapter и установить запрос-подборщики (а также любые другие правила, которые вы хотите).

+0

ОК, прежде чем я увидел ваш ответ я добавил это к WebSecurityConfigurerAdapter: '@Override общественного недействительными настроить (HttpSecurity HTTP) бросает исключение { http.httpBasic() и() authorizeRequests() antMatchers (... .. "/ Логин") permitAll() anyRequest() аутентифицировано(). } ' Неважно, какой компонент @Configuration находится в? Казалось, это работает и в ... –

Смежные вопросы