뭔가 괜찮은 것 같으면서도 애매한 오픈소스 프로젝트…
복잡함 때문에 몇 번 사용하려다가 포기 했는데 이번에 인증서비스를 만들면서 다시 사용하려고 한다.
jasig CAS일 때 보고 apereo로 바뀐거 보고… 세번째 정도인 것 같다.
이전에는 기능을 축소해서 직접 개발했었는데
복합인증을 구현하려면 쓰는게 나을 것 같다
경쟁제품
유료 무료 다 포함해서 대강
무료
- Keycloak
- CAS
- JOSSO
- LemonLDAP
- Shibbolet ldP
- OpenAM
- Gluu
유료
기타
- https://gist.github.com/bmaupin/6878fae9abcb63ef43f8ac9b9de8fafd
- https://www.gluu.org/blog/gluu-versus-keycloak/
조금씩 특성이 다르긴 하다.
CAS 특징
- 프로젝트가 굉장히 잘게 나눠져 있다.
모듈형으로 가져다가 사용하라는 것 같은데…
의존성이 복잡해서 그렇게 쓸 수가 없다
도큐먼트는 사용법에 관한 것만 있고 - 설치형으로 사용하려고 보면…
cas-overlay-template 라는게 있기는 한데
기본으로 지원되는 부분을 제외하면 설치형으로 쓸 수 있는건 아니고 거의 소스레벨에서 수정해서 써야만 한다. - 스프링을 매우 잘 쓴다. 나도 스프링 꽤 써봤다고 생각했는데 처음보는게 조금씩 보인다
- Springboot autoconfigure 사이의 엄청난 충돌이 발생
실행형으로 만들게 아니라면 그냥 없애야 하지 않을까
어쨌든 소스레벨에서 분석해서 사용해야 하고
필요한 부분만 뽑아쓰긴 힘들어 보인다
설치방법
소스
docker 컨테이너를 제공 해 주면 좋겠는데…. 커스텀을 해서 쓰라는 철학을 가지고 있는 애들이라 그런지 통짜로 제공 해 주지는 않는다.
그래도 쓰기 편하게 템플릿이 제공된다.
https://github.com/apereo/cas-overlay-template
이런것도 제공 해 주고 많이 발전했다.
아래 순서대로 치다보면 뭐가 뭔지 알 수 있을거다. README.md와 비슷하지만 약간 다르다.
git clone https://github.com/apereo/cas-overlay-template cas-server
cd cas-server
./gradlew clean build
./gradlew downloadShell runShell
./gradlew allDependencies
설정파일 수정
docker-compose 실행테스트를 해야되서 설정파일을 수정 해 준다
# /etc/cas/config/cas.properties
logging.config=file:/etc/cas/config/log4j2.xml
server.port=8080
server.ssl.enabled=false
실행
docker-compose up
화면수정
수정가능 항목의 목록을 얻는 명령어
./gradlew listTemplateViews
템플릿을 소스코드로 가져오는 명령어
./gradlew getResource -PresourceName=[여기뭐가들어갈까]
기능수정
이쪽 철학이 그런가보다. 디비를 직접 관리하거나 하지 않는다.
그럴거면 jpa 연동하기 쉽게 인터페이스를 달아주던가 하면 좋을텐데 그런건 또 안해놨다.
트리거 설정
각 기능이 실행될 때 마다 앞뒤로 트리거를 달 수 있다.
인터셉터
groovy
아직 안해봐서잘 모르겠지만 할 수 있다.
배포
리버스 프록시 사용
요즘 리버스 프록시 안쓰는 경우가 더 드물지 않을까
cas.server.name=https://domain.tld
cas.server.prefix=/
server.port=8080
server.ssl.enabled=false
cas.server.http.enabled=false
cas.server.httpProxy.enabled=true
cas.server.httpProxy.secure=true
cas.server.httpProxy.scheme=https
cas.server.httpProxy.protocol=HTTP/1.1
결론
overlay template 설치하려면 keycloak, gluu 등 다른 쉬운걸 쓰는게 나을것으로 보인다
인증방식은 어차피 다 표준프로토콜이 있어서 한두개 빼고는 다 비슷하게 제공된다
소스레벨에서 사용하려면 cas를 쓰는게 나을까… 그냥 만드는게 나을까
아직 시작단계라 정확하지는 않지만
이걸 쓰기보다는 필요한 부분 소스만 참고해서 따로 만들게 될 것 같다
REF
- https://apereo.github.io/2019/01/07/cas61-gettingstarted-overlay/
- https://apereo.github.io/cas/6.3.x/configuration/Configuration-Server-Management.html
- https://apereo.github.io/2018/01/05/cas-deployment-with-proxy/