웹 서비스를 개발하거나 외부 API를 연동하다 보면 OAuth와 OpenID라는 두 가지 프로토콜을 자주 접하게 됩니다. 두 기술은 이름도 비슷하고 실제로 함께 사용되는 경우가 많아 혼동하기 쉽지만, 그 목적과 역할은 완전히 다릅니다. 핵심부터 간단히 요약하면 다음과 같습니다.
- OAuth: 비밀번호를 노출하지 않고 제3자에게 권한(인가)을 위임하는 프로토콜
- OpenID: 사용자가 이미 가지고 있는 계정으로 신원(인증)을 확인하는 프로토콜
OAuth란? – 안전한 권한 부여(인가) 프로토콜
OAuth는 사용자의 비밀번호를 제공하지 않으면서도, 제3자 애플리케이션이 특정 리소스에 접근할 수 있도록 권한(Authorization)을 부여하기 위해 설계된 프로토콜입니다. HTTP 기반으로 동작하며, API를 통해 지원되는 어설션(assertion)으로 교환할 수 있는 액세스 토큰(Access Token)을 발급하는 방식으로 권한을 관리합니다.
예를 들어 어떤 앱이 "내 Google 드라이브 파일을 읽어도 되는가?"를 요청하는 상황을 생각해 볼 수 있습니다. OAuth를 사용하면 사용자는 Google 비밀번호를 해당 앱에 알려줄 필요 없이, 필요한 권한만 안전하게 위임할 수 있습니다.
OpenID란? – 신원 확인(인증) 프로토콜
반면 OpenID는 인증(Authentication), 즉 "이 사용자가 누구인지 확인하는 것"을 위해 설계되었습니다. OpenID에서는 제3자가 사용자가 이미 보유하고 있는 계정 정보를 활용해 대신 인증을 수행해 줍니다. 대표적인 활용 사례가 바로 싱글 사인온(Single Sign-On, SSO)입니다.
"Google로 로그인", "네이버로 로그인"처럼 하나의 계정으로 여러 서비스에 로그인할 수 있는 기능이 바로 OpenID 방식의 인증을 활용한 전형적인 예입니다.
OAuth vs OpenID 주요 차이점 비교표
| 번호 | 구분 | OAuth | OpenID |
|---|---|---|---|
| 1 | 기본 목적 | 비밀번호를 노출하지 않고 제3자에게 권한(인가)을 부여하도록 설계됨 | 사용자의 신원을 확인(인증)하도록 설계됨 |
| 2 | 세션(Session) | 사용자 세션을 시작하지 않음 | 사용자 세션을 시작함 |
| 3 | 토큰 및 방식 | 액세스 토큰 개념을 사용하여 권한을 부여함 | 제3자가 사용자가 이미 보유한 계정을 활용해 대신 인증함 |
정리: 언제 무엇을 사용해야 할까?
두 프로토콜의 차이를 한 문장으로 정리하면 이렇습니다. OAuth는 "무엇을 할 수 있는가(권한)"를 다루고, OpenID는 "당신이 누구인가(신원)"를 다룹니다.
- 외부 서비스가 내 데이터에 접근하도록 허용하고 싶다면 → OAuth
- 별도 회원가입 없이 기존 계정으로 로그인(SSO)을 구현하고 싶다면 → OpenID
실제 현업에서는 두 기술을 결합한 OpenID Connect(OIDC)가 널리 사용됩니다. OIDC는 OAuth 2.0 위에 인증 계층을 얹은 규격으로, 권한 부여와 인증을 하나의 체계에서 동시에 처리할 수 있게 해 줍니다. 따라서 최신 서비스를 설계할 때는 OAuth 2.0 + OpenID Connect 조합을 고려하는 것이 일반적입니다.