개발/[Spring] 인증

[SSO] CAS 인증서버 (3) - 샘플 프로젝트 : 사용자 계정 static 인증

sheriff 2019. 4. 29. 16:57

지금까지 서버를 실행하고 SSL을 적용하여 경고 문구를 삭제 하였다.

 

이제 남은일은 로그인 하는 것이다.

 

물론 클라이언트를 통해서 로그인을 해야 진정한 SSO 라고 할 수 있지만, 우선 서버에서 로그인을 해보자.

 

서버에 로그인이 되고나면 그때부터 클라이언트 Application을 작성하도록 하겠다.

 

테스트 계정

application.properties에 다음과 같이 설정해보자.

놀랍게도 테스트 계정이 생성되었다.

ID : casuser

PW : Mellon

의 계정이 생성 되었다!!

 

서버를 실행시켜 보도록 하자.

새로운 경고 문구가 등장했다.

해석하면 "기본적인 인증을 위해 CAS에서는 정적 사용자 리스트를 허용 하지만 데모 프로젝트에서만 사용해라!!!"

이다.

 

저 경고 문구는 조금 뒤에 없애도록 하고 우선은 casuser로 로그인 해보자.

로그인이 성공하였다!!

 

하지만 아무 기능이 없다. 로그인만 되었다.

 

어떻게 로그인이 된 것일까??

 

테스트 계정이니까 그냥 되겠지~

뭔지 모르겠지만 application.properties 파일에 저런 형식으로 계정만 추가하면 되는구나~~

라고 하고 넘어가기엔 뭔가 찝찝하다.

 

우리가 테스트 계정을 사용하기 전에 프로젝트를 수정한 곳은 application.properties 파일 딱 하나이다.

cas.authn.accept.users=casuser::Mellon

이렇게 입력하면 ID가 casuser 이고 PW가 Mellon 인 계정이 생성된다는 것은 알았는데, 어떻게 동작하는지 궁금하다.

아니 궁금해야 한다.

이 내용은 앞으로

  • Database를 사용한 사용자 계정 추가
  • 사용자 계정 쿼리 수정
  • 사용자 정의 설정 

등에 필요한 내용이므로 잘 알아두도록 하자.

 

결론부터 말하자면 저 계정을 등록하는 일을 하는 것은 바로 아래 나오는 이녀석이다.

 

CasCoreAuthenticationHandlersConfiguration

먼저 CasCoreAuthenticationhandlersConfiguration의 클래스를 보자.

1. 이미지에 나오는 것 처럼 dependency로 추가 되어 있는 것을 알 수 있다.

어디서 추가 되었는지 아래 이미지를 보면서 확인해보자.

Intellij Plugin 중에 Dependency Analyzer 를 설치 하면 위 이미지처럼 의존성을 확인할 수 있다.

core-authentication 의존성은 여러곳에서 추가를 해놨기 때문에 현재 진행중인 CAS 인증서버에서 추가가 되어 있는 것이다.

저렇게 여러곳에서 의존성을 추가해도 문제가 되지 않는 것은 maven에서 정해놓은 규칙인데 궁금하면 댓글로 남기겠다.

 

2. 의존성은 추가가 되었다는 것은 알겠는데, 어떻게 해서 저 클래스가 설정파일로 인식이 되고 사용이 되는것일까??

아래 이미지를 보면서 확인해보자.

cas-server-core-authentication 프로젝트의 META-INF 디렉토리에 spring.factories 파일을 보자.

이곳에서 Spring boot 자동설정일 추가하고 있으며, 해당 클래스들 역시 cas-server-core-authentication 프로젝트에 존재한다.

따라서 해당 항목들이 설정으로 추가가 되고, 실제로 사용이 되는 것이다.

또한, 추가적인 설정 파일이 필요하다면 resources/META-INF 디렉토리 하위에 spring.factories 파일을 추가하여 사용 가능하다.

spring.factories에 대한 자세한 내용은 구글을 참조하길 바란다.

 

3. CasConfigurationProperties 클래스는 바로 application.properties 에서 추가했던 계정 내용을 가지고 있다.

빨간색 박스에 대해 모르겠으면 아래 링크를 참고하자.

https://www.baeldung.com/configuration-properties-in-spring-boot

 

Guide to @ConfigurationProperties in Spring Boot | Baeldung

A quick and practical guide to @ConfigurationProperties annotation in Spring Boot.

www.baeldung.com

간략하게 설명하면 application.properties(또는 application.yml) 파일에 설정값을 클래스 객체화 하여 사용할 수 있도록 하는 방식이다.

우리가 application.properties 파일에 cas.* 로 설정을 해서 사용하는 이유이다.

그리고 AuthenticationProperties 는 authn 이라는 이름의 필드로 되어 있다. 

이 또한 우리가 application.properties 파일에 cas.authn.* 로 사용 가능했던 것이다.

 

즉, cas.authn.accept.users 라고 우리가 설정한 값은 CasConfigurationProperties 파일에 객체화 되어있으며, 그 객체는 Bean으로 등록되어 @Autowired로 사용 가능한 것이다.

 

cas.authn.accept.users 의 클래스 구조

  • CasConfigurationProperties : cas
    • AuthenticationProperties : authn
      • AcceptAuthenticationProperties : accept
        • String : users

 

지금까지 샘플 프로젝트 인증서버가 완료 되었다.

 

솔직히 지금 만들어 놓은 인증서버를 실제로 사용하는 것은 불가능하다.

 

왜냐하면 계정을 프로젝트에 입력해서 사용하는 경우는 없기 때문이다.

따라서 Database를 통해 인증을 할 수 있도록 구현해야 한다.

 

다음은 Database에 있는 계정 정보를 통해 인증하는 방법에 대해서 알아 보도록 하자.