#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) … похоже, это работает, просто не уверен, насколько это желательно.