반응형

개요

RH-SSORedhat에서 2014년에 출시한 keycloak의 상용버전이다.

웹 애플리케이션 및 Restful 웹 서비스를 위한 SingleSignOn 솔루션이며,

쉬운 설정으로 안전한 보안 관리를 할 수 있다.

 

작년에 마이데이터 제공자측 프로젝트를 수행하였는데, 이때 rhsso를 사용했었다.

레드헷 OCP(Openshift Conatiner Platform)에서 오퍼레이터방식으로 여러 솔루션들을 제공하는데,

API Gateway 솔루션인 3scale과 함께 OIDC(OpenId Connect)인증을 담당했다.

 

JWT

마이데이터 사업에선 oauth 2.0 을 준용하는 토큰을 사용해야하는데 이때 JWT(Json Web Token)으 표준 규격으로 지정하였다.

JWT 토큰은 아래 구성으로 이루어져 있다.

- Header

- Payload

- Signature

 

Header 영역은 서명 알고리즘 및 토큰 유형을 명시하고,

payload 영역은 발급자, 유효기간 등 발급정보를 저장하고,

Signature 영역은 전자서명을 통해 위변조 여부를 확인한다.

 

참고로 마이데이터는

- access token 90days

- refresh token 365days

으로 토큰 생명주기(lifecycle)를 정하였다.

 

Scope(권한)

마이데이터에서는 payloadscope 라는 항목을 두어 api 접근권한여부를 체크한다.

사용되는 scope는 카드 업권일 경우 아래와 같다.(자세한 사항은 마이데이터 종합포털에 다 있다)

API 종류 scope
전송요구 내역, 카드 목록조회 card.list
카드 정보 card.card
선불카드 정보 card.prepaid
포인트 정보 card.point
청구 및 결제 정보 card.bill
대출상품정보 card.loan

 

마이데이터 인증방식

oauth 2.0 을 준용하여 아래 3가지 인증방식을 사용한다.

- Authorization Code

- Client Credentials

- Password

 

Authorization Code

이 인증방식은 인가코드를 통해 접근토큰을 발행받는 방식이다. 인가코드를 전달할 callback URL 이 필요하다. 마이데이터에서 API 이용을 위해 개별인증 시 사용되며 제공자서버가 사업자callback 서버로 인가코드를 던진다.

 

Client Credentials

이 인증방식은 client_id client_secret 으로 토큰을 받아오는 방식으로 client_secret 이 노출되면 안된다. 마이데이터에서 종합포털과 각 기관들의 지원API 통신간에 사용된다.

 

Password

이 인증방식은 sso에 등록된 username/password 로 토큰을 발행하는 방식으로 마이데이터에서는 통합인증 시 고객CI값과 전자서명내용을 통해 사용된다.

 

설치

rhsso 설치는 ocp operator를 통해 빠르고 쉽게 구축할 수 있다.

rhsso login 화면
rhsso index page

설정

Realm

rhsso는 realm 단위로 이루어져있다. 좌측상단 master 문구에 마우스를 올리면 아래버튼이 보인다.

add realm

필자는 mydata 이름의 realm을 생성하였다.

 

realm에서는 발행하는 토큰정보를 세팅할 수 있다.

마이데이터 셋팅처럼 refresh token 365일, access token 90일로 세팅

SCOPE

토큰발행시 권한을 부여할 scope를 만들어주자

위에서 설명했던 업권별 권한인데, 만약 카드업권일 시 card.list 등과 같은 항목이다.

client scopes>create

name에 card.list 를입력한다.

위와 같은 방법으로 여러개 생성해주자.

다음은 해당 realm에 허용할 scopes를 지정해야한다.

default client scopes를 눌러 보면 토큰에 기본적으로 넣을 scope과, 선택적으로 넣어줄 scope를 지정할 수 있다.

위에서 만든 card.* 을 선택적 권한부여에 assign 해주자.

 

Client

이제 client 를 생성해서 접근할 수 있는 방법을 세팅할 것이다.

좌측 메뉴 clients 로 들어가 create.

필자는 meta 라는 이름의 client id 를 생성했다.

생성이 되었으면 어떠한 방식을 사용할 건지 세팅을 해주자.

- Access Type : confidential

- Standard Flow Enabled : ON (Authorization Code 방식사용)

- Direct Access Grants Enabled : ON (password 방식사용) 

- Service Accounts Enabled : ON (client_credentials 방식사용)

- Valid Redirect URIs : 콜백URL 입력

입력을 마쳤으면 꼭 마우스휠을 내려 save 버튼을 꼭 눌러주어야한다!

토큰발행(Postman)

이제 세팅된 정보로 토큰을 발행해보자.

Postman 을 열어 Client_credentials 방식으로 호출해보았다.

그리고 발행된 토큰을 decode 해보면 만료일, 발급자, scope 등 정보를 확인할 수 있다.

 

다음 포스팅에선 Authorization Code 방식에 대해 자세히 나눠보겠다.

반응형
복사했습니다!