개발놀이터

CAS 인증서버 구축하기 (1) : CAS 서버 가져오기 본문

Spring/Spring Security

CAS 인증서버 구축하기 (1) : CAS 서버 가져오기

마늘냄새폴폴 2024. 2. 25. 22:08

CAS의 Overview를 보고 오시는 것을 추천드립니다!

 

https://coding-review.tistory.com/475

 

SSO (부제 : Spring Security CAS)

서로 물리적으로 분리된 서버끼리 사용자의 로그인 상태를 유지하고 싶으면 어떻게 해야할까요? 저는 이 문제 상황에서 제일 먼저 떠오른 것이 상태저장 데이터베이스를 중간에 두는 것이었습

coding-review.tistory.com

 

 

포스팅에 들어가기 앞서 Docker와 Docker-Compose에 대한 내용은 포스팅과 어울리지않아 빼도록 하겠습니다. Docker와 관련된 내용은 아래의 링크를 확인해주세요! 또한 AWS에 대한 내용도 생략하도록 하겠습니다. 

 

https://coding-review.tistory.com/category/%EB%B0%B0%ED%8F%AC/docker

 

'배포/docker' 카테고리의 글 목록

 

coding-review.tistory.com

https://coding-review.tistory.com/category/%EB%B0%B0%ED%8F%AC/docker

 

'배포/docker' 카테고리의 글 목록

 

coding-review.tistory.com

 

 

먼저 CAS overlay template의 Git을 풀링해야합니다. 현재 CAS는 7.0버전까지 릴리즈되었지만 저는 조금 더 안정적인 버전인 6.6버전을 선택했습니다. 

 

$ git clone -b 6.6 https://github.com/apereo/cas-overlay-template.git cas-server

 

 

깃을 클론하고 나면 이런 모습입니다. 여기서 주요하게 봐야할 부분은 Dockerfile, docker-compose.yml, etc, build.gradle입니다. 사실 src/main/resources에 etc파일을 둬야하는지는 잘 모르겠습니다. 하지만 중요한건 위의 네개가 확실합니다. 

 

1. build.gradle에 의존성 추가하기

 

build.gradle에 dependencies 부분에 해당 세줄을 추가해줍니다. 

 

간단하게 설명하자면 json기반 설정파일을 읽기위한 json-servier-registry이고 CAS서버에서 데이터베이스에 접근하기위해 JDBC와 JDBC-Driver를 의존하도록 합니다. 

 

2. docker-compose.yml 파일에서 etc 폴더 바인딩하기

 

volumes에 현재 존재하는 /etc/cas 폴더를 컨테이너 내부의 /etc/cas로 바인딩해주는 작업이 필요합니다. 해당 docker-copose 파일을 실행하게 되면 같은 디렉토리에 있는 Dockerfile을 기반으로 빌드를 해주고 이미지를 생성합니다. 

 

그리고 해당 이미지를 기반으로 컨테이너를 생성해주는 작업을 거치게됩니다. 

 

3. saml 폴더와 services 폴더 생성하기

$ sudo docker-compose -f ./docker-compose.yml up -d

 

실행하면 다음과 같은 에러가 뜰 것입니다. 

 

 

해당 에러는 읽어보시면 대충 감이 잡히실겁니다. /etc/cas/saml 폴더가 없다는 것입니다. 

 

우리는 어차피 docker-compose.yml을 이용해 바인딩하기 때문에 프로젝트 내부에 직접 만들어주기만 하면 됩니다. 

 

$ cd /etc/cas

$ mkdir saml

 

그리고 다시 docker-compose를 실행해줍니다. 

 

그럼 또 이와같은 에러가 발생합니다. 

 

 

이역시 services 폴더가 없어서 그런것입니다. 만들어주도록 합시다. 

 

$ mkdir services

 

 

자 이제 CAS 서버에 HTTPS를 적용시키도록 합시다. CAS는 인증정보가 티켓형태로 이동하기 때문에 TLS/SSL 통신이 필수적입니다. 

 

다음 포스팅에서 자세히 알아보도록 하죠!