본문
표준 API 기본 규격
1. 공통
1.1 API 관련 기술 표준
표준 연결 방식
HTTP을 기반으로 참여기관 간 안전한 통신을 위해 TLS기반 상호인증(이하 mTLS)을 전송 구간 암호화에 적용한다.
- mTLS (Mutual Transport Layer Security)
- 전송(Transport) 계층과 응용(Application) 계층 사이에서 종단 간 인증, 전송 데이터의 암호화, 무결성을 보장하는 표준 프로토콜
- API를 호출하는 클라이언트와 API 제공자 간 양방향 인증으로 신뢰성 있는 통신을 지원
- TLS 암호화 통신 버전은 1.3 이상 사용
TLS 1.2는 HEIST, DWOWN, FREAK, POODLE 공격 및 HeartBleed 취약점 등이 보고
- 표준API 가이드라인 상에 mTLS 예외로 표기된 경우를 제외하고 모든 연결은 mTLS를 적용
예) 정보수신자 서비스와 정보전송자가 직접 통신해야 하는 '개별인증 API'의 경우는 예외
SSL/TLS 인증서 적용
참여기관 간 상호인증, 암호화된 정보의 송·수신을 위해 인증기관(CA, Certificate Authority)으로부터 OV등급 또는 EV등급 SSL/TLS 인증서를 발급받아 적용한다.
- OV(Organization Validated) 등급 TLS 인증서
- 인증기관(CA)이 도메인 소유권과 조직의 실재 여부를 검증한 뒤 발급되는 인증서
- 와일드카드 도메인에 대한 인증서 발급이 가능 (예시: *.domain.com)
- EV(Extended Validation) 등급 TLS 인증서
- 도메인 소유권과 조직의 실재 여부, 법적 존재 및 운영 여부를 인증기관(CA)이 검증 후 발급하는 인증서
- 특정 단일 도메인에 대한 인증서 발급 가능 (예시: mydata.domain.com)
- 인증서 시리얼 번호에 사업자 번호 혹은 법인 번호를 명시하여 발급 가능
SSL/TLS 인증서 정보 배포
CA 인증서 및 참여기관별 인증서 정보는 마이데이터 플랫폼에서 제공하는 전송지원 API를 통해 수신할 수 있다.
- mTLS 통신을 위한 CA 인증서 목록은 CA 인증서 목록 조회 API (전송지원-004)를 통해 주기적으로 수신
- 서비스 연속성을 위해 각 참여기관은 TLS 인증서 유효기간을 관리하고, 인증서 갱신 시 마이데이터 플랫폼에 등록된 인증서 지문 정보 갱신 필요
- TLS인증서 갱신 순서
- 마이데이터 플랫폼에서는 인증서 지문 정보를 기관당 최대 세개 까지 등록
- 갱신 시 폐기된 인증서 지문 정보를 삭제하고 갱신된 인증서 정보 등록
- 각 참여기관은 기관정보 조회 API(전송지원-002)를 통해 매일 인증서 지문 정보를 갱신
- 1. [만료일 30일 전] 갱신된 TLS인증서 다운로드
- 2. [만료일 30일 전~10일 전] 마이데이터 플랫폼에 갱신된 TLS인증서 지문 정보 등록
- 3. [만료일 7일 전~만료일] 시스템에 실제 TLS 인증서 교체 작업 수행
- 4. [교체작업 이후] 갱신된 인증서로 통신 가능
SSL/TLS 인증서 검증
mTLS를 이용하는 API 호출 시 API제공자는 마이데이터 플랫폼에 등록된 인증서 지문 정보와 API 요청자로부터 전달받은 인증서의 지문 정보가 동일한지 확인한다.


[인증서 지문 정보 예]
데이터 표현 형식
API 요청·응답 메시지 형식은 JSON을 사용하며, 분야별·산업별로 사용하는 표현방식을 적용한 경우는 예외로 한다.
- JSON(JavaScript Object Notation)
- 속성·값(Key:Value)의 집합으로 이루어진 데이터 객체를 표현하기 위한 개방형 표준 메시지 형식
- 국제표준(ECMA-404)로 채택되어 있으며, 웹서비스에서의 사실상 표준 데이터 형식으로 사용됨
데이터 인코딩
메시지 전송을 위한 인코딩 방식는 UTF-8을 사용한다.
- UTF-8
- ASCII 코드를 확장하여 전 세계의 모든 문자코드를 표현할 수 있는 표준인코딩 방식으로써 범용성이 높아 호환성이 우수
- 웹 서비스 표준으로 ASCII와 호환되어 다양한 시스템에서 지원
데이터 길이
API규격 내 항목별 길이는 UTF-8 인코딩 시 byte 수를 의미하며, 그 외 특수문자는 유니코드 문자 테이블을 참고한다.
Character | Bytes |
---|---|
0~9 | 1 |
A~Z | 1 |
a-z | 1 |
한글 | 3 |
? | 1 |
/ | 1 |
~ | 1 |
Character | Bytes |
---|---|
= | 1 |
! | 1 |
- | 1 |
$ | 1 |
% | 1 |
^ | 1 |
¢ | 2 |
(‘마이데이터’ 각 3byte(한글) 총 15 bytes) + ('A' 1byte) + ('-' 1byte) + ('1' 1byte) = 총 18 bytes
명명 규칙
URI, 파라미터, JSON 메시지 속성(key) 명명법으로 스네이크 케이스 표기법을 사용한다.
- 스네이크 케이스(Snake Case) 표기법
- 모든 문자를 소문자로 표기하고 단어들 사이는 _(언더바)로 연결 (예시 : snake_case, is_active_member)
- 대소문자를 구분하지 않는 시스템에서도 일관되게 사용 가능
통화 코드
ISO4217 표준을 사용한다.
- ISO4217 표준 규격
- 국제표준화 기구(ISO)에서 제정한 통화 코드로 세 글자 알파벳으로 구성됨(예시 : 한국원화 KRW, 미국달러 USD)
메시지 교환 방식
API 요청·응답 교환방식은 REST를 사용한다.
- REST(REpresentational State Transfer)
- HTTP 기반으로 데이터를 전달하는 프레임워크로써, URI로 정보의 자원을 표현하고 자원에 대한 행위를 HTTP 메소드(GET, POST 등)로 표현
NULL값 처리
NULL은 값이 존재하지 않음을 의미하는 표현이나, API 요청·응답 시에는 어떠한 경우라도 NULL의 사용을 금한다.
- API 명세의 ‘필수’ 항목이 'Y'인 경우, 회신할 값이 없더라도 임의로 공백(“”)으로 응답하지 않으며 해당 항목의 처리에 대해서는 중계 전문기관 등에 문의 필요
실제 응답해야 하는 정보가 공백("")인 경우 제외
- API 명세의 '필수' 항목이 'N'인 경우, 회신할 값이 없으면 해당 항목은 응답 메시지에서 제외(JSON 메시지에서 해당 속성(Key)을 포함하지 않음)
URI 계층 구조
분야별 정보 전송 대상 정보를 고유하게 식별하고, 위치를 표현할 수 있도록 URI를 설계한다.
분류 | URI 계층 구조 |
---|---|
정보요청 API | <base path> / <version> / <industry> / <resource> |
전송지원 API | <base path> / <version> / <resource> |
전송요구 API | <base path> / oauth / 2.0 / [authorize | token | revoke] |
- <base path> 정보전송자의 API 서버 도메인 주소로서 마이데이터 플랫폼에 기관정보 속성으로 등록한 정보와 일치해야 함
- <version> API 규격 버전정보로 'v(소문자)' + '숫자'로 표기
예시 : v1, v2 등
- <industry> 정보전송 분야를 URI로 구분하기 위한 값이며, 정보전송자 기관코드별 <industry> 값은 1:1 관계로 정보전송 분야가 복수인 경우 마이데이터 플랫폼으로부터 분야별 기관코드가 발급
통신분야 : comms, 유통분야 : commerce 등
- <resource> 정보전송자가 보유하고 있는 정보를 유형별로 분류하는 URI 식별정보
구매내역 : order, 지불내역 : payment
HTTP 헤더
HTTP 헤더 정보 표기는 다음을 따라 정의한다.
- API 규격 문서에는 대시('-')를 기준으로 첫 글자는 대문자, 그 외는 소문자를 사용하여 표기
실제 HTTP 요청, 응답 처리에서는 대소문자를 구분하지 않음
- Content-type은 데이터(Body)의 포맷을 지정하기 위한 헤더 값으로 필요에 따라 'application/x-www-form-urlencoded'또는 'application/json'으로 지정
- application/x-www-form-urlencoded
- HTML 폼 데이터를 서버에 전송할 때 주로 사용하는 Content-type으로써 GET, POST 메소드 둘다 사용 가능하며 OAuth 2.0 표준에서 사용
- ※ 문자 인코딩 방식은 UTF-8이므로 application/x-www-from-urlencoded; charset=utf-8 또한 허용
- application/json
- 웹에서 JSON 데이터를 전송할 때 사용되며 HTTP 요청 본문에만 포함되는게 일반적이므로 POST 메소드에서만 주로 사용
- ※ 국제 표준(RFC 8259)에 따라 JSON의 경우 Contnent-type이 반드시 UTF-8이나 명시적으로 Content-type을 표기하는 application/json; charset=utf-8 또한 허용
참여기관 정보
API 요청자와 API 응답자를 구분하여 헤더에 표기한다.
- 'X-Src-Inst-Cd'는 API를 요청하는 참여기관 코드, 'X-Dst-Inst-Cd'는 API요청에 응답하는 참여기관 코드를 설정
API, X-Src-Inst-Cd, X-Dst-Inst-Cd 가 있는 참여기관 정보 표 API X-Src-Inst-Cd X-Dst-Inst-Cd 전송요구 API 정보수신자 정보전송자 정보요청 API 정보수신자 정보전송자 전송지원 API 정보수신자 정보전송자 중계 전문기관 마이데이터 플랫폼 정보수신자,마이데이터 플랫폼 중계 전문기관 - 'X-Api-Type'는 정보요청 API 호출 시 정기적·비정기적 전송 여부를 구분하기 위한 값이며, 정보주체의 정기적 전송에 대한 동의 없이 임의로 정기적 전송 실행 금지
분류, 조건, X-Api-Type 값이 있는 참여기관 정보 표 분류 조건 X-Api-Type 값 요청(Request) 정기적 전송 scheduled 비정기적 전송* 전송요구 직후 user-consent 로그인 또는 새로고침 시 user-refresh 기타 정보 요청 시 user-search 응답(Response) 해당 없음 - *비정기적 전송 : 정보주체가 전송요구서 작성 시 정기적 전송 여부에 동의하지 않은 경우
처리고유번호
- API를 송·수신한 기관 간 처리내역 추적을 위해 API 요청과 응답 시 처리고유번호를 생성하여 'X-Api-Tx-Id'에 설정하여 송·수신한다.
- 참여기관은 API 호출 시 시계열성 확보 및 유일성을 보장하기 위해 UUID v7 표준을 따라 생성한 값을 설정
- UUID v7 (Universally Unique Identifier Version 7)
- 시간 기반(타임스탬프 기반)으로 고유한 식별자를 생성하는 방식
- 시계열 값의 이점인 삽입 정렬, 데이터베이스 인덱싱에서 유리
- 동일한 시간에 생성된 UUID도 고유성 보장
- UUID생성 시 MAC주소나 서버이름과 같은 식별정보를 포함하지 않아 보안성 우수
- IETF에 의해 지정된 표준으로 RFC 9562에 명세(예시 : 018f8401-55ac-7ba4-b3f6-45ca5fa453e4)
응답 코드 및 메시지
표준 HTTP 응답 코드만으로 다양한 상태를 표현하는데 한계가 있으므로, 상황별 세부 응답 코드 및 메시지를 별도로 정의하여 사용한다.
- API요청자(API를 호출하는 측)의 오류는 400번대로 응답
- 접근토큰 발급 API(OAuth 준용)는 RFC 6749 및 7009 국제표준준용
- API응답자(API호출에 응답하는 측)의 오류는 500번대로 응답
- 그 외 응답은 'rsp_code(응답 코드)'와 'rsp_msg(응답 메시지)' 이용
페이지네이션
이력정보 등 한 번의 응답으로 전송이 불가능한 경우는 부분 범위 조회 기법(Cursor-Based Pagnination)을 적용하여, 응답 메시지 당 전송하는 데이터 크기를 조절하여 응답할 수 있다.
- Cursor-Based Pagination
- 대량의 데이터를 페이지라는 단위로 나누어 처리하는 방식으로 페이지를 탐색하여 효율적인 메시지 반환이 가능
- 웹 서비스와 모바일 어플리케이션에서 데이터를 동적으로 로드하거나 표시할 때 주로 사용
[부분범위 조회 요청/응답 파라미터 규격]
구분 | 이름 | 타입 (길이) | 설명 |
---|---|---|---|
요청 | limit | String(3) | 목록 내 반환될 객체의 개수 (최대 500까지 설정 가능) |
next_page | String(1000) | 다음 페이지 요청을 위한 기준객체 (설정 시 해당 객체를 포함한 limit 개 반환) |
|
응답 | next_page | String(1000) | 다음 페이지 요청을 위한 기준객체 (다음 페이지 존재하지 않는 경우 미회신) |
단, limit을 최대 500까지 설정하더라도 정보전송자의 환경에 따라 페이지 당 반환되는 객체의 개수는 변경가능 (0 ≤ 반환되는 객체 개수 ≤ limit)
2. 전송요구 적용 기술·보안 표준
정보주체가 자신의 정보를 전송요구하는 경우, 마이데이터 서비스를 통해 자신이 정보주체임을 입증하고, 정보접근 권한을 발급받는 인증과 인가 절차를 거쳐야 한다.
2.1. 인증(authentication)
- 정보수신자, 정보전송자(중계 전문기관)간 정보주체 인증은 인증기관이 발급한 인증서를 기반으로 수행한다.
- 정보수신자는 전자서명, 중계 전문기관(정보전송자를 대신하여)은 전자서명 검증 및 인증서 기반 본인확인으로 인증 절차가 완료된다.
OAuth 2.0
정보주체의 개인정보 전송요구에 따른 업권별 정보요청 API 호출(정보주체의 개인정보 전송요구)을 위한 인가‧인증 또는 전송지원 API 호출/제공을 위한 인증 절차는 표준 규격인 OAuth 2.0을 준용한다.
- OAuth 2.0 (Open Authorization 2.0)
- 사용자가 제 3자인 다른 웹 및 어플리케이션을 안전하게 인증하고 권한을 부여할 수 있도록 하는 개방형 표준 인증 프로토콜
- 웹 및 모바일 서비스에서 가장 많이 사용되는 인증 프로토콜로, IETF에서 표준으로 공식화하여 채택
- 영국, EU의 Openbanking, paypal, 금융결제원의 Openbanking에서 채택하여 인증 규격으로 사용
- IETF RFC 6749 (The OAuth 2.0 Authorization Framework)
- OAuth 2.0 프로토콜의 공식적인 명세서로 설계, 기능 및 동작에 대한 상세내용을 제공
- 본 명세서에서의 인증 프로토콜로 OAuth 2.0을 사용하면서 인증 기능과 동작은 해당 RFC 문서를 참고로 함
- IETF RFC 7009 (OAuth 2.0 Token Revocation)
- OAuth 2.0 프로토콜의 접근 토큰 및 리프레시 토큰의 취소 및 무효화 프로세스 내용 제공
- 본 명세서의 인증 프로토콜 중 토큰 revocation에 대한 명세는 해당 RFC문서를 참고함
공동인증서를 이용한 전자서명·검증의 경우 KISA의 「공동인증서를 이용한 본인확인 서비스 가이드라인」, X.509 v3 및 CMS등 표준규격을 준용한다.
인증서
디지털 인증서의 형식을 정의하는 규격은 X.509를 표준으로 따른다.
- (전자서명) CMS SignedData형식을 따르며 SignedAttributes에 PKCS#9 contentType, PKCS#9 signing Time, PKCS#9 messageDigest가 포함되어야 한다.
- CMS SignedData (RFC 2630)
- 암호화와 디지털 서명 기능을 제공하는 표준 포맷으로, 전자서명을 포함한 보안 메시지의 생성 및 처리를 위한 표준
- (SignedData) 서명된 메시지를 표현하는 CMS의 객체중 하나의 유형으로 전자서명 및 디지털 인증서를 포함한 데이터를 다룰 때 사용
- (SignedAttributes) SignedData 구조안의 각 서명자에 대한 정보와 서명 값을 포함한 구조체(SignedInfos)내의 서명된 속성 집합을 의미
※ 세부 인증서 정보 DN 체계 등 세부 규격은 인증기관별 규격·체계를 따름
- PKCS#9 (RFC 2985)
- 디지털 서명 및 인증서에 부가적인 정보를 포함할 수 있는 속성 유형을 정의하는 표준
- (contentType) 콘텐츠 유형
- (signingTime) 서명시간
- (messageDigest) 서명된 데이터의 해시 값
[CMS데이터를 ASN.1으로 표현한 예제]
- (UCPID) 공동인증서를 이용한 본인확인 서비스로 상세 내용은 「공동인증서를 이용한 본인확인 서비스 가이드라인」을 참조한다.
2.1.1.1. 사전 절차
참여기관 | 절차 상세 | 비고 |
---|---|---|
공통 | 인증절차와 관련된 참여기관 간 통신은 표준 API는 mTLS, 인증기관과의 통신은 각 기관에서 정한 방식 적용 | |
인증기관 |
|
|
정보수신자 |
|
tx_id를 생성하여 전송요구 API호출 시 설정 |
중계 전문기관 |
|
2.1.1.2. 전자서명 및 서명검증 상세


[위 그림에서 마이데이터 서비스와 정보수신자 서버는 유사한 컬러로 수정하여 같은 기관임을 표현]
정보주체
전송요구서 및 본인확인 동의서 확인을 수행한다.
정보수신자
정보수신자 서버는 「표준 API 규격 및 명세」의 ‘정보요청용 접근토큰 발급(인증서 본인확인 기관) API(전송요구-002)’에 포함되는 Nonce값*을 생성하여 마이데이터 서비스에 전송한다.
*전송요구서의 재전송 방지를 위한 consentNonce와 본인확인 서비스 이용에 사용되는 ucpidNonce를 생성하여 전송
정보수신자
전송요구서 및 본인확인 이용 동의서에 대해 정보주체가 전자서명할 수 있도록 인증기관에서 제공하는 전자서명 생성 모듈을 호출한다.
-
정보주체가 인증서 선택화면을 통해 허용된 인증기관 및 인증서를 선택할 수 있도록 허용 인증기관 및 인증서*만을 식별 및 제시
*마이데이터 플랫폼으로부터 허용된 인증기관 및 인증서 확인 - 서비스 서버를 통해 재전송공격 방지정보*(consentNonce, ucpidNonce)를 생성하여 서비스 앱 등에 제공하고, 서비스 앱은 재전송공격 방지정보를 포함하여 전자서명 요청
- 재전송공격 방지정보 (Nonce)
-
(Nonce 값 생성) 고객이 인증 시도 시 정보수신자 서버에서 다음의 각 Nonce 값(128 bits 숫자생성 및 Base64 url-safe 인코딩(패딩('=')포함))을 생성하여 전자서명이 생성되는 마이데이터 서비스 앱 등에 제공
- - consentNonce : 전송요구내역 전자서명 값에 포함되는 Nonce 값
- - ucpidNonce : 본인확인 전자서명 값에 포함되는 Nonce 값
-
(Nonce 값 전송) 정보수신자 서버는 마이데이터 서비스 앱 등에서 생성한 전자서명 값(Nonce 포함)과 Nonce를 포함하여 정보전송자에게 전송요구 요청(전송요구-002, 003 API)
- - 「표준 API 규격 및 명세」의 '정보요청용 접근토큰 발급(인증서 본인확인 기관) API (전송요구-002)', '정보요청용 접근토큰 발급(간편인증기관) API(전송요구-003)' 참조
- - 동시에 인증을 요청하는 정보전송자별로 Nonce 값을 서로 다르게 생성할 것을 권고(다만, 서비스 지연 및 부하 등을 고려하여 선택 가능)
정보수신자
전자서명값과 Nonce 값을 이용하여 선택된 각 정보전송자들에 대해서 「표준 API 규격 및 명세」의 '정보요청용 접근토큰 발급(인증서 본인확인 기관) API(전송요구-002)'를 병렬적으로 호출한다.
-
고객 CI, 전송요구서 원문, 본인확인 이용 동의서에 대한 전자서명*, 전송요구서 전자서명, Nonce, 트랜잭션 ID(tx_id)를 포함하여 전송
*「본인확인 서비스 가이드라인」의 signedPersonInfoReq에 해당
중계 시스템
전자서명 검증모듈을 통해 전자서명 검증 및 허용된 인증서 서명 여부 등을 확인한다.
- (허용 인증서 여부 확인) 전자서명에 사용된 인증서가 허용된 인증서 목록에 포함되는지 확인
- (재전송 공격 탐지) 전자서명의 서명시간(signig time)이 현재시간 기준 1시간 이내의 발생한 시간인지 검증 및 Nonce 동일 여부 확인*
*전자서명 내 consentNonce, ucpidNonce와 API 요청 메시지 내의 consentNonce, ucpidNonce 일치여부 비교 - (인증서 일치여부 검증) 전송요구서에 전자서명한 인증서와 본인확인 이용동의에 전자서명한 인증서가 동일한 인증서인지 검증
- (인증서 유효성 확인) 전자서명에 사용된 인증서의 유효성을 OCSP를 통해 확인
중계 시스템
정보주체의 정보전송자 회원가입여부를 재확인한다.
중계 시스템
인증기관에서 제공하는 본인확인 요청 모듈을 이용하여 정보주체 본인 확인을 수행한다.
- (ISPReqInfo 메시지 생성) 전달받은 signedPersonInfoReq 필드에 별도 생성한 ucpidNonce 및 전달받은 tx_id를 cpRequestNumber 필드에 추가하여 생성
- (UCPIDRequest 생성) 생성한 ISPReqInfo 메시지를 서버용 공동인증서로 전자서명한 후 본인확인용 기관코드를 추가하여 메시지 생성
2.1.2.1. 사전 절차
참여기관 | 절차 상세 | 비고 |
---|---|---|
공통 |
인증기관과 연결이 필요한 기관은 인증기관이 정하는 절차에 따라 연계 준비
|
「간편인증 인터페이스 가이드라인」 참조 |
정보수신자 |
|
|
정보수신자 | 전자서명 생성 요청 및 전자서명 결과 조회 API 연동 개발 | 간편인증-002, 간편인증-003 API 연계 개발 |
중계 전문기관 | 전자서명 위임 검증 API 연동 개발 | 간편인증-004 API 연계 개발 |
2.1.2.2. 전자서명 및 서명검증 상세


정보주체
대상 정보전송자와 전송요구서 내용을 확인한다.
마이데이터 서비스
전송요구내역과 고객정보를 정보수신자 서버에 전달한다.
정보수신자 서버
전송요구내역의 해시값, 고객 디바이스 정보, 전자서명 완료 후 전환될 마이데이터 서비스 앱의 URL을 요청 메시지에 포함하여 간편인증기관에 전자서명 생성을 요청한다.
- 「표준 API 규격 및 명세」의 '전자서명 요청 API(간편인증-002)' 호출시 전자서명 대상 값으로 전송요구내역 원문이 아닌 해시값(SHA-256) 이용하며, encrypted필드는 기본값 false로 설정
- 정보주체가 마이데이터 서비스를 모바일 앱으로 이용 중인 경우에는 해당 앱의 URL을 함께 제공
간편인증기관
간편인증기관은 정보수신자가 전달한 디바이스 형태에 맞게 간편인증 앱 호출 Scheme*을 회신한다.
*정보주체의 디바이스 타입, 디바이스 OS, 디바이스 브라우저 launcher 정보를 확인해 기기에 적합한 형태로 간편인증 앱 호출 Scheme을 제공
간편인증앱
정보수신자는 전달받은 앱 URL을 이용하여 간편인증 앱을 호출하고 정보주체는 인증앱을 통해 전자서명 생성을 위한 인증정보 입력한다.
- 전자서명 완료 후 인증앱에서 마이데이터 서비스 앱을 Redirect
정보수신자 서버
정보수신자는 간편인증기관에 「표준 API 규격 및 명세」의 ‘전자서명 생성 결과 요청 API(간편인증-003)’를 요청한다.
정보수신자 서버
정보수신자 서버는 마이데이터 서비스를 통해 전달받은 전자서명 값과 고객정보를 기반으로 중계시스템에 「표준 API 규격 및 명세」의 '정보요청용 접근토큰 발급(간편인증기관) API(전송요구-003)'를 호출하여 접근토큰 발급을 요청한다.
중계 시스템
정보주체의 정보전송자 회원가입여부를 확인한다.
중계 시스템
정보수신자가 전달한 전자서명 값을 이용해 인증기관에 「표준 API 규격 및 명세」의 '전자서명 검증 및 서명자 확인요청 API(간편인증-004)'를 요청한다.
- 인증기관은 전달받은 전자서명을 검증하고 전송요구내역 원문의 해시 값 동일 여부를 확인하여 수행
- 인증기관은 검증 결과로 정보주체의 연계정보(CI)를 포함하여 회신


- 개별식별자 기반 인증 절차는 정보전송자가 개별인증을 통해 정보주체를 식별하고 정보수신자에게 정보주체 식별자(ID토큰)를 발급하는 절차로 구성된다.
- 따라서 정보전송자는 정보주체를 인증할 수 있는 수단 및 정보주체 식별자를 생성하여 발급하는 절차를 구현해야 한다.
- 개별식별자 기반 전송요구 절차는 국제 표준인 OpenID Connect를 준용하여 수행한다.
- OpenID Connect
- OAuth 2.0의 개념을 확장하여 사용자의 인증 및 정보를 처리하는 방법 정의
- OpenID Foundation에서 정의한 개방형 인증표준으로, IDP 공급자의 기존 사용자 정보를 재사용하여 클라이언트 어플리케이션에서 로그인 할 수 있도록 지원
- Microsoft, Paypal, EU의 Openbanking에서 채택하여 사용자 인증 규격으로 사용
- 본 명세서에서의 개별인증 과정에서 사용자 정보 취득과정은 OpenID Connect를 사용하면서 인증 기능과 동작은 해당 문서를 참고로 함
정보주체
개별식별자 기반 정보전송자를 선택한다.
정보수신자
정보주체 개별인증수단 인증을 위한 인증 화면과 「표준 API 규격 및 명세」의 '개별인증 인가코드 발급 요청 API(전송요구-004)'를 요청한다.
- (인증 화면) 정보전송자가 정보수신자에 제공하는 인증 화면은 'in-app browser tab'으로 제공
- OAuth2.0 for Native apps – in-app browser tab
- 네이티브 어플리케이션에서 OAuth 2.0을 구현하는 방안을 서술한 표준 문서로 사용자 인증을 요청하는 클라이언트 어플리케이션과 인증 서버 간 프로세스를 서술
- (in-app browser tab) 네이티브 어플리케이션 내에서 웹 브라우저 탭을 사용하는 기술로 웹 브라우저의 인증상태 공유와 보안 컨텍스트 유지 가능
- (Redirect URI) 인가코드를 전달받을 정보수신자의 서버 URI로, 정보전송자는 중계 시스템을 통해 정보수신자의 자격증명과 Redirect URI를 수신하여 시스템에 보관
- (CI해시값 생성) 정보수신자는 보유한 정보주체 CI값에 무작위 nonce값을 앞에 붙인 뒤 HMAC-SHA256 알고리즘으로 CI해시값* 생성
*CI해시값(SHA256) : sha256(nonce || CI) - (정보주체 검증) CI를 보유하지 않은 정보전송자에 로그인한 당사자와 전송요구서에 전자서명한 정보주체를 대조하기 위해 정보수신자는 CI해시값을 포함하여 인증 화면 호출
정보주체
정보주체 개별인증수단 인증 화면과 추가 인증 정보 입력 화면을 통해 본인인증과 추가인증을 수행한다.
정보전송자
정보주체 인증이 성공하면 정보수신자에게 인가코드를 발급하여 Redirect URI로 이동할 수 있도록 응답하고, 전달받았던 CI해시값과 nonce값을 인가 코드와 함께 임시 보관한다.
- (인가코드) 정보주체를 식별할 수 있는 ID토큰을 발급받기 위한 임시 토큰으로써 사용자 로그인이 정상적으로 종료 시 정보전송자가 정보수신자의 redirect_uri를 호출하면서 함께 전달
정보수신자
인가코드를 이용하여 「표준 API 규격 및 명세」의 '개별인증 ID토큰 발급 요청 API(전송요구-005)'를 요청한다.
정보전송자
인가코드를 검증한 뒤 정보주체 식별자로서 ID토큰을 발급하여 정보수신자에게 전달한다.
- (ID토큰 생성) JWS 규격에 맞추어 ID토큰을 생성하며, 인가코드와 함께 보관중인 CI해시값과 nonce값을 ID토큰에 넣어 서명*한 뒤 정보수신자에게 발급
구분, 하위 항목, 설명이 있는 ID토큰 생성 표 구분 하위 항목 설명 Header alg 서명 알고리즘인 “RS256”로 설정 typ 토큰 타입인 “JWT”로 설정 kid 서명에 사용한 비밀키와 쌍을 이루는 공개키 ID Payload jti ID토큰 식별자 iss 토큰 발급자(정보전송자) 기관코드 aud 토큰 수신자(정보주신자) 기관코드 sub 로그인한 정보주체 식별자 hci 정보수신자가 인증 화면 호출 시 전달한 CI해시값 nonce 정보수신자가 인증 화면 호출 시 전달한 nonce값 exp 토큰 만료 시간 iat 토큰 발급 시간 Signature Header와 Payload의 조합을 Header의 alg에 명시된 알고리즘으로 서명한 값 Payload 내 Claim은 발급주체가 임의로 추가 가능
- (Redirect URI) 인가코드를 전달받을 정보수신자의 서버 URI로, 정보전송자는 중계 시스템을 통해 정보수신자의 자격증명과 Redirect URI를 수신하여 시스템에 보관
- (CI해시값 생성) 정보수신자는 보유한 정보주체 CI값에 무작위 nonce값을 앞에 붙인 뒤 HMAC-SHA256 알고리즘으로 CI해시값* 생성
*CI해시값(SHA256) : sha256(nonce || CI) - (정보주체 검증) CI를 보유하지 않은 정보전송자에 로그인한 당사자와 전송요구서에 전자서명한 정보주체를 대조하기 위해 정보수신자는 CI해시값을 포함하여 인증 화면 호출
- ID토큰 서명
- (서명키 공유) 정보전송자는 별도 배포된 중계 시스템 연동 가이드에 기술된 API로 서명에 사용한 비밀키와 짝을 이후는 공개키 정보 공유 ※ ID토큰 헤더내 kid값을 공개키 식별자로 사용
- (서명 생성) 정보선송자는 로그인 성공 후 ID토큰 발급 시 비밀키로 JWS 서명을 생성하고 ID토큰 내에 서명검증을 위한 공개키 kid를 헤더에 포함
- (서명 검증) 중계 시스템은 ID토큰 내에 kid 값에 해당되는 공개키를 정보전송자로부터 수신하여 JWS 서명을 검증하고, 해당 정보전송자가 생성하고 변조되지 않은 ID토큰임을 확인한다.
ID토큰의 유효기간은 전송요구 최대 유효기간인 1년에 맞추어 발급
정보수신자
정보수신자는 전자서명된 전송요구서와 정보전송자로부터 발급받은 ID토큰을 중계 시스템에 같이 전달하여 「표준 API 규격 및 명세」의 '접근토큰 발급 요청 API(전송요구-002∙003)'를 호출한다.
중계전문기관
중계 시스템은 ID토큰의 서명을 검증하고, 본인확인 또는 전자서명 검증 시 인증기관으로부터 획득한 CI를 정보수신자와 동일한 방식으로 CI해시값을 만들어 ID토큰 내부의 CI해시값과 일치하는지 확인 후 정보수신자에게 접근토큰을 발급한다.
2.2. 인가(authorization)
전송요구를 통한 정보요청 또는 전송요구와 관련한 전송지원 API 등의 정보 접근 권한을 부여한 증표로서 접근토큰을 발행하는 과정이다.
- 접근토큰 발급을 요청할 때 필요한 자격으로써 마이데이터 플랫폼에서 용도별로 발급하여 각 기관에 배부한다.
용도, 발급자, 대상기관, 내용이 있는 자격증명 표 용도 발급자 대상기관 내용 정보요청 마이데이터플랫폼 - 정보수신자 정보수신자 서비스에서 중계 전문기관에 정보요청 API를 호출 하기 위한 접근토큰 발급에 사용
※ 정보요청 API의 분야별, 그룹별 권한 부여마이데이터플랫폼 전송지원 - - 중계 전문기관
- - 정보수신자
- - 인증기관
지원플랫폼이 제공하는 전송지원 API를 호출하기 위한 접근토큰 발급에 사용 중계 전문기관 전송지원 - - 마이데이터 플랫폼
- - 정보수신자
중계 전문기관이 제공하는 전송지원 API 및 회원 여부 확인(전송요구-001) API를
호출하기 위한 접근토큰 발급에 사용 - 자격증명을 발급받기 위해서는 마이데이터 플랫폼에 서비스 등록 및 승인 절차가 필요하다.
- 정보요청 용도의 자격증명은 정보수신자 서비스 및 정보전송자별로 각각 자격증명이 발급되며, 중계 전문기관은 해당 자격증명과 호출 가능 API 그룹을 매핑하여 권한 관리 시스템에 적용한다.
전체 API그룹 및 권한 정보는 별도 표준 API 규격서 참고- API그룹단위 권한
- 자격증명으로 호출가능한 API 복수개를 그룹단위로 묶어 권한 부여
대상, 요청자, 자격증명, 부여권한이 있는 API그룹단위 권한 표 대상 요청자 자격증명 부여권한 정보전송자 1 정보수신자 서비스 A ClientID-1/Secret-1 API그룹-1,2,3 정보전송자 2 정보수신자 서비스 A ClientID-2/Secret-2 API그룹-2 정보전송자 3 정보수신자 서비스 A ClientID-3/Secret-3 API그룹-1 정보수신자 서비스 B ClientID-4/Secret-4 API그룹-2 정보수신자는 복수의 서비스를 등록할 수 있으며, 정보전송자도 한 분야에 분리된 정보전송시스템 또는 복수의 분야에 정보전송시스템을 운영할 수 있음을 고려
- 접근토큰 규격은 JWS(JSON Web Signature) 표준 규격을 이용하여 무결성을 보장한다.
* IETF RFC 7515 - JSON Web Signature(JWS)- JWS (JSON Web Signature)
- JWT에 전자서명을 결합한 형태로 토큰의 무결성과 메시지 인증을 제공하며, OAuth 2.0에서 보안을 강화할 목적으로 JWS를 사용
- JSON형식을 사용한 토큰으로 다양한 플랫폼에서 사용가능하며 가독성이 좋음
- JWS 규격 토큰은 Header, Payload, Signature로 구성되며, BASE64로 인코딩한 후 마침표로 연결한 형태로 생성한다.
- 접근토큰은 용도에 따라 전송요구에 따른 정보요청용 및 전송지원용으로 구분되며 각각 발급되는 토큰의 규격은 다음과 같다.
구분, 항목, 정보요청, 전송지원, 설명이 있는 접근토큰 표 구분 항목 정보요청 전송지원 설명 Header alg O O 서명 알고리즘 지정 typ O O 토큰 타입인 "JWT"로 설정 Payload iss O O 토큰 발급자(중계 전문기관) 기관코드 aud O O 토큰 수신자(정보수신자) 기관코드 jti O O 접근토큰 고유 식별자 (접근토큰 ID) service_cd O △ 마이데이터 서비스 코드
※ 전송지원의 경우 선택적으로 필요 시 포함client_id O △ 마이데이터 서비스 자격증명
※ 전송지원의 경우 선택적으로 필요 시 포함provider O X 정보전송자 기관코드 csi O X 전송요구서 식별자 (전송요구서 ID) exp O O 토큰 만료 시간 scope O O 토큰 권한 범위 (공백으로 구분) Signature Header와 Payload의 조합을 Header의 alg에 명시된 알고리즘으로 서명한 값 - 접근토큰 내 scope 항목에 따라 API를 호출할 수 있는 권한이 부여되며 발급요청자의 자격증명에 허용된 권한 범위를 넘지 않는다.
정보요청 토큰의 경우 정보주체가 전송요구 시 허용한 권한 범위 내 발급 - 접근토큰 유효기간은 23~24시간 중 무작위 값이며, 갱신토큰을 이용하여 접근토큰 재발급 시 갱신되며, 전송요구 시점까지 사용자의 재동의 없이 갱신토큰을 이용해 토큰 갱신이 가능하다.
- 접근토큰을 갱신하는데 이용하는 토큰으로 접근토큰 발급 시 함께 발급되며, 접근토큰을 재발급받을 때 갱신토큰도 재발급된다.
- 정보요청용 접근토큰만 갱신이 가능하며, 연계지원용 접근토큰은 갱신을 지원하지 않는다.
- 접근토큰과 동일한 JWS 규격에 따라 발급된다.
구분, 하위 항목, 설명이 있는 갱신토큰 표 구분 하위 항목 설명 Header alg 서명 알고리즘 지정 typ 토큰 타입인 "JWT"로 설정 Payload iss 토큰 발급자(중계 전문기관) 기관코드 aud 토큰 수신자(정보수신자) 기관코드 jti 접근토큰 고유 식별자 (접근토큰 ID) service_cd 마이데이터 서비스 코드 client_id 마이데이터 서비스 자격증명 provider 정보전송자 기관코드 csi 전송요구서 식별자 (전송요구서 ID) exp 토큰 만료 시간 Signature Header와 Payload의 조합을 Header의 alg에 명시된 알고리즘으로 서명한 값 - 갱신토큰의 유효기간은 최대 1년으로 전송요구 종료시점을 초과하지 않으며, 접근토큰 갱신 시 갱신토큰 또한 재발급된다.