1

В настоящее время я изучаю Spring Cloud OAuth и был довольно успешным в выполнении SSO с базой HTTP на сервере безопасности.Spring Cloud OAuth2: перенаправлено AGAIN на страницу входа после аутентификации, как будто не аутентифицировано при использовании имени входа в систему

Теперь я пытаюсь интегрировать учетную запись формы (страница входа в систему по умолчанию), отключив http basic. Но когда вводится правильное имя пользователя и пароль, он снова перенаправляется на страницу входа в систему сервера безопасности, как если бы он не был аутентифицирован.

  1. клиент переходит на службу SSO (неавторизованного)
  2. Пересылаемых безопасности/OAuth/авторизацию? ... (неавторизованный)
  3. Forwarded для безопасности/авторизации, клиент входа правильные учетные данные (проверки подлинности)
  4. Forwarded безопасности/OAuth/авторизацию? ... (неавторизованный)
  5. Forwarded сНОВА для безопасности/логин

Вот моя конфигурация для SE службы безопасности.

spring: 
    profiles: development 
    application: 
     name: security 
security: 
    user: 
     password: none 
    oauth2: 
     client: 
      client-id: client 
      client-secret: 1234 
      grant-type: password, authorization_code, refresh_token 
      scope: read, write 
      auto-approve-scopes: read, write 
      authorized-grant-types: password, authorization_code, refresh_token 
     resource: 
      user-info-uri: http://${server.address}:${server.port}${server.context-path}/oauth/user 
      token-info-uri: http://${server.address}:${server.port}${server.context-path}/check_token 
      prefer-token-info: false 
    basic: 
     enabled: false 
server: 
    port: 8082 
    context-path: /security 
    address: localhost 

@SpringBootApplication 
@EnableAuthorizationServer 
public class Application extends SpringBootServletInitializer { 

    /** 
    * {@inheritDoc } 
    */ 
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     builder.sources(Application.class); 
     return builder; 
    } 

    /** 
    * @param arguments the command line arguments 
    */ 
    public static void main(String[] arguments) { 
     SpringApplication.run(Application.class, arguments); 
    } 

    @Configuration 
    @EnableResourceServer 
    public static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter { 

     @Override 
     public void configure(HttpSecurity http) throws Exception { 
      http.authorizeRequests().anyRequest().authenticated() 
        .and() 
        .formLogin().permitAll() 
        .and() 
        .logout().permitAll(); 
     } 

    } 

    @Configuration 
    @EnableWebSecurity 
    public static class AuthenticationServerConfiguration extends WebSecurityConfigurerAdapter { 

     @Override 
     public void configure(HttpSecurity http) throws Exception { 
      http.authorizeRequests().anyRequest().authenticated() 
        .and() 
        .formLogin().permitAll() 
        .and() 
        .logout().permitAll(); 
     } 

    } 

} 

Вот моя конфигурация для обслуживания клиентов:

spring: 
    profiles: development 
    application: 
     name: sso 
security: 
    user: 
     password: none 
    oauth2: 
     client: 
      client-id: client 
      client-secret: 1234 
      access-token-uri: http://${server.address}:8082/security/oauth/token 
      user-authorization-uri: http://${server.address}:8082/security/oauth/authorize 
     resource: 
      user-info-uri: http://${server.address}:8082/security/oauth/user 
      token-info-uri: http://${server.address}:8082/security/check_token 
      prefer-token-info: false 
server: 
    port: 8085 
    context-path: /sso 
    address: localhost 

@SpringBootApplication 
@EnableOAuth2Sso 
public class Application extends SpringBootServletInitializer { 

    /** 
    * {@inheritDoc } 
    */ 
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     builder.sources(Application.class); 
     return builder; 
    } 

    /** 
    * @param arguments the command line arguments 
    */ 
    public static void main(String[] arguments) { 
     SpringApplication.run(Application.class, arguments); 
    } 

} 

Я пропускаю что-то или иметь неправильные конфигурации? Пожалуйста исправьте.

ответ

0

Я думаю, что вы забываете URL-адрес входа в систему. Если вы используете SSO с Outlook, GitHub и т. Д., Этот URL-адрес должен быть указан в конфигурации вашего приложения.

+0

@Diego_Arguelles у меня есть свой собственный сервер авторизации. –

+0

Ummm ok man, [здесь] (http://stackoverflow.com/a/39188986/4433104) я нашел ответ, который, я думаю, вам поможет. –

+0

@Diego_Arguelles Я обновил свой пост со сценарием. –

0

Я был с такой же проблемой и ниже код работает для меня:

@Configuration 
@EnableResourceServer 
public static class ResourceServerConfiguration extends ResourceServerConfigurerAdapter { 

    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) 
       .and() 
       .authorizeRequests().anyRequest().authenticated() 
       .and() 
       .formLogin().permitAll() 
       .and() 
       .logout().permitAll(); 
    } 

} 

Как заявил тех, кто отвечает за Spring Security, начиная с версии 2.0.4, Spring по умолчанию не создает сессию больше, это приводит к потере сеанса при перенаправлении на страницу утверждения. Таким образом, этот код: .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED) заставит Spring создать сеанс для этого потока утверждения.

Я после этого образец проекта: OAuth2ServerConfig

+0

Добро пожаловать в StackOverflow. Ответы только с кодом в них, как правило, помечены для удаления, так как они «низкого качества». Пожалуйста, прочитайте раздел справки по ответам на вопросы, затем подумайте над добавлением некоторых комментариев к своему ответу. – Graham

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

  • Нет связанных вопросов^_^