Как мне помешать Heroku изменить заголовок location и вызвать 401 с помощью моей службы Spring boot OAuth2?

#java #spring-boot #heroku #oauth-2.0

#java #spring-boot #heroku #oauth-2.0

Вопрос:

У меня есть служба spring boot oauth2, работающая локально. Но когда я развертываю это в Heroku, происходит сбой с 401.

Итак, в моей локальной системе я захожу в пользовательский интерфейс, и у меня нет действительного JWT, поэтому он перенаправляет на:

 localhost:8080/api/auth/oauth/authorize?response_type=tokenamp;client_id=clienteagleeyeamp;redirect_uri=http:%2F/localhost:4200amp;scope=webClient
  

Spring gateway перенаправляет к моей службе аутентификации, localhost:8066/auth/login . Я вхожу в систему с действительным именем пользователя / паролем, и он перенаправляет на localhost:8066/auth/validate , который выдает этот заголовок ответа:

 Location: localhost:8066/auth/oauth/authorize?response_type=tokenamp;client_id=clienteagleeyeamp;redirect_uri=http:%2F/localhost:4200amp;scope=webClient
  

Он перенаправляет на:

 localhost:8066/auth/oauth/authorize?response_type=tokenamp;client_id=clienteagleeyeamp;redirect_uri=http:%2F/localhost:4200amp;scope=webClient
  

… и расположение заголовка ответа на этот вызов: localhost:4200#access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.etc...

Он перенаправляется обратно в пользовательский интерфейс, и у меня есть токен доступа. Все работает, как ожидалось.

Я делаю это в Heroku, я перехожу к этому шагу аутентификации / проверки abc-authserver.herokuapp.com/auth/validate , и местоположение заголовка ответа является Location: abc-authserver.herokuapp.com/auth/ .

Я ожидаю, что это будет:

 abc-authserver.herokuapp.com/auth/oauth/authorize?response_type=tokenamp;client_id=clienteagleeyeamp;redirect_uri=https:%2F%dummyuiamp;scope=webClient
  

но это не так, к чему он направляется abc-authserver.herokuapp.com/auth/ , и я получаю 401.

Почему Heroku удаляет мои данные response_type, client_id, scope и redirect_uri? Почему это меняет местоположение в заголовке ответа при проверке?Журналы показывают, что мое имя пользователя и пароль верны, и у меня есть информация. Он просто понятия не имеет, куда идти.

Это моя настройка ресурсов в authservice…

 @Configuration
@EnableConfigurationProperties
public class ResourceConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .cors().and()
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.NEVER).and()
            .authorizeRequests()
            .antMatchers("/api/**", "/auth/**", "/oauth/**", "/login", "/validate").permitAll()
            .and().formLogin()
            .loginPage("/login").loginProcessingUrl("/validate")
            .and()
            .logout().and().httpBasic().and().authorizeRequests().anyRequest().authenticated();
    }
}
  

Мне нужно выяснить, как не потерять информацию о перенаправлении. Я могу предоставить любую необходимую дополнительную информацию. Я трачу кучу времени, пытаясь разобраться в этом. Я был бы признателен за любой вклад. Спасибо.

Комментарии:

1. попробуйте это («/ api / **», » / auth / «, » / oauth / «, «/login», «/validate»)

2. используйте префикс ** перед конечной точкой

3. не повезло с изменениями конечной точки. итак, теперь это вроде как работает, я добавил обработчик успеха, я внедрил AuthenticationSuccessHandler и воссоздаю URL авторизации и выполняю redirectStrategy.sendRedirect (HttpServletRequest, HttpServletResponse, redirectUrl) … похоже, это работает, просто не уверен, насколько это желательно.