티스토리 뷰
지난 시간에는 KeyCloak을 이용해서 같은 Realm에 있는 Client간의 SSO 를 구성을 해 보았다. 이것은 각 서비스들을 SSO로 묶어서 한번에 관리하는것이라면 이번에 다룰 Access Token을 발급받아서 사용하는것은 구성된 Realm의 Client를 내부, 외부에서 직접 접근하고자 할때 이용이 된다. 프로젝트 실습의 틀은 기존에 구성을 한것을 기반으로 한다.
일단 설명에 앞서 왜 Access Token을 사용하는지에 대해 잘 설명된 그림인것 같아서 퍼왔다. 요즘은 참 회사들마다 경쟁적으로 '우리가 이렇게 뛰어난 기술을 가지고 있소!' 하고 활발하게 블로그를 운영하는데 개인적으로 참 부럽다.
KeyCloak REST API 이용해서 JWT 발급받기
기존에 KeyCloak에서 만들어 놓은 oingapp1 에서 설정을 다음과 같이 변경을 하였다.
oingdaddy Realm > Client > oingapp1 > Settings 하단
Access Token의 시간을 설정할 수 있고 Direct Grant Flow를 설정을 해줘야 한다.
application에서 연동할때도 중요한 역할을 했던 Client의 Credentials이다. 이중 Secret Key를 잘 보관해 놓는다. 이정도 해놓았으면 KeyCloak에서 할수 있는 설정은 모두 했다.
POST요청을 날리기 위해 포스트맨이나 부메랑을 사용한다. 필자는 부메랑을 선호한다. 요청 URL은 다음과 같다.
http://localhost:8180/auth/realms/oingdaddy/protocol/openid-connect/token
여기에 HEADERS에는 Content-Type을 application/x-www-form-urlencoded 를 입력해주고
BODY에는 위와 같이 client_id, grant_type, client_secret, scope, username, password 등을 입력을 해준다.
다 입력을 하였으면 send!
그러면 위와 같은 응답이 온다. access_token 뿐만 아니라 refresh_token도 별다른 노력없이 얻을 수 있다. 이것들도 직접 구현하려면 꽤나 골머리 썩으며 고생을 해야하는데 이렇게 간단하게 얻을수 있다.
JWT가 정상적인지 한번 확인을 해본다. 아래 링크로 들어가서 access_token에 해당하는 값을 넣어보면 된다.
넣고 Decode를 해보니 JWT의 Body부에 값들이 모두 잘 들어가있다. JWT가 잘 생성이 되었다. 인증이 잘 되는지 테스트 해보자.
기존에 인증을 해야만 접근할수 있었던 http://localhost:8081/hello 라는 액션의 Header에 다음과 같이 추가를 해주자.
headers: {
'Authorization': 'Bearer' + access_token
}
부메랑에서는 아래와 같이 입력을 해준다. (Bearer Access_Token)
그러면 인증을 해야만 나왔던 http://localhost:8081/hello에 대한 응답을 받아볼 수 있을 것이다.
끝!
'Framework > Security' 카테고리의 다른 글
Spring Security CORS 설정하기 (0) | 2021.01.07 |
---|---|
Spring Security + JWT 인증 초간단 연동 예제 (10) | 2020.11.19 |
KeyCloak으로 Springboot App연동해서 간단하게 SSO 구축하기 (7) | 2020.11.09 |
KeyCloak WildFly Management 실행 및 기본사용법 (0) | 2020.11.04 |
KeyCloak 기본포트(8080) 다른 포트로 변경하기 (0) | 2020.11.04 |