1

현재 스프링 클라우드 OAuth를 연구 중이며 보안 서버에서 HTTP 기본을 사용하여 SSO를 수행하는 데 성공했습니다.스프링 클라우드 OAuth2 : 폼 로그인을 사용할 때 인증되지 않은 것처럼 인증 후 로그인 페이지로 다시 지정

이제 폼 로그인 (스프링 기본 로그인 페이지)을 통합하려고 시도하고 있으며 http 기본을 사용하지 않도록 설정하고 있습니다. 그러나 올바른 사용자 이름과 암호가 입력 될 때마다 인증되지 않은 것처럼 다시 보안 서버의 로그인 페이지로 리디렉션됩니다.

  1. 클라이언트는
  2. 보안에 전달 (무단) SSO 서비스 /의 OAuth/권한을 부여 간다? (무단)
  3. 보안/로그인에 전달, 클라이언트 입력 올바른 자격 증명 (인증)
  4. 보안에 전달하는 것은/OAuth를 /인가? (무단)는 보안/로그인 여기

에 다시 전달

  • 는 자체 내 구성입니다 최면술 서비스.

    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); 
        } 
    
    } 
    

    내가 실종 무언가 또는 잘못된 구성을 갖는 여기

    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(); 
         } 
    
        } 
    
    } 
    

    내 클라이언트 서비스를위한 구성입니다? 수정 해주세요.

  • 답변

    0

    성공 로그인 URL을 잊어 버린 것 같습니다. Outlook, GitHub 등에서 SSO를 사용하는 경우이 URL을 응용 프로그램 클라이언트 구성에 지정해야합니다. 나는이 같은 문제와 아래의 코드로했다

    +0

    @Diego_Arguelles :

    나는이 샘플 프로젝트를 따랐다. –

    +0

    Ummm ok man, [여기] (http://stackoverflow.com/a/39188986/4433104) 나는 당신을 도울 것이라고 생각하는 대답을 발견했다. –

    +0

    @Diego_Arguelles 시나리오를 사용하여 내 게시물을 업데이트했습니다. –

    0

    은 나를 위해 일한 :

    기본적으로 봄이 더 이상 세션을 만들지 않습니다, 버전 2.0.4의로, 봄 보안에 대한 책임이있는 사람들에 의해 언급 한 바와 같이
    @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(); 
        } 
    
    } 
    

    , 이로 인해 승인 페이지로 리디렉션되는 동안 세션 손실이 발생합니다. 따라서이 코드 : .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)은이 승인 절차를 위해 Spring이 세션을 생성하도록 강제 할 것입니다. 난 내 자신의 인증 서버가 OAuth2ServerConfig

    +0

    StackOverflow에 오신 것을 환영합니다. 코드 만 포함 된 대답은 "낮은 품질"이므로 삭제 플래그가 붙는 경향이 있습니다. 질문에 답하는 방법에 대한 도움말 섹션을 읽고 답변에 대한 해설을 추가하는 것을 고려해보십시오. – Graham