[SSO] CAS 인증서버 (1) - 샘플 프로젝트 : 시작하기
SSO CAS Server 샘플 프로젝트를 만들어 보자.
https://www.baeldung.com/spring-security-cas-sso
Single Signe On 서비스를 위해서는 최소한 두 개의 프로젝트가 필요하다.
첫번째는 cas-server라고 하는 Spring 기반의 인증 서버이다.
두번째는 하나 이상의 클라이언트 이다.
이번 장에서는 인증 서버에 대한 기본적인 설치 및 실행 방법에 대해서만 설명할 것이다.
추가적인 커스터마이징에 대해서는 추후에 쓰도록 하겠다.
CAS Server 설치하기
기본적인 CAS 인증서버를 구성하는 것은 매우 간단하다.
결론만 말하자면, github에서 소스를 받아서 실행만 하면 인증서버가 실행된다.
Cas Server 프로젝트 받기
git clone https://github.com/apereo/cas-overlay-template.git cas-server
위에 적어놓은 것처럼 github 에서 바로 clone 해서 사용해도 되지만, 난 zip 파일을 다운받았다.
다운로드 하기 위해서는 아래 링크로 이동해서 진행하자.
https://github.com/apereo/cas-overlay-template
그리고 나는 maven을 더 잘 알고 있고 사용하기 편하기 때문에 master 브랜치가 아닌 5.1을 선택했다.
원래는 5.3을 선택 했었는데, 의존성을 추가하는 과정에서 exclusion 해야 하는 이슈가 있어서 5.1로 변경했다.
소스 코드를 다운로드 받았고 이제 실행을 하면 되는데 그전에 소스가 어떻게 되어 있는지 확인해보자.
github에 있는 소스를 확인해보면 디렉토리가 두 개가 있는 것을 확인할 수 있다.
그리고 이제 Intellij로 다운로드 받은 소스를 열어보자.
프로젝트를 실행하고 maven reimport(보통 pom.xml 파일이 있으면 maven 프로젝트로 설정된다.) 를 하게 되면 'overlays' 라는 github 사이트에서 확인할 수 없었던 디렉토리(녹색 박스)가 생겨난 것을 확인할 수 있다.
Maven Overlay
서버는 Maven(Gradle) War Overlay 스타일을 사용하기 때문에 소스만 다운받으면 바로 실행이 가능하다.
War Overlay를 간단하게 설명하면
Overlay는 여러 Web Application에서 공통 리소스를 공유하는데 사용된다.
war 프로젝트의 종속성들은 war 프로젝트 자체에 Overlay 된 artifact를 제외하고 WEB-INF/lib 에 수집된다.
쉽게 이야기 하면...의존성에 있는 lib 들과 공통 리소스를 가져와서 사용하는 것이다.
물론 같은 classpath에 같은 파일이라면 현재 프로젝트가 우선시 된다.
이정도만 알아도 CAS 인증서버를 실행하기에 충분하다.
아래 링크를 가면 자세한 설명이 있다. 난 이곳을 참고했다.
http://maven.apache.org/plugins/maven-war-plugin/overlays.html
CAS Server 설정하기
의존성 추가
이제 pom.xml에 의존성을 추가 하도록 하자.
추가 될 의존성들은 JSON 구성을 통해서 서비스(Application) 등록을 가능하게 해준다.
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-json-service-registry</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc-drivers</artifactId>
<version>${cas.version}</version>
</dependency>
프로젝트 설정 & SSL 적용
다음은 Application의 포트를 변경하는 등의 설정과 SSL 키 저장소 경로를 설정하는 작업을 해보자.
- CAS Server 프로젝트에 'src/main/resources' 폴더를 생성하자.
- CAS Server 프로젝트에 'etc' 폴더를 위에서 생성했던 'src/main/resources' 폴더로 복사하자.
- 'src/main/resources' 에 application.properties 파일을 생성하고 기본값을 작성해보자.
Cas 인증서버 실행
터미널에서 빌드와 실행을 해보자.
maven에 대해서 어느정도 지식이 있다는 가정하에 진행 하도록 하겠다.
$ mvn package
$ java -jar target/cas.war
실행이 잘 되었다면 브라우져에서 확인해보자.
localhost:8443/cas/login 으로 접속하면 위의 화면을 확인할 수 있다.
Port 8443과 Context-path /cas 는 application.properties 에서 설정했다.
노란색 박스안에 뭔가 위험하다는 것을 표시하는 메시지가 있는데 해석하면
"지금 너의 인증 서버는 HTTPS가 적용되어 있지 않아서 Single Sign On이 제대로 동작하지 않을거야...SSO가 잘 동작하기 위해서는 반드시 HTTPS를 적용해야 할거야!!!!!"
라고 적혀 있다.
안전한 데이터를 주고 받기 위해서는 HTTPS가 반드시 적용되어 있어야 한다는 것은 아마 알고 있을 것이다.
특히나 SSO는 인증과 관련된 데이터를 주고 받는 일이기 때문에 반드시 HTTPS가 정상적으로 적용되어 있어야 한다.
실제로 HTTPS가 잘 못 적용되어 있을 경우에는 Single Sign On(단일 로그인) 은 문제 없이 테스트가 되었지만,
Single Sign Out(단인 로그아웃)은 제대로 동작하지 않았다.
현재 로그인 페이지에서는 로그인이 불가능하다.
너무 당연하게도 ID가 없기 때문이다.
다음 장에서는 HTTPS를 적용하는 방법과 테스트를 위한 계정을 만들고, 로그인 해보도록 하겠다.