Monolithic Architecture에서 Micro Service Architecture까지는 아니더라도 많은 부분이 API로 분리가 되고 이에 대한 인증의 필요성이 생겼다. Spring Security와 JWT를 이용하면 이런 API 서버간의 인증을 간단하게 할 수 있다. 프로젝트 구조 프로젝트의 전체 구조는 위와 같다. 일반적인 maven 기반의 springboot 프로젝트의 구조이다. 구현되어 있는 파일들을 순서대로 보며 알아보자. 프로젝트 설정 (중요한 부분이라고 하기 전까지는 가볍게 읽자) pom.xml org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-securi..
지난 시간에는 KeyCloak을 이용해서 같은 Realm에 있는 Client간의 SSO 를 구성을 해 보았다. 이것은 각 서비스들을 SSO로 묶어서 한번에 관리하는것이라면 이번에 다룰 Access Token을 발급받아서 사용하는것은 구성된 Realm의 Client를 내부, 외부에서 직접 접근하고자 할때 이용이 된다. 프로젝트 실습의 틀은 기존에 구성을 한것을 기반으로 한다. 일단 설명에 앞서 왜 Access Token을 사용하는지에 대해 잘 설명된 그림인것 같아서 퍼왔다. 요즘은 참 회사들마다 경쟁적으로 '우리가 이렇게 뛰어난 기술을 가지고 있소!' 하고 활발하게 블로그를 운영하는데 개인적으로 참 부럽다. KeyCloak REST API 이용해서 JWT 발급받기 기존에 KeyCloak에서 만들어 놓은 o..
지난 시간에는 KeyCloak을 어떻게 설치를 하는지 알아보았다. 이제는 이 설치된 KeyCloak을 어떻게 사용하는지 기존에 사용하고 있던 Springboot로 구현된 Application과 연동을 통해 알아보도록 하겠다. KeyCloak 설정 - Realm 생성 일단 설치된 KeyCloak의 Admin Console로 들어가보자. 좌측 맨 위의 Master라는 부분에 마우스를 가져다대면 Add realm 이라는것이 나타날 것이다. realm은 인증, 인가의 범위라고 보면 된다. 예를 들자면 A Portal에서 우리가 카페에서 로그인을 해도 메일도 같은 realm 안에 있기 때문에 별도의 로그인 없이 SSO를 통해 이용을 할 수 있는것이다. 이처럼 같은 realm안에서 한번 로그인을 하면 그 realm..
KeyCloak을 설치하면 같이 WildFly Admin Console도 사용할 수 있다. WildFly Admin Console은 KeyCloak과 같이 사용되므로 기본적으로 KeyCloak war를 deploy하고 있다. 바로 실행을 해보자. KeyCloak이 설치된곳의 bin디렉토리 하위의 standalone.bat 파일을 실행한다. KeyCloak이 실행되면서 WildFly Admin Console도 같이 실행이 된다. 마지막에 나오는 admin console은 WildFly의 admin console이고 http://127.0.0.1:9990 로 접근이 가능하다고 명시되어 있다. WildFly Admin Colsole Login 및 계정초기화 KeyCloak을 실행했을때 로그로 나온 http:/..
KeyCloak은 기본포트를 8080으로 사용하고 있다. 센스가 없다. 바꿔보도록 하자. 간단하게 바꿀수 있다. 각 운영체제의 실행파일 뒤에 -Djboss.socket.binding.port-offset=100 옵션을 넣어주면 된다. 여기서 100은 포트 offset이다. 즉 기본이 8080이고 offset을 100이라고 입력을 하면 8180으로 설정하겠다는 것이다. linux : ./standalone.sh -Djboss.socket.binding.port-offset=100 windows : standalone.bat -Djboss.socket.binding.port-offset=100 이렇게 실행을 하면 된다. 매번 이렇게 입력하는게 귀찮다면 실행파일 안에서 이 실행옵션을 추가해주면 된다. 예를들면..
KeyCloak은 또 무엇인가? MSA를 준비하면서 정말 많은 신문물을 접하게 된다. 원래 꿈은 수학선생님이나 윤리선생님같이 불변의 진리를 한번 습득하고 그것으로 평생 돈벌면서 살고 싶었는데.. 정반대의 성격인 IT쪽으로 진로를 잡게 되어 아주 다이나믹하게 새로운 기술을 끊임없이 공부하고 있다. 나중에 치매는 안걸릴것 같다. 다시.. KeyCloak은 Red Hat이 만들었고 인증(Authentification)과 인가(Authorization)을 쉽게 해주고 SSO(Single-Sign-On)을 가능하게 해주는 오픈소스(Apache License 2.0)이다. 주요 기능은 다음과 같다. 출처 : en.wikipedia.org/wiki/Keycloak 사용자 등록 소셜 로그인 동일한 Realm에 속한 모..
application을 구현하다보면 jsp에서 분기처리를 해서 권한에 따라서 다른걸 보여줘야 하는 상황이 발생한다. 이럴때 기존의 JSTL 을 사용하여 if 문으로 분기처리를 할수도 있지만 객체를 받아와서 그걸 풀고 그에 따라 분기처리를 하는 부분은 어찌보면 복잡하게 느껴질수도 있다. 이런 상황일때 spring security 를 사용하여 권한관리를 하고 있다면 간단하게 구현을 할 수 있다. AuthenticationProvider의 구현체에서 role을 정의하고 UsernamePasswordAuthenticationToken에 정의된 role을 집어 넣는 과정이 모두 끝났다면 spring security tag library를 통해 어디서든 role을 사용할 준비는 끝이 났다. Spring Securi..
springboot로 전환함에따라 web.xml에서 기술을 하던 Spring Security 관련 필터들에 대한 설정을 할 필요가 없어졌다. 그럼 나머지 필터들은 어떻게 등록을 해야하나? web.xml CustomFilter sample.CustomFilter CustomFilter /* springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain /* 기존의 모습은 이랬다. CustomFilter라는 놈은 request로부터 IP를 가지고 오는 역할을 한다고 가정한다. CustomFilter.java public class CustomFilter implements Filter..