2019년 10월, 영국 컨설팅업체 헨리앤드파트너스가 발표한 여권지수(Henley Passport Index)에 따르면 한국의 비자면제 방문국 수는 188개국으로 독일, 핀란드와 함께 공동 2위에 올랐습니다. 이는 우리나라의 위상이 그만큼 높아졌다는 것을 뜻할 뿐 아니라, 여권이라는 세계 공용의 신원증명 도구를 통해 어느 나라에서든 개인의 신분을 편리하게 확인할 수 있음을 알 수 있게 하는 대목입니다.
마찬가지로 인터넷 서비스에도 여권과 같은 장치를 적용해 개인신원 확인을 훨씬 간편하게 할 수 있지 않을까요? 이러한 니즈가 체계화되면서 웹서비스 이용 시 일일이 회원가입 절차를 거치지 않고도 본인 인증을 손쉽게 할 수 있는 방법이 고안되었습니다.
근래 들어 복잡한 절차없이 즉시 혹은 간단한 신상 확인만으로 인터넷 서비스에 가입해 본 경험이 한두 번씩은 있을 것입니다. 이같은 편의성은 IDP(IDentity Provider)라 불리는 신원확인 서비스가 제공합니다. IDP는 SAML(Security Assertion Markup Language), OAuth 2.0, OIDC(OpenID Connect) 같은 표준을 기반으로 사용자를 인증하거나 특정 리소스를 이용하도록 허가 또는 관리합니다.
앞서 언급한 IDP 표준들을 간단히 살펴보면 다음과 같습니다.
본 아티클에서는 컨슈머 애플리케이션의 SSO를 지원하는 인증 프로토콜인 OIDC(OpenID Connect)에 대해 살펴 보고자 합니다.
전자상거래 서비스 eBay를 예로 들어 보겠습니다. 서비스를 이용하기 위해 회원 가입을 하는 경우, eBay 웹사이트에서 개인정보를 직접 입력하는 절차를 거칠 수도 있지만, 이미 보유한 Google 계정을 이용하면 OpenID Connect 프로토콜을 통해 간편하게 서비스에 가입할 수 있습니다.
OpenID Connect는 OAuth 2.0 프로토콜을 기반으로 상위계층에서 간편하게 인증을 처리하며, 신원확인 서비스(IDP)를 통해 보다 안전한 방식으로 사용자 정보를 제공할 수 있습니다. [그림 1]의 경우 OP(OpenID Provider) 역할을 하는 Facebook, Google이 IDP입니다.
OpenID Connect의 작동 방식은 다음과 같습니다.
위의 순서를 보면 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는 다음과 같은 특징을 가지고 있습니다.
1. 상호운용성
인증 서비스는 기본적으로 다양한 컨슈머 서비스들이 사용할 수 있도록 상호운용성을 반드시 충족해야 합니다. OIDC 또한 표준영역(openid, profile, email, address, phone)에 대해 요청 시 필요한 사용자 정보들을 ID 토큰을 통해 제공할 수 있습니다.
2. 단순성, 모바일 지향 형식
JSON(Javascript Object Notation) 기반의 REST 친화적인 구조를 채택하여 손쉽게 사용할 수 있습니다.
3. 보안
ISO/IEC 29115 Entity Authentication Assurance 프레임워크의 레벨 1~4를 선택할 수 있습니다. 레벨이 높을수록 인증 시 PIN과 같은 추가적인 정보를 요구할 수 있습니다. [그림 1]에서 'Sign in with Google'을 통해 인증할 경우 추가적으로 인증번호를 물어오는데 이는 레벨 2를 지정하여 사용하는 것으로 유추됩니다.
4. 유연성
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
[1] https://openid.net/connect
[2] https://openid.net/specs/openid-connect-core-1_0.html#AggregatedDistributedClaims
[3] https://www.henleyglobal.com
[4] https://developers.google.com/identity/protocols/OpenIDConnect
[5] https://developer.mobileconnect.io/level-of-assurance
[6] https://jwt.io
▶ 해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 기고자에 저작권이 있습니다.
▶ 해당 콘텐츠는 사전 동의없이 2차 가공 및 영리적인 이용을 금하고 있습니다.
에스코어㈜ 소프트웨어사업부 개발플랫폼그룹
에스코어 개발플랫폼그룹에서 DP Catalog 연구 개발을 담당하고 있습니다. 주요 연구 및 관심 분야는 Enterprise Services 관련 클라우드 플랫폼, 마이크로서비스 아키텍처(Microservices Architecture, MSA)입니다.