2019년 10월, 영국 컨설팅업체 헨리앤드파트너스가 발표한 여권 지수(Henley Passport Index)에 따르면 한국의 비자 면제 방문국 수는 188개국으로 독일, 핀란드와 함께 공동 2위에 올랐다. 이는 우리나라의 위상이 그만큼 높아졌다는 것을 뜻할 뿐 아니라, 여권이라는 세계 공용의 신원 증명 도구를 통해 어느 나라에서든 개인의 신분을 편리하게 확인할 수 있음을 알 수 있게 하는 대목이다.
마찬가지로 인터넷 서비스에도 여권과 같은 장치를 적용해 개인 신원 확인을 훨씬 간편하게 할 수 있지 않을까? 이러한 니즈가 체계화되면서 웹 서비스 이용 시 일일이 회원가입 절차를 거치지 않고도 본인 인증을 손쉽게 할 수 있는 방법이 고안되었다.
근래 들어 복잡한 절차 없이 즉시 혹은 간단한 신상 확인만으로 인터넷 서비스에 가입해 본 경험이 한 두 번씩은 있을 것이다. 이 같은 편의성은 IDP(Identity Provider)라 불리는 신원 확인 서비스가 제공한다. IDP는 SAML(Security Assertion Markup Language), OAuth 2.0, OIDC(OpenID Connect) 같은 표준을 기반으로 사용자를 인증하거나 특정 리소스를 이용하도록 허가 또는 관리한다.
앞서 언급한 IDP 표준들을 간단히 살펴보면 다음과 같다.
– SAML 2.0: 2001년 OASIS에서 정의한 개방형 Authentication(인증) 및 Authorization(인가) 표준이며, 엔터프라이즈 어플리케이션의 SSO(Single Sign On)를 목적으로 XML(Extensible Markup Language) 형식으로 개발
– OAuth 2.0: 2006년 Twitter와 Google이 정의한 개방형 Authorization 표준이며, API 허가를 목적으로 JSON(Javascript Object Notation) 형식으로 개발
– OIDC 2.0: 2014년 OpenID Foundation에서 정의한 개방형 Authentication 표준이며, 컨슈머 어플리케이션의 SSO를 목적으로 JSON 형식으로 개발
본 아티클에서는 컨슈머 어플리케이션의 SSO를 지원하는 인증 프로토콜인 OIDC(OpenID Connect)에 대해 살펴 보고자 한다.
OpenID Connect 매커니즘
전자상거래 서비스 eBay를 예로 들어 보겠다. 서비스를 이용하기 위해 회원 가입을 하는 경우, eBay 웹사이트에서 개인 정보를 직접 입력하는 절차를 거칠 수도 있지만, 이미 보유한 Google 계정을 이용하면 OpenID Connect 프로토콜을 통해 간편하게 서비스에 가입할 수 있다.
OpenID Connect는 OAuth 2.0 프로토콜을 기반으로 상위 계층에서 간편하게 인증을 처리하며, 신원 확인 서비스(IDP)를 통해 보다 안전한 방식으로 사용자 정보를 제공할 수 있다. [그림 1]의 경우 OP(OpenID Provider) 역할을 하는 Facebook, Google이 IDP이다.
OpenID Connect의 작동 방식은 다음과 같다.
1) eBay 서비스를 이용하기 위해 ‘Sigh in with Google'[그림 1] 버튼을 클릭하면 OP(Google)는 eBay 사용 시 필요한 인증 화면(예: 로그인, 인증 번호 입력 등)을 내려 주게 됩니다. 참고로 eBay는 사전에 해당 OP를 사용하기 위해 인증이 가능하도록 등록을 마쳤으며, 필요한 client id, client secret 같은 정보들을 OP로부터 제공받은 상태입니다.
2) 인증 레벨에 따라 다양한 인증 방법을 요구할 수 있습니다. eBay는 OP로부터 발급받은 client id를 비롯해 redirect uri, scope 등의 정보로 OP에 Authorization Code(허가 코드)를 요청합니다.
3) OP는 인증 및 인가 여부를 판단하여, 1회용 Authorization Code를 eBay에 발급합니다.
4) eBay는 전달 받은 코드 및 client id, client secret 등의 정보로 OP에 Access 토큰과 ID 토큰을 요청하게 됩니다.
5) OP는 Access 토큰 및 ID 토큰을 eBay로 전달합니다.
6) eBay는 Access 토큰을 이용하여 다른 RS(Resource Server) 자원들을 요청할 수 있게 됩니다.
위의 순서를 보면 OAuth 2.0의 흐름과 크게 달라 보이지 않는 것을 알 수 있다. 이는 서두에 언급한대로 OpenID Connect가 OAuth 2.0을 기반으로 상위 계층에서 좀 더 간편하게 인증을 처리할 수 있도록 고안되었기 때문이다.
OpenID Connect는 Access 토큰과 함께 ID 토큰을 전달한다. 이 JWT(JSON Web Tokens)을 통해 암호화 된 토큰 안에 사용자 정보를 비롯한 다양한 정보를 HTTP 헤더의 최대 사이즈인 4KB 이내로 저장할 수 있다. 이로 인해 eBay는 Access 토큰을 사용하여 한 번 더 OAuth 2.0 API를 호출할 필요 없이 사용자 정보가 담긴 ID 토큰을 복호화 하여 바로 사용할 수 있게 된다.
단편적인 예로 5천만 명의 사용자들이 eBay를 이용할 경우, 사용자 정보를 가져오기 위해서는 최소 1억 번의 API 호출이 필요했었지만 ID 토큰을 이용하면 그 절반인 5천만 번 정도만 호출하면 된다.
JWT 표준을 이용해 만들어진 ID 토큰은 아래와 같이 구현되며 해당 토큰은 크게 Header.Payload.Signature로 ‘ . ’을 구분자로 하여 구성된다. HEADER에서는 signing 알고리즘 종류를 선택할 수 있고 지원하는 라이브러리에 따라 HS264, HS384, HS512 RSA264, RSA384, RSA512 등을 지정해 사용할 수 있다.
eBay는 환경에 따라 필요한 클레임(이메일 주소, 전화번호, 기타 신상정보 등)을 지정하여 요청 가능하며, 해당 내용이 인코딩 된 PAYLOAD를 전달 받는다.
OpenID Connect 특징
OpenID Connect는 다음과 같은 특징을 가지고 있다.
– 상호 운용성: 인증 서비스는 기본적으로 다양한 컨슈머 서비스들이 사용할 수 있도록 상호 운용성을 반드시 충족해야 한다. OIDC 또한 표준 영역(openid, profile, email, address, phone)에 대해 요청 시 필요한 사용자 정보들을 ID 토큰을 통해 제공할 수 있다.
– 단순성, 모바일 지향 형식: JSON(Javascript Object Notation) 기반의 REST 친화적인 구조를 채택하여 손쉽게 사용할 수 있다.
– 보안: ISO/IEC 29115 Entity Authentication Assurance 프레임워크의 레벨 1~4를 선택할 수 있다. 레벨이 높을수록 인증 시 PIN과 같은 추가적인 정보를 요구할 수 있다. [그림 1]에서 ‘Sign in with Google’을 통해 인증할 경우 추가적으로 인증번호를 물어오는데 이는 레벨 2를 지정하여 사용하는 것으로 유추된다.
– 유연성: OP에 직접 요청을 할 수 있는 Normal 타입, JWT을 이용하여 서명된 데이터 소스를 모두 OP를 통해 전달하는 Aggregated 타입, 데이터 소스를 RP(Relying Party)에서 직접 Access 토큰을 사용하여 전달받는 Distributed 타입이 있으며, 이 중 하나가 아닌 여러 타입을 결합한 하이브리드 형태로도 사용할 수 있다.
마치며
OIDC는 심플한 JSON 형식을 채택하고 OAuth 2.0 프로토콜을 기반으로 상위 계층에서 Authorization(인가)을 가능케 하는 등 기존의 OpenID 1.0, 2.0 에서 부족했던 부분들을 개선하고, SAML, OAuth 2.0의 장점들을 수용하여 새로운 모습으로 발전해 나가고 있다. 앞서 예를 든 것과 같이 Google을 비롯한 많은 IDP가 채택 중인 OIDC는 사용자뿐 아니라 다양한 개체(Entity)를 인증하는 데에도 사용되고 있다.
기존 OAuth 2.0, SAML 등의 인증 방식을 사용 중인 서비스에서는 OpenID Connect를 진지하게 고민해 볼 필요가 있다. OpenID Connect의 차별화된 특징과 장점이 사용자들에게 보다 유연하고 편리한 인증 방법을 제공할 수 있을 것이기 때문이다.
# References
- https://openid.net/connect
- https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims
- https://www.henleyglobal.com
- https://developers.google.com/identity/protocols/OpenIDConnect
- https://developer.mobileconnect.io/level-of-assurance
- https://jwt.io
박경원 프로
에스코어㈜ 소프트웨어사업부 개발플랫폼그룹
SEP Catalog 연구 개발을 담당하고 있습니다. 주요 관심 분야는 Enterprise Service 관련 Cloud Platform, MSA Architecture입니다.
Register for Download Contents
- 이메일 주소를 제출해 주시면 콘텐츠를 다운로드 받을 수 있으며, 자동으로 뉴스레터 신청 서비스에 가입됩니다.
- 뉴스레터 서비스 가입 거부 시 콘텐츠 다운로드 서비스가 제한될 수 있습니다.
- 파일 다운로드가 되지 않을 경우 s-core_mktg@samsung.com으로 문의해주십시오.