개발/[Spring] 인증

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

sheriff 2019. 4. 30. 19:00

이전글 에서는 테스트를 위한 정적 사용자 계정을 추가해서 로그인까지 해봤다.

이어서 클라이언트 Application을 만들고 SSO 기본인증 테스트를 해도 되지만 그전에 해야할 일이 있다.

우선 로그인 화면에 정적 계정 사용에 대한 경고 문구가 뜨는 것이 보기 싫고, 무엇보다 사용자를 Database가 아닌 프로젝트에 넣어두는 것이 마음에 들지 않기 때문에 최소한 Database에서 계정을 찾아 인증하는 부분까지는 완성하고 나서 클라이언트 Application을 시작 하도록 하겠다.

 

인증 방식에는 여러가지가 있는데 나는 이중에서 Database Authentication의 Query를 사용하였다.

 

사용자 계정 Database

여러가지 Database가 있겠지만, 나는 mysql을 설치해서 사용했다.

PC에 mysql을 설치하고 아래 이미지처럼 사용자 table을 생성하고 테스트용 데이터를 저장하였다.

password 는 bCrypt로 암호화 하여 저장하였다.

Database에 계정이 생겼으니 이제 application.properties 파일에 설정 해주면 된다.

 

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

cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/sso?autoReconnect=true&allowMultiQueries=true&serverTimezone=UTC
cas.authn.jdbc.query[0].sql=select id, name, password from sso.user where id = ?;
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=1234
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].passwordEncoder.type=BCRYPT

먼저 casuser 라는 static 계정은 주석처리를 하였다.

로그인 화면에서 static 계정에 대한 경고 문구가 사라지게 하기 위함이다.

 

cas.authn.jdbc.query[0].passwordEncoder.type=BCRYPT

위 코드는 passwordEncoder를 설정하는 부분인데, 위에서 설명했듯이 password 를 bCrypt로 암호화 하여 저장했기 때문에 passwordEncoder 타입을 bCrypt로 설정 해줘야만 인증이 성공한다.

 

이전 글에서 설명했던 것 처럼. cas.authn.jdbc.query* 로 지정해서 사용 가능한 이유는 CasConfigurationProperties 클래스의 구조대로 입력했기 때문이다.

 

그리고 빌드를 다시 하고 서버를 다시 실행해보자.

기존에 확인됐던 static 계정에 대한 경고 문구가 사라졌다.

 

그리고 database에 저장한 계정으로 로그인해보자.

로그인이 성공적으로 완료 되었다.

 

다음 글에서는 jdbc인증이 어떤식으로 등록되었는지 확인해보자.