목록Spring/Spring Security (11)
개발놀이터
왜 뜬금없이 CAS 서버의 인증정책에 대해서 알아보냐... 제가 지금 문제 상황에 놓여있기 때문입니다. 이를 위해 공식문서를 얼마나 뒤져봤는지 아주 눈알이 빠지기 직전입니다. 우선 제가 이 문제 상황에 빠지게 된 경위에 대해서 설명드리겠습니다. CAS 공식문서엔 다음과 같이 나와있습니다. https://apereo.github.io/cas/6.6.x/authentication/Database-Authentication.html CAS - Database AuthenticationThis property controls the maximum lifetime of a connection in the pool. When a connection reaches this timeout, even if rec..
저번 포스팅에선 SSLHandshakeException이 발생했었습니다. 이 문제를 해결하기 위해서는 EC2 인스턴스의 SSL 설정을 해줘야합니다. 보통 WAS 서버에 HTTPS를 적용하는 방법은 NginX나 Apache같은 웹서버에 SSL 인증서를 등록하여 해결할 수 있습니다. 저는 AWS ACM 인증서를 가지고 있었기 때문에 AWS ALB에 ACM을 연결하여 HTTPS 설정을 할 수 있었지만 이참에 회사에서 사용하는 NginX에 대해 공부하고자 NginX에 SSL 설정을 하는 방법을 강구했습니다. 네... 결론만 말하자면 ACM을 이용해서 SSL을 설정하는 것을 불가능합니다. 우선 NginX에 SSL 설정을 위해서는 다음과 같은 설정이 필수적으로 필요합니다. server { listen 443 ssl..
클라이언트를 개발하기 전에 한가지 해야할 일이 있습니다. 바로 CAS 인증 서버에 우리가 사용할 서비스를 등록해줘야한다는 것이죠. 우리가 첫번째 시간에 만들었던 services 폴더 기억하시나요? 그곳은 우리가 생성할 서비스들을 관리하는 폴더입니다. 우리는 첫번째 시간에 의존성도 추가했는데 그때 json 기반 registry를 기억하실겁니다. 그것을 이용해 서비스를 json 파일로 등록할 수 있습니다. 프로젝트/etc/cas/services 로 가서 파일을 하나 만들어줍니다. $ vim casSecuredApp-19991.json 자 간단하게 설명드리자면 @class는 Regex 즉 정규표현식을 이용해 서비스를 등록하는 레지스트리를 만들겠다는 뜻입니다. 때문에 serviceId에 맨처음 " ^ " 이것을..
이제 로그인을 하기 위해서 사용자가 있어야겠죠? 가장 간단한 방법은 static한 사용자를 만들면 됩니다. 그냥 하드코딩으로 때려박는거죠. 하지만 이 방법은 생략하도록 하겠습니다. 우리가 본질적으로 원하는 것은 데이터베이스에 존재하는 사용자를 이용해서 로그인을 진행하는 것이니까요. static한 사용자 인증을 패스하고 바로 데이터베이스 사용자를 등록해보도록 하겠습니다. 일단 CAS 서버를 띄웠으니 데이터베이스를 위한 서버를 하나 더 띄우겠습니다. 그곳에서 docker, docker-compose을 내려받아주고 Docker를 이용해 MySQL을 띄웁니다. MySQL 사용자를 만들어주고 외부 연결까지 마치고 나면 준비 끝입니다. 너무 두루뭉술하게 넘어가서 왜이렇게 금방금방 넘어가? 하신다면 아래의 링크를 통..
이전 포스팅과 이어집니다. 바로 HTTPS를 위해 thekeystore를 만들어주도록 하죠. 우리는 먼저 /etc/cas 폴더로 이동해야합니다. 이동해주시구요. 이제 thekeystore를 만들어봅시다. $ keytool -genkey -keyalg RSA -alias thekeystore -keystore thekeystore -storepass changeit -validity 360 -keysize 2048 하지만 이렇게 쓰면 에러가 날겁니다. 우리가 아직 openjdk를 설치하지 않았거든요 ㅎㅎ.. CAS overlay template은 최신 버전인 7.0이 JDK 21을 사용하고 6.6버전까지는 JDK 11을 사용합니다. 때문에 저희는 JDK 11을 설치해주도록 합시다. $ sudo apt-ge..
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/categor..
서로 물리적으로 분리된 서버끼리 사용자의 로그인 상태를 유지하고 싶으면 어떻게 해야할까요? 저는 이 문제 상황에서 제일 먼저 떠오른 것이 상태저장 데이터베이스를 중간에 두는 것이었습니다. 사용자가 A서버에 로그인하면 쿠키에 간단한 값을 저장합니다. 예를 들어서 회원의 인덱스를 저장한다고 해보죠 그 값을 1이라고 가정하겠습니다. 그리고 동시에 Redis와 같은 캐시, 세션 저장소에 1이라는 값을 씁니다. 만약 B서버에 사용자가 접근하면 쿠키 값을 읽고 회원 인덱스가 존재하니 Redis에 해당 값을 조회해봅니다. 그리고 존재하기 때문에 MySQL과 같은 RDBMS에서 회원을 조회하고 그 값을 토대로 Spring Security에서 제공해주는 SecurityContextHolder에 Authentication..
https://coding-review.tistory.com/384 스프링 시큐리티 + JWT 인증 레이어 추가하기 (3) : 주요클래스 (JwtService와 Controller) https://coding-review.tistory.com/383 스프링 시큐리티 + JWT 인증 레이어 추가하기 (2) : 주요 클래스 https://coding-review.tistory.com/382 스프링 시큐리티 + JWT 인증 레이어 추가하기 (1) : 개요 이번 포스팅에선 스 coding-review.tistory.com 이전 포스팅과 이어집니다. package com.hello.capston.oauth; import com.hello.capston.jwt.JwtAuthenticationFilter; impor..
https://coding-review.tistory.com/382 스프링 시큐리티 + JWT 인증 레이어 추가하기 (1) : 개요 이번 포스팅에선 스프링 시큐리티에 JWT 인증 레이어를 추가하는 방법에 대해서 소개해드릴까 합니다. 제가 이 프로젝트를 개발하면서 했던 고민들, 마냥 만사형통하지 않았던 험난한 과정들, coding-review.tistory.com 이 포스팅은 이전 포스팅과 내용이 이어집니다. 먼저 JwtTokenProvider입니다. 이 클래스가 하는 역할은 JWT 토큰을 발급하는 과정과 Authentication 객체를 이용해 Access Token을 재발급하는 역할, Access Token으로 Authentication 객체를 반환받는 과정, 토큰을 검증하는 과정을 담고 있습니다. p..
이번 포스팅에선 스프링 시큐리티에 JWT 인증 레이어를 추가하는 방법에 대해서 소개해드릴까 합니다. 제가 이 프로젝트를 개발하면서 했던 고민들, 마냥 만사형통하지 않았던 험난한 과정들, 결국 내가 이 프로젝트를 통해 얻은 것들, 앞으로의 계획등은 아래의 링크에 자세히 기술되어있으니 참고해주시면 좋겠습니다. https://coding-review.tistory.com/381 온라인 쇼핑몰 ver.2 (3) : JWT 토큰으로 인증 레이어 추가하기 기존 프로젝트에선 스프링 시큐리티의 인증 + 세션 + Redis 이렇게 세 단계가 존재했습니다. 이번 개선으로는 JWT토큰을 도입해 인증에 새로운 레이어를 추가하는 것입니다. 하지만 따지고 보면 스 coding-review.tistory.com 아마 두개 내지 세..