개발/[Spring] 인증

[SSO] CAS 클라이언트 (4) - 샘플 프로젝트 : 두 개의 Client 로그인 테스트

sheriff 2019. 6. 13. 10:56

이전 글에서는 Client에서 Cas 인증 서버로 Redirect 한 뒤 인증처리가 되는 것을 확인했다.

 

하나의 Client가 잘 동작하는 것은 확인 했다.

이제 하나의 Client에서 인증이 완료 됐을 때, 다른 Client에서도 인증이 되는지 확인해 볼 필요가 있다.

 

프로젝트를 하나 더 만들어도 되지만 어차피 거의 똑같은 구조이기에 PORT 만 변경해서 Client 가 실행될 수 있도록
Cas 인증 서버 프로젝트와 Client 프로젝트를 수정해보자.

 

Cas 인증서버 프로젝트

Cas 인증서버에서는 JSON 파일 하나만 추가하면 된다.

그리고 실행 시켜보자.

새로 추가한 Client도 등록이 된 것을 확인할 수 있다.

Client 프로젝트

application.properties 파일에 server.port를 다음과 같이 수정하자.

server.port=${PORT:9000}

환경 변수로 PORT를 사용하고 입력하지 않았을 경우에 '9000' 을 사용하는 설정이다.

 

CasClientConfiguration 파일에 다음과 같이 추가하자.

    @Value("${server.port}")
    String port;

그리고 ServicePropertiesCasAuthenticationProvider Bean을 등록할 때 하드코딩 해놨던 포트 번호를 @Value로 추가한 port 변수로 변경한다.

@Bean
    public ServiceProperties serviceProperties() {
        ServiceProperties serviceProperties = new ServiceProperties();
        serviceProperties.setService("http://localhost:"+port+"/login/cas");
        serviceProperties.setSendRenew(false);
        return serviceProperties;
    }
 @Bean
    public CasAuthenticationProvider casAuthenticationProvider() {
        CasAuthenticationProvider provider = new CasAuthenticationProvider();
        provider.setServiceProperties(serviceProperties());
        provider.setTicketValidator(ticketValidator());
        provider.setUserDetailsService(
                s -> new User("kennen", "Mellon", true, true, true, true,
                        AuthorityUtils.createAuthorityList("ROLE_ADMIN")));
        provider.setKey("CAS_PROVIDER_LOCALHOST_"+port);
        return provider;
    }

설명에서는 하드코딩으로 설정해놨지만 실제 소스는 Properties를 사용한다.

 

이제 Terminal 에서 실행시켜보자.

 

포트 9000

$ mvn spring-boot:run -DPORT=9000

포트 9100

$ mvn spring-boot:run -DPORT=9100

 

포트가 다른 Client 두개가 잘 실행됐다.

9100 포트로 실행된 클라이언트에서 로그인을 시도해보자.

로그인이 잘 성공되면, 9000번 포트로 실행한 Client의 URL Path를 /secured 로 변경해보자.

 

위 이미지 처럼 9000번 포트의 Client에서는 로그인을 하지 않았지만 /secured 에 대한 응답을 확인할 수 있다.

 

다음 글에서는 Client의 로그아웃을 설정하고 Single Sign On의 로그아웃 버전인 Single Sign Out을 설정해보자.