개요
RH-SSO란 Redhat에서 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(권한)
마이데이터에서는 payload에 scope 라는 항목을 두어 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를 통해 빠르고 쉽게 구축할 수 있다.
설정
Realm
rhsso는 realm 단위로 이루어져있다. 좌측상단 master 문구에 마우스를 올리면 아래버튼이 보인다.
필자는 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 방식에 대해 자세히 나눠보겠다.
'엔지니어링 > 인증' 카테고리의 다른 글
[Rhsso] Api 로 클라이언트(자격증명) 생성하기 (0) | 2022.09.28 |
---|---|
[MTLS] Mutual TLS 상호인증 (12) | 2022.09.10 |
[RHSSO] Authorization Code 방식 (0) | 2022.09.06 |
[RHSSO] 리프래시 토큰 보관 (0) | 2022.09.06 |