Активный каталог Spring boot проверяет только на незащищенных конечных точках - PullRequest
0 голосов
/ 28 февраля 2020

Настройка:

  • Бэкенд Spring Boot 2.0.3 с защитой пружины и azure -active-directory-spring-boot-starter -> Это автоматически делает большинство вещей
  • Angular frontend (скорее всего, не имеет значения, так как проблема также присутствует при тестировании в Postman). Я могу успешно получить действительный токен JWT от Microsoft во внешнем интерфейсе и предоставить его в заголовке авторизации.

Ситуация / Шаги для воспроизведения поведения:

  1. Если я получу доступ защищенная конечная точка серверной части, она выдает ошибку 403 вместо того, чтобы пропустить меня. (Любая конечная точка, кроме указанной c, как настроено в http.authorizeRequests().anyRequest().authenticated();)
  2. Если я получаю доступ к незащищенной конечной точке, она не только работает, но и проверяет мой отправленный токен, который выводится в журнале сервера. сообщение. Он также возвращает повара JSESSIONID ie. (В настоящее время как в конечной точке / authorize)
  3. Каждый следующий запрос к любой защищенной конечной точке теперь работает, так как JSESSIONID cook ie теперь позволяет пользователю проходить через пружинную защиту.

Вопрос (более сфокусированный):

Предполагается ли в библиотеке Microsoft, что каждый пользователь должен сначала получить JSESSIONID, отправив запрос с токеном JWT в заголовке авторизации незащищенной конечной точке? Непосредственно следующее: Если нет: могу ли я изменить это поведение?

Код:

WebSecurityConfig:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


  @Override
  protected void configure(HttpSecurity http) throws Exception {

    // allow all request access this url
    http.authorizeRequests().antMatchers("/authorize").permitAll();
    http.authorizeRequests().anyRequest().authenticated();

    // access to this url requires authentication
    http.authorizeRequests().antMatchers("/**").authenticated();
    }
}

Представитель раздела файла службы остальных:

  //unprotected
  @GetMapping(value = "/authorize")
  public String authorize() {
    return null;
  }

  //this site should ideally also be accessible with bearer token, not only with valid JSESSIONID
  @GetMapping(value = "/testsite2")
  public String testsite2() {

    return "test";
  }

Редактировать: Связанные с безопасностью части POM. xml

     <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>azure-active-directory-spring-boot-starter</artifactId>
      <version>2.0.4</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-oauth2-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-oauth2-jose</artifactId>
    </dependency>

Редактировать 2 для уточнения Это фактически вся необходимая конфигурация для воспроизведения проблема. Насколько я знаю (и я снова тщательно обыскал), там нет ничего дополнительного, связанного с безопасностью. Только значения application.properties с данными Microsoft, такие как clientId et c. Нет соответствующих данных конфигурации, кроме этого.
Я не знаю, где проверяется JSESSIONID или токен JWT, что автоматически выполняется платформой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...