Форма входа на сервере Oauth2 не возвращается на URL клиента - PullRequest
0 голосов
/ 16 мая 2018

Я пишу приложение Oauth2. Приложение Spring:

@SpringBootApplication
@EnableAuthorizationServer
@EnableResourceServer

public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

application.properties

security.oauth2.client.client-id=jerpweb
security.oauth2.client.client-secret=implementa
security.oauth2.client.authorized-grant-types=password,client_credentials,authorization_code,refresh_token
security.oauth2.client.scope=openid
security.oauth2.client.auto-approve-scopes=.*

, а конфигурация безопасности:

@Configuration
@EnableWebSecurity
@EnableTransactionManagement
@Order(-5)
public class SecurityConfigurationOauth extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailServiceImpl userService;

    @Autowired
    private PasswordEncoderService passwordEncoder;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception{
        auth.userDetailsService(userService).passwordEncoder(passwordEncoder);
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .requestMatchers()
            .antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
        .and()
            .authorizeRequests()
            .anyRequest().authenticated()
        .and()
            .formLogin().loginPage("/login").permitAll();
    }    

}   

oauth-сервер работает с протоколом пароль (localhost: 8081 / oauth / token). если я использую клиент oauth2

@SpringBootApplication
@EnableOAuth2Sso
public class ApplicationUi {

    public static void main(String[] args) {
        SpringApplication.run(ApplicationUi.class, args);
    }
}   

security.oauth2.client.client-id=jerpweb
security.oauth2.client.client-secret=implementa
security.oauth2.client.access-token-uri=http://localhost:8081/oauth/token
security.oauth2.client.user-authorization-uri=http://localhost:8081/oauth/authorize
security.oauth2.client.token-name=oauth_token
security.oauth2.client.authentication-scheme=query
security.oauth2.client.client-authentication-scheme=form
security.oauth2.client.scope=openid 

клиент перенаправлен на сервер авторизации правильно, но если аутентификация прошла успешно, клиент не возвращается. То есть если я вызываю страницу localhost: 8080 / меня перенаправляют на http://localhost:8081/login, но если аутентификация в порядке, браузер остается на странице ttp: // localhost: 8081 / login вместо возврата на страницу localhost: 8080 /.

Какая корректная конфигурация SecurityConfiguration с oauth2 форма входа ?

1 Ответ

0 голосов
/ 17 мая 2018

SecurityConfiguration в порядке, проблема в том, как настроить сервер авторизации.

По некоторым причинам сервер авторизации должен иметь контекстный путь , поэтому правильная конфигурация для сервера application.propertiesis:

server.port=8081
server.servlet.context-path=/uaa

security.oauth2.client.client-id=jerpweb
security.oauth2.client.client-secret=implementa
security.oauth2.client.authorized-grant-types=password,client_credentials,authorization_code,refresh_token
security.oauth2.client.scope=openid
security.oauth2.client.auto-approve-scopes=.*

сопоставление клиента должно быть соответственно изменено

auth-server=http://localhost:8081/uaa
security.oauth2.client.access-token-uri=${auth-server}/oauth/token
security.oauth2.client.user-authorization-uri=${auth-server}/oauth/authorize
security.oauth2.resource.user-info-uri=${auth-server}/api/userinfo  

С этими изменениями на месте перенаправление работает нормально.

...