
OAuth 2.0과 OpenID Connect(OIDC)는 자주 함께 언급되지만
목적부터 다르다.
OAuth만으로도 로그인처럼 보이는 기능을 만들 수는 있지만,
실제 서비스 환경에서는 여러 한계와 위험이 생긴다.
OIDC는 이 문제를 해결하기 위해 OAuth 위에 얹어진 인증 레이어다.
소셜 로그인을 처음 도입할 때는
OAuth만으로도 충분해 보인다.
실제로 많은 서비스가 이 방식으로 로그인을 구현하고 있다.
하지만 시간이 지나고 구조를 다시 보면
이 질문이 자연스럽게 떠오른다.
“이게 정말 ‘인증’일까?”
OAuth 문서를 다시 읽어보면
OAuth는 애초에 로그인을 위한 표준이 아니다.
OAuth 2.0은 처음부터 끝까지
권한 위임(Authorization) 을 해결하기 위한 프로토콜이다.
즉, OAuth의 핵심 질문은 이것이다.
“이 클라이언트가
이 리소스에 접근해도 되는가?”
OAuth에서 발급되는 Access Token은
Access Token은 사용자 인증 결과가 아니라
리소스 접근 권한을 표현하는 토큰이다.
👉 “이 사용자가 누구인지”를 보장하기 어렵다.
OAuth 기반 로그인은 보통
UserInfo API 호출에 의존한다.
하지만 이 방식에는 문제가 있다.
OAuth만 사용할 경우 다음 질문에 명확히 답하기 어렵다.
👉 인증 자체에 대한 메타 정보가 부족하다.
OpenID Connect(OIDC)는
OAuth 2.0 위에 얹어진 인증 레이어다.
OIDC는 OAuth 흐름을 그대로 사용하면서
다음 요소를 추가한다.
OIDC의 핵심은 ID Token이다.
ID Token은 다음을 보장한다.
sub)iat, auth_time)iss)aud)그리고 이 정보는
👉 더 이상 UserInfo API 호출에 의존하지 않아도 된다.
| 구분 | OAuth 2.0 | OpenID Connect |
|---|---|---|
| 목적 | 권한 위임 | 사용자 인증 |
| 핵심 토큰 | Access Token | ID Token |
| 사용자 식별 | 비표준 | 표준화됨 |
| 인증 시점 정보 | 없음 | 포함 |
| 로그인 용도 | 부적합 | 적합 |
쓸 수는 있다.
하지만 다음 전제가 붙는다.
서비스가 커질수록
같은 요구사항이 생기고,
이 시점부터 OAuth만으로는 한계가 분명해진다.
OIDC는 이 분리를 구조적으로 강제한다.
OAuth 2.0과 OpenID Connect는
서로 대체 관계가 아니다.
로그인을 구현한다면
OAuth 위에 OIDC를 얹는 구조가
가장 자연스럽고 안전하다.
이 글은
OAuth를 사용해 로그인 기능을 구현해본 뒤,
OIDC가 왜 등장했는지를 다시 이해하려는 정리다.