문서의 각 단락이 어느 리비전에서 마지막으로 수정되었는지 확인할 수 있습니다. 왼쪽의 정보 칩을 통해 작성자와 수정 시점을 파악하세요.

OIDC | |
이름 | OIDC |
정식 명칭 | OpenID Connect |
분류 | 인증 및 인가 프로토콜 |
기반 기술 | |
주요 목적 | 사용자 인증 정보를 안전하게 전달 |
출시 연도 | 2014년 |
관리 기관 | |
기술 상세 정보 | |
핵심 구성 요소 | |
주요 흐름 | 인증 코드 플로우, 암시적 플로우, 하이브리드 플로우 |
표준 문서 | OpenID Connect Core 1.0 |
데이터 포맷 | |
주요 클레임 | sub(주체), iss(발급자), aud(대상자), exp(만료 시간), iat(발급 시간) |
[[OAuth 2.0]]과의 차이점 | |
사용 사례 | 싱글 사인온(SSO), 모바일 앱 로그인, API 접근 제어 |
보안 프로필 | OpenID Connect RP-Initiated Logout, OpenID Connect Session Management |
주요 구현체 | Keycloak, Auth0, Okta, Microsoft Entra ID |
관련 표준 | |

OIDC(OpenID Connect)는 인터넷 상에서 사용자의 신원을 확인하기 위한 인증 프로토콜이다. OAuth 2.0 프레임워크 위에 구축된 오픈 표준으로, OAuth 2.0이 인가(Authorization)에 중점을 둔다면, OIDC는 인증(Authentication)에 초점을 맞춘다. 사용자가 한 번의 로그인으로 여러 애플리케이션과 서비스를 이용할 수 있는 싱글 사인온(SSO)을 구현하는 데 널리 사용된다.
이 프로토콜은 ID 토큰이라는 개념을 도입하여 사용자 정보를 안전하게 전달한다. ID 토큰은 JSON Web Token(JWT) 형식으로 구성되며, 사용자의 신원을 주장하는 정보를 포함한다. 이를 통해 클라이언트 애플리케이션은 사용자가 누구인지 확인하고, 필요한 기본 프로필 정보를 얻을 수 있다.
OIDC는 구글, 마이크로소프트, 페이스북과 같은 주요 ID 공급자(IdP)들에 의해 채택되었으며, 현대 웹 애플리케이션과 모바일 앱에서 표준적인 인증 방식으로 자리 잡았다. RESTful API 기반의 간단한 구현과 높은 상호운용성을 제공한다.

OIDC는 OAuth 2.0 프레임워크 위에 구축된 인증 및 신원 확인 레이어이다. OAuth 2.0이 주로 권한 부여에 초점을 맞춘 반면, OIDC는 클라이언트 애플리케이션이 최종 사용자의 신원을 확인할 수 있는 표준화된 방법을 제공한다. 이를 통해 애플리케이션은 사용자가 누구인지 확인하고, 그에 대한 기본적인 프로필 정보를 안전하게 얻을 수 있다.
OIDC의 핵심은 ID 토큰이다. ID 토큰은 JSON Web Token 형식으로 인코딩되며, 인증 서버가 사용자의 신원을 성공적으로 확인했음을 증명하는 서명된 보안 토큰이다. 이 토큰에는 사용자의 식별자(sub), 토큰을 발행한 인증 서버(iss), 토큰의 대상 클라이언트(aud), 만료 시간(exp) 등의 표준화된 클레임이 포함된다. 클라이언트는 이 토큰의 서명을 검증하여 그 진위를 확인하고, 내부의 클레임을 통해 사용자에 대한 정보를 얻는다.
OAuth 2.0과의 관계는 OIDC가 OAuth 2.0의 인가 흐름을 그대로 사용하면서, 그 결과물로 액세스 토큰뿐만 아니라 ID 토큰도 함께 반환한다는 점에서 명확해진다. 액세스 토큰이 보호된 리소스(예: API)에 접근하는 권한을 부여하는 데 사용된다면, ID 토큰은 순수하게 인증 정보를 전달하는 데 사용된다. 따라서 OIDC는 "인가를 통한 인증"을 구현하는 확장 프로토콜로 이해될 수 있다.
OIDC는 OAuth 2.0 프레임워크 위에 구축된 인증 계층이다. OAuth 2.0은 권한 부여를 위한 표준 프로토콜로, 클라이언트 애플리케이션이 사용자의 동의 하에 제한된 범위의 리소스에 접근할 수 있도록 액세스 토큰을 발급하는 데 중점을 둔다. 그러나 OAuth 2.0 자체는 사용자가 누구인지 확인하는 표준화된 방법을 제공하지 않는다. 이로 인해 애플리케이션은 종종 액세스 토큰을 받은 후 별도의 API 호출을 통해 사용자 정보를 조회해야 했다.
OIDC는 이러한 OAuth 2.0의 한계를 해결하기 위해 설계되었다. OIDC는 OAuth 2.0의 인가 코드 흐름 같은 기존 흐름을 그대로 사용하면서, ID 토큰이라는 새로운 개념을 도입한다. ID 토큰은 JWT 형식으로 인코딩되며, 사용자의 신원을 직접적으로 증명하는 정보를 담고 있다. 따라서 OIDC는 OAuth 2.0이 제공하는 '리소스 접근 권한 부여' 기능에 '사용자 인증 정보 제공' 기능을 추가한 확장판으로 볼 수 있다.
두 프로토콜의 관계를 표로 정리하면 다음과 같다.
항목 | OAuth 2.0 | OIDC |
|---|---|---|
주요 목적 | 권한 부여 (Authorization) | 인증 (Authentication) |
핵심 토큰 | ID 토큰 (및 액세스 토큰) | |
반환 정보 | 리소스 접근 권한 | 사용자 신원 정보 (클레임) |
사용자 정보 획득 | 액세스 토큰으로 UserInfo 엔드포인트 호출 필요 | ID 토큰 자체에 기본 정보 포함 |
요약하면, OIDC는 OAuth 2.0을 기반으로 하여 호환성을 유지하면서 인증이라는 명확한 목적을 위해 필요한 구성 요소를 표준화한 프로토콜이다. 현대 애플리케이션은 OAuth 2.0을 통해 API 접근 권한을 관리하고, OIDC를 통해 사용자 로그인 상태를 확인하는 방식으로 두 기술을 함께 사용한다.
ID 토큰은 JSON Web Token 형식으로 인코딩된 문자열이다. 이 토큰은 클레임의 집합으로 구성되며, 사용자의 인증 이벤트에 대한 정보를 담고 있다. ID 토큰의 주요 목적은 Relying Party에게 사용자가 OpenID Provider에 의해 성공적으로 인증되었음을 안전하게 전달하는 것이다. 따라서 ID 토큰은 권한 부여를 위한 액세스 토큰과는 그 역할이 명확히 구분된다.
토큰의 구조는 헤더, 페이로드, 서명의 세 부분으로 나뉜다. 헤더에는 서명 알고리즘과 토큰 유형 같은 메타데이터가 포함된다. 페이로드는 사용자에 대한 클레임을 담는 핵심 부분이다. 필수 클레임으로는 토큰 발행자(iss), 대상 수신자(aud), 만료 시간(exp), 발행 시간(iat), 그리고 주체 식별자(sub)가 있다. 선택적 클레임으로는 인증 시간(auth_time)이나 인증 방법 참조(amr) 등이 포함될 수 있다.
표준화된 클레임 집합은 상호운용성을 보장한다. 예를 들어, sub 클레임은 해당 발행자(iss) 내에서 사용자를 고유하게 식별하는 값을 가지며, 이 조합은 서로 다른 시스템 간에 동일한 사용자를 안정적으로 참조하는 데 사용된다. nonce 클레임은 재전송 공격을 방지하기 위해 중요한 역할을 한다. RP가 인증 요청 시 전달한 임의의 문자열이 토큰에 포함되어, 응답이 원래 요청에 대한 것임을 검증할 수 있게 한다.
ID 토큰은 항상 JWS 서명되거나 JWE 암호화되어 전달된다. 이를 통해 토큰의 무결성과 출처를 검증할 수 있으며, 민감한 클레임 정보를 보호할 수 있다. RP는 공개된 JWK 세트를 사용하여 서명을 검증하고, 토큰의 iss와 aud 클레임이 예상된 값과 일치하는지 반드시 확인해야 한다. 이 과정을 통해 RP는 토큰이 신뢰할 수 있는 OP로부터 의도된 자신에게 발행되었음을 확신할 수 있다.

OpenID Provider는 인증 서비스를 제공하는 주체이다. 흔히 인증 서버라고도 불리며, 사용자의 신원을 확인하고 ID 토큰 및 액세스 토큰을 발급하는 책임을 진다. OP는 사용자 정보를 저장하고 관리하며, Relying Party의 인증 요청을 처리한다. 주요 기능으로는 사용자 인증, 동의 수집, 토큰 발급 및 관리, 그리고 메타데이터를 공개하는 디스커버리 엔드포인트 제공이 포함된다.
Relying Party는 인증을 필요로 하는 애플리케이션 또는 웹사이트이다. 클라이언트 애플리케이션이라고도 하며, OP를 신뢰하여 사용자의 신원 정보를 얻는다. RP의 역할은 사용자를 OP로 리디렉션하고, 인증 후 반환된 인증 코드나 토큰을 사용하여 OP로부터 최종적인 ID 토큰을 획득하는 것이다. 획득한 ID 토큰을 검증하여 사용자의 신원을 확인하고, 이를 기반으로 세션을 생성하거나 접근을 허가한다.
사용자는 최종 소비자이며, RP가 제공하는 서비스를 이용하려는 주체이다. 사용자는 자신의 신원 정보(예: 이메일, 프로필)를 OP에 저장하고, RP가 해당 정보에 접근할 수 있도록 인증 및 동의를 제공한다. 인증 흐름에서 사용자는 RP의 요청에 따라 OP의 로그인 페이지로 이동하여 자격 증명을 입력하고, RP에 대한 정보 공유에 동의한다.
이 세 구성 요소의 상호작용은 표를 통해 명확히 구분할 수 있다.
구성 요소 | 다른 명칭 | 주요 역할 | 제공/관리 대상 |
|---|---|---|---|
OpenID Provider (OP) | 인증 서버, IdP | 사용자 인증 수행, 토큰 발급 | 사용자 정보, 인증 세션, 공개 키 |
Relying Party (RP) | 클라이언트, 서비스 제공자 | 인증 요청 시작, 토큰 검증 및 사용 | 보호된 리소스 또는 서비스 |
사용자 | 최종 사용자, 리소스 소유자 | 인증 및 동의 제공 | 자신의 신원 정보 |
이 구조에서 RP는 OP를 신뢰하며, 사용자는 OP를 통해 자신의 신원을 증명한다. 이로 인해 사용자는 여러 RP에 대해 반복적으로 가입하거나 로그인할 필요 없이 싱글 사인온 경험을 얻을 수 있다.
OpenID Provider는 OIDC 프로토콜의 핵심 구성 요소로, 인증 서비스를 제공하고 ID 토큰을 발급하는 신뢰할 수 있는 서버이다. 사용자의 신원을 확인하고, Relying Party에게 해당 사용자의 인증 상태와 기본적인 프로필 정보를 안전하게 전달하는 역할을 담당한다. OP는 종종 인증 서버 또는 신원 공급자라고도 불린다.
OP의 주요 기능은 다음과 같다.
기능 | 설명 |
|---|---|
사용자 인증 | 사용자의 신원을 확인하는 인증 프로세스를 관리한다. |
동의 관리 | RP가 요청한 정보에 대한 사용자의 동의를 얻고 관리한다. |
토큰 발급 | |
정보 제공 | UserInfo Endpoint를 통해 RP에게 사용자의 프로필 정보를 제공한다. |
구성 정보 공개 | Discovery 메커니즘을 통해 자신의 설정 및 엔드포인트 정보를 공개한다. |
OP는 OAuth 2.0의 Authorization Server 역할을 확장하여 구축된다. 따라서 OAuth 2.0의 모든 기능을 지원하면서, 추가적으로 JWT 형식의 서명된 ID 토큰을 생성하고 검증하는 능력을 갖춘다. OP의 정확한 설정과 공개 키 정보는 일반적으로 .well-known/openid-configuration 엔드포인트를 통해 자동으로 발견될 수 있다[1]. Google, Microsoft, Naver, Kakao 등의 주요 플랫폼이 대표적인 OP의 사례이다.
Relying Party (RP)는 OIDC 프로토콜에서 인증을 의뢰하는 애플리케이션 또는 서비스를 의미한다. 신뢰 당사자라고도 불리며, 최종 목표는 사용자의 신원을 확인하고 그 정보를 바탕으로 접근을 제어하거나 맞춤형 서비스를 제공하는 것이다. RP는 OpenID Provider (OP)에게 사용자 인증을 위임하고, 그 결과로 받은 ID 토큰을 검증하여 신원 정보를 확보한다.
RP의 주요 역할은 OAuth 2.0의 클라이언트 역할을 확장한 것으로, 인증 과정을 시작하고 완료하는 주체이다. 구체적인 임무는 다음과 같다.
* 사용자를 OP의 인증 엔드포인트로 리디렉션하여 인증 요청을 시작한다.
* OP로부터 발급받은 인증 코드 또는 ID 토큰을 정해진 규칙에 따라 수신한다.
* 수신한 ID 토큰의 서명을 검증하고, 발급자(iss), 대상자(aud), 만료 시간(exp) 등의 클레임을 확인하여 토큰의 유효성을 판단한다.
* 검증이 완료된 토큰에서 사용자 식별자(sub)나 프로필 정보(이름, 이메일 등)를 추출하여 애플리케이션 내부 세션을 생성하거나 자원 접근을 허가한다.
RP는 사전에 OP에 클라이언트로 등록되어야 하며, 이 과정에서 고유한 client_id와 client_secret을 발급받는다. 또한, 토큰을 수신할 리디렉션 URI(Redirect URI)를 등록하여 보안을 강화한다. RP의 종류는 OAuth 2.0 클라이언트 유형에 따라 퍼블릭 클라이언트(모바일 앱, 단일 페이지 애플리케이션)와 컨피덴셜 클라이언트(서버 기반 웹 애플리케이션)로 구분되며, 각 유형에 맞는 인증 흐름을 선택하여 구현해야 한다.
사용자는 OIDC 프로토콜에서 자신의 신원 정보(인증)를 제공받고자 하는 주체이다. 일반적으로 최종 사용자(End-User)를 지칭하며, Relying Party가 제공하는 서비스나 애플리케이션을 이용하는 개인이다. 사용자의 주요 역할은 OpenID Provider에게 자신의 신원을 인증받고, 그 결과인 ID 토큰을 Relying Party에게 안전하게 전달하는 동의를 제공하는 것이다.
인증 과정에서 사용자는 OpenID Provider의 로그인 페이지로 리디렉션되어 자격 증명(예: 아이디, 비밀번호, 다중 인자 인증)을 입력한다. 성공적으로 인증된 후, 사용자는 Relying Party가 요청한 사용자 정보(예: 이메일, 이름, 프로필 사진)에 대한 접근 권한을 허용하거나 거부할 수 있다. 이 동의 단계는 OAuth 2.0의 권한 부여 프레임워크를 기반으로 한다.
사용자 경험과 프라이버시는 중요한 고려 사항이다. OIDC는 선택적 클레임과 범위(scope)를 통해 사용자가 제공하는 정보의 양을 제어할 수 있게 한다. 예를 들어, openid 범위는 필수이지만, profile이나 email 범위는 애플리케이션이 요청하고 사용자가 동의해야만 제공된다.

OIDC는 OAuth 2.0의 인가 부여 타입을 기반으로 여러 인증 흐름을 정의한다. 가장 일반적으로 사용되는 흐름은 Authorization Code Flow이다. 이 흐름에서는 Relying Party (RP)가 사용자를 OpenID Provider (OP)로 리디렉션하고, OP는 사용자를 인증한 후 인가 코드를 RP에게 돌려준다. RP는 이 코드를 백엔드 채널을 통해 OP에 제출하여 ID 토큰과 액세스 토큰을 교환받는다. 이 방식은 코드가 클라이언트의 백엔드 서버로 직접 전달되기 때문에 토큰이 사용자의 브라우저에 노출되지 않아 보안성이 높다.
과거에는 Implicit Flow가 브라우저 기반 클라이언트에서 주로 사용되었다. 이 흐름에서는 인가 코드 교환 단계 없이, 인증 응답이 URL 프래그먼트를 통해 클라이언트에 직접 ID 토큰을 전달한다. 그러나 토큰이 브라우저 히스토리와 서버 로그에 노출될 위험이 있어, 최신 OIDC 보안 권고사항에서는 이 흐름의 사용을 권장하지 않는다. 대신 Authorization Code Flow에 PKCE를 결합하여 공개 클라이언트의 보안을 강화하는 방식을 사용한다.
보다 복잡한 요구사항을 위해 Hybrid Flow가 존재한다. 이는 앞서 언급한 두 흐름의 요소를 혼합한다. 예를 들어, 인증 응답에서 일부 토큰(주로 ID 토큰)은 프론트 채널을 통해 즉시 전달받고, 액세스 토큰과 리프레시 토큰은 백엔드 채널을 통해 안전하게 교환받는다. 이 방식은 프론트엔드에서 즉시 사용자 정보를 확인해야 하면서도, 민감한 토큰을 안전하게 처리해야 할 때 유용하다.
각 흐름의 선택은 클라이언트 애플리케이션의 유형(웹, 모바일, SPA 등)과 보안 요구사항에 따라 결정된다. 주요 흐름의 특징을 비교하면 다음과 같다.
흐름 | 주요 토큰 전달 경로 | 권장 사용처 | 보안 특징 |
|---|---|---|---|
Authorization Code Flow | 백엔드 채널 (코드 교환) | 서버 기반 웹 애플리케이션 | 토큰 노출 위험이 낮음, PKCE와 결합 가능 |
Implicit Flow (사용 권장 안 함) | 프론트 채널 (URL 프래그먼트) | 레거시 자바스크립트 앱 | 토큰 노출 위험 높음, 현대적 구현에서는 대체됨 |
Hybrid Flow | 프론트 및 백엔드 채널 혼용 | 높은 보안이 요구되는 복합 앱 | 일부 정보는 즉시 획득, 주요 토큰은 안전하게 교환 |
Authorization Code Flow는 OIDC와 그 기반이 되는 OAuth 2.0에서 가장 일반적이고 안전한 권한 부여 방식으로 권장된다. 이 흐름은 클라이언트가 사용자 에이전트(일반적으로 웹 브라우저)를 통해 OpenID Provider (OP)의 인증 엔드포인트로 리디렉션하여 인증을 시작한다. 사용자가 로그인하고 필요한 권한에 동의하면, OP는 인가 코드를 클라이언트로 다시 전송한다. 이 코드는 백채널(서버 대 서버 통신)을 통해 액세스 토큰과 ID 토큰을 교환하는 데 사용된다.
이 흐름의 주요 단계는 다음과 같다.
단계 | 행위자 | 설명 |
|---|---|---|
1. 인증 요청 | Relying Party (RP) → 사용자 에이전트 → OpenID Provider (OP) | RP가 사용자 에이전트를 OP의 |
2. 사용자 인증 및 동의 | 사용자 ↔ OP | OP는 사용자에게 로그인을 요청하고 요청된 범위(예: 프로필 정보 접근)에 대한 동의를 구한다. |
3. 인가 코드 발급 | OP → 사용자 에이전트 → RP | 인증이 성공하면 OP는 사용자 에이전트를 RP의 지정된 리디렉션 URI로 돌려보내며, URL 쿼리에 인가 코드를 첨부한다. |
4. 토큰 교환 | RP → OP | RP는 획득한 인가 코드와 자신의 클라이언트 비밀키 등을 사용하여 OP의 |
5. 토큰 응답 | OP → RP |
이 흐름의 핵심 보안 장점은 민감한 토큰(특히 액세스 토큰과 ID 토큰)이 사용자 에이전트를 직접 통과하지 않는다는 점이다. 토큰은 오직 백채널을 통해 RP와 OP 사이에서만 교환된다. 이는 토큰이 브라우저 히스토리나 로그 파일에 노출될 위험을 크게 줄여준다. 또한, 클라이언트 비밀키를 사용한 인가 코드 교환 단계는 요청이 인가된 RP에서 왔음을 OP가 확인할 수 있게 한다.
따라서 이 흐름은 서버 기반의 전통적인 웹 애플리케이션에 가장 적합하며, 모바일 애플리케이션이나 싱글 페이지 애플리케이션에서도 추가적인 보안 조치(예: PKCE 확장 사용)와 함께 널리 채택된다. OAuth 2.0 보안 모범 사례와 OIDC 코어 명세서는 클라이언트가 백채널을 안전하게 유지할 수 있을 때 이 흐름의 사용을 권장한다.
Implicit Flow는 OIDC와 OAuth 2.0에서 정의된 인증 및 권한 부여 흐름 중 하나이다. 이 흐름은 주로 클라이언트 측 자바스크립트 애플리케이션과 같이 클라이언트 시크릿을 안전하게 저장할 수 없는 공개 클라이언트를 위해 설계되었다. Implicit Flow의 가장 큰 특징은 인증 코드를 교환하는 단계 없이, 인증 서버로부터 직접 액세스 토큰과 ID 토큰을 리디렉션 URI를 통해 전달받는다는 점이다.
이 흐름의 단계는 다음과 같이 요약할 수 있다.
1. Relying Party (RP)는 사용자를 OpenID Provider (OP)의 인증 엔드포인트로 리디렉션한다. 이때 response_type 매개변수에 id_token token 또는 token을 지정하여 토큰을 직접 요청한다.
2. 사용자는 OP에서 인증을 완료하고 권한을 부여한다.
3. OP는 요청된 토큰(액세스 토큰 및/또는 ID 토큰)을 URL 프래그먼트(#)에 담아 RP의 리디렉션 URI로 사용자를 돌려보낸다.
4. RP의 클라이언트 측 코드(예: 자바스크립트)는 URL 프래그먼트에서 토큰을 추출하여 사용한다.
특징 | 설명 |
|---|---|
주요 사용처 | SPA(단일 페이지 애플리케이션), 완전한 클라이언트 측 애플리케이션 |
토큰 전달 방식 | URL 프래그먼트(#)를 통한 직접 전달 |
백엔드 교환 단계 | 없음 (인증 코드 교환 단계 생략) |
보안 고려사항 | 토큰이 브라우저 히스토리와 서버 로그에 노출될 위험이 있음 |
현대의 보안 권고사항에서는 Implicit Flow의 사용을 점차 권장하지 않는 추세이다. 특히 액세스 토큰이 브라우저 환경에 직접 노출되어 재전송 공격 등에 취약할 수 있다는 점이 주요 문제로 지적된다. 이를 대체하기 위해 Authorization Code Flow에 PKCE(Proof Key for Code Exchange) 확장을 적용하는 방식이 공개 클라이언트를 위한 더 안전한 대안으로 제시된다. OAuth 2.1 명세 초안에서는 보안상의 이유로 Implicit Flow를 완전히 제외하기도 했다[2].
Hybrid Flow는 Authorization Code Flow의 보안성과 Implicit Flow의 즉시성(토큰이 프론트채널을 통해 즉시 반환됨)을 결합한 인증 방식이다. 이 흐름은 ID 토큰과 인가 코드를 동시에 또는 선택적으로 반환받아, 클라이언트 유형과 요구 보안 수준에 따라 유연하게 사용할 수 있다.
주요 응답 유형(response_type)으로는 code id_token, code token, code id_token token 등이 있다. 예를 들어, code id_token을 사용하면 인가 코드와 ID 토큰이 인증 응답으로 함께 반환된다. 이때 ID 토큰은 사용자 정보를 즉시 확인하는 데 사용되고, 인가 코드는 백채널을 통해 액세스 토큰을 안전하게 교환하는 데 사용된다.
이 방식은 특히 SPA나 모바일 앱과 같이 클라이언트가 공개된 환경에서 유용하다. ID 토큰을 통해 프론트엔드에서 즉시 사용자 인증 상태를 확인할 수 있으면서도, 민감한 액세스 토큰은 백채널 요청을 통해 안전하게 획득할 수 있기 때문이다. 또한, 인가 코드를 ID 토큰에 포함시켜 전달함으로써 재전송 공격을 방지하는 추가적인 보안 이점을 제공한다[3].
다음은 Hybrid Flow의 일반적인 단계를 요약한 표이다.
단계 | 설명 |
|---|---|
1. 인증 요청 | Relying Party가 OpenID Provider에 |
2. 사용자 인증 | |
3. 인증 응답 | OP가 지정된 응답 유형에 따라 인가 코드와 토큰(ID 토큰, 액세스 토큰)을 RP의 리디렉션 URI로 반환한다. |
4. 토큰 교환 | |
5. 리소스 접근 |

OIDC는 인증을 제공하지만, 여전히 OAuth 2.0 프레임워크 위에서 동작하기 때문에 여러 보안 위협에 노출될 수 있다. 주요 보안 고려사항은 ID 토큰과 액세스 토큰의 안전한 처리, 그리고 다양한 공격 벡터로부터의 보호에 초점을 맞춘다.
가장 중요한 보안 요소 중 하나는 토큰의 보안이다. ID 토큰은 일반적으로 JSON Web Token 형식으로 발행되며, 서명(JWS) 또는 서명 및 암호화(JWE)되어 전달된다. Relying Party는 반드시 토큰의 서명을 검증하고, 발행자(iss 클레임), 대상자(aud 클레임), 만료 시간(exp 클레임) 등의 필수 클레임을 확인해야 한다. 특히 액세스 토큰이 사용자 정보 엔드포인트에 접근하는 데 사용될 때, 이 토큰이 유출되면 민감한 개인 정보가 노출될 수 있으므로, 짧은 수명과 안전한 저장이 요구된다[4]. 또한, 인가 코드나 토큰이 승인되지 않은 당사자에게 탈취되는 것을 방지하기 위해, PKCE 확장을 Authorization Code Flow와 함께 사용하는 것이 강력히 권장된다.
다양한 공격을 방지하기 위한 메커니즘이 표준에 정의되어 있다. 재전송 공격을 막기 위해, ID 토큰에는 고유한 난수인 nonce 클레임을 포함시키고, Relying Party가 이를 검증해야 한다. 또한, 토큰이 의도된 수신자에게만 전달되도록 보장하기 위해, 클라이언트 인증을 엄격하게 적용해야 한다. 교차 사이트 요청 위조(CSRF) 공격을 방지하기 위한 state 매개변수의 사용도 필수적이다. 최근에는 보안성이 낮은 Implicit Flow보다는 Authorization Code Flow를, 프론트 채널보다는 백 채널을 통한 토큰 전달을 선호하는 추세이다.
고려사항 | 설명 | 대응 방안 |
|---|---|---|
토큰 유출 | 짧은 토큰 수명, HTTPS 사용, 클라이언트 측 안전한 저장. | |
재전송 공격 | 탈취한 토큰을 악의적으로 재사용함. |
|
클라이언트 위조 | 악성 애플리케이션이 정당한 클라이언트를 사칭함. | |
리디렉션 URI 검증 오류 | 토큰이 등록되지 않은 악성 사이트로 전송됨. | OpenID Provider가 리디렉션 URI를 사전에 등록된 목록과 정확히 비교 검증. |
OIDC의 핵심 보안 요소는 ID 토큰과 액세스 토큰을 안전하게 관리하는 것이다. ID 토큰은 JWT 형식으로 구성되며, 서명을 통해 변조를 방지한다. 서명 알고리즘으로는 RS256과 같은 비대칭 키 방식을 권장하며, 토큰 수신 측(Relying Party)은 반드시 OpenID Provider의 공개 키를 사용하여 서명을 검증해야 한다. 액세스 토큰은 민감한 사용자 데이터에 접근하는 데 사용되므로, 전송 및 저장 시 HTTPS를 통한 암호화가 필수적이다.
토큰의 수명을 최소화하는 것이 중요하다. 짧은 유효 기간을 설정하고, 리프레시 토큰을 사용하여 새로운 액세스 토큰을 발급받는 방식을 적용한다. 리프레시 토큰은 더 높은 보안 수준으로 보호되어야 하며, 클라이언트 자격 증명과 함께 안전하게 저장된다. 토큰이 예상치 못한 경로나 클라이언트로 전송되는 것을 방지하기 위해, 토큰 발급 시 aud(대상자) 클레임을 명시적으로 지정하고 수신 측에서 이를 검증해야 한다.
보안 조치 | 적용 대상 | 주요 목적 |
|---|---|---|
JWT 서명 검증 | 토큰 변조 및 위조 방지 | |
HTTPS 전송 | 모든 토큰 | 전송 중 도청 방지 |
짧은 토큰 수명 | 토큰 탈취 시 피해 범위 제한 | |
대상자(aud) 클레임 검증 | 모든 토큰 | 토큰 재전송 공격 방지 |
안전한 토큰 저장 | 클라이언트 측 | 토큰 유출 방지 |
클라이언트 애플리케이션은 발급받은 토큰을 안전하게 저장해야 한다. 웹 애플리케이션의 경우 HttpOnly 및 Secure 플래그가 설정된 쿠키에 저장하는 것이 일반적이며, 모바일 앱은 운영체제가 제공하는 안전한 저장소를 활용해야 한다. 토큰이 더 이상 필요하지 않을 경우, OpenID Provider에 제공된 토큰 철회 엔드포인트를 통해 명시적으로 토큰을 무효화하는 것이 좋다.
재전송 공격은 인증 요청을 공격자가 가로채어 다른 세션에서 재사용하는 공격 방식이다. OIDC는 이러한 공격을 방지하기 위해 nonce와 state 매개변수를 핵심적인 수단으로 활용한다.
nonce는 ID 토큰에 포함되는 임의의 문자열 값이다. Relying Party는 인증 요청 시 nonce 값을 생성하여 OpenID Provider에 전달한다. Provider는 이 값을 ID 토큰의 nonce 클레임에 그대로 포함시켜 발급한다. RP는 수신한 ID 토큰의 nonce 값이 자신이 보낸 원본 요청의 값과 일치하는지 반드시 검증해야 한다. 이 과정을 통해 토큰이 특정 인증 요청에 대해 정상적으로 발급된 것임을 보장하고, 중간에서 가로채인 토큰의 재사용을 효과적으로 차단한다.
state 매개변수는 주로 교차 사이트 요청 위조 공격을 방지하고 사용자 세션 상태를 유지하는 데 사용된다. RP는 인증 요청을 시작할 때 임의의 state 값을 생성하여 Provider로 보낸다. Provider는 인증 응답(보통 인가 코드와 함께)에 이 state 값을 그대로 담아 돌려보낸다. RP는 응답에 포함된 state 값이 자신이 생성하여 보낸 값과 일치하는지 검증해야 한다. 이 검증이 실패하면 해당 응답을 처리하지 않고 버린다. 아래 표는 두 매개변수의 주요 목적과 역할을 비교한 것이다.
매개변수 | 주요 목적 | 검증 주체 | 토큰/응답 내 위치 |
|---|---|---|---|
| 재전송 공격 방지, ID 토큰과 특정 요청 연결 | Relying Party (RP) | ID 토큰의 |
| CSRF 공격 방지, 사용자 세션 상태 유지 | Relying Party (RP) | 인증 응답의 쿼리 파라미터 또는 폼 필드 |
이러한 매커니즘은 표준화된 필수 보안 조치로 간주된다. 모든 OIDC 호환 RP 구현체는 nonce와 state를 적절히 생성, 전달, 검증하는 로직을 포함해야 한다. 특히 암시적 흐름이나 하이브리드 흐름과 같이 ID 토큰이 프론트채널을 통해 직접 전달되는 경우, nonce 검증은 재전송 공격에 대한 가장 기본적이고 필수적인 방어 수단이 된다.

구현 및 표준 섹션은 OIDC의 핵심 프로토콜을 보다 쉽고 안전하게 적용할 수 있도록 정의된 보조 표준들을 다룬다. 이 표준들은 OpenID Foundation에 의해 관리되며, 상호운용성을 보장하고 배포 복잡성을 줄이는 데 목적이 있다.
가장 중요한 보조 표준 중 하나는 OpenID Connect Discovery(OIDC Discovery)이다. 이는 Relying Party (RP)가 OpenID Provider (OP)의 구성 정보를 자동으로 발견할 수 있도록 하는 메커니즘이다. RP는 제공자의 발행자 식별자(Issuer Identifier)만 알고 있으면, 정해진 규칙에 따라 구성 정보 엔드포인트(일반적으로 /.well-known/openid-configuration)에서 메타데이터를 획득할 수 있다. 이 메타데이터에는 인증 및 토큰 엔드포인트 URL, 지원하는 암호화 알고리즘, 공개 키 위치(JWKS URI) 등이 포함되어 있어 수동 설정을 크게 줄여준다.
또 다른 주요 표준은 OpenID Connect Dynamic Client Registration이다. 이는 RP가 OP에 사전 등록 없이 동적으로 클라이언트를 등록할 수 있도록 하는 프로토콜이다. 등록 요청은 클라이언트 메타데이터(예: 리디렉션 URI, 응답 유형)를 포함하며, OP는 등록 응답으로 고유한 클라이언트 식별자(client_id)와 비밀(client_secret)을 발급한다. 이는 특히 모바일 애플리케이션이나 다중 테넌트 서비스와 같이 클라이언트 사전 등록이 어려운 환경에서 유용하다. 다음은 Discovery 메타데이터의 주요 항목 예시이다.
항목 | 설명 |
|---|---|
| OP의 고유 식별자 URL |
| 사용자 인증을 시작하는 엔드포인트 URL |
| |
| JSON Web Key Set(JWKS) 문서가 위치한 URL |
| OP가 지원하는 OAuth 스코프 목록 |
| 지원하는 응답 유형(예: |
이 외에도 OIDC는 세션 관리, 로그아웃, 개인정보 보호를 위한 표준 확장을 포함한다. 예를 들어, OpenID Connect Session Management는 싱글 사인온 (SSO) 세션 상태를 RP가 모니터링할 수 있게 하며, OpenID Connect Front-Channel Logout과 Back-Channel Logout은 여러 사이트에서의 연동 로그아웃을 구현하는 방법을 정의한다. 이러한 표준화된 확장 기능들은 OIDC가 단순한 인증 프로토콜을 넘어 포괄적인 신원 관리 솔루션으로 자리 잡는 데 기여한다.
Discovery는 OpenID Connect에서 OpenID Provider의 구성 정보와 지원하는 기능을 동적으로 조회하기 위한 표준화된 메커니즘이다. 이는 클라이언트 애플리케이션이 서버의 엔드포인트 URL, 지원하는 인증 방식, 서명 알고리즘 등 필수 정보를 하드코딩하지 않고도 자동으로 획득할 수 있게 한다. Discovery의 핵심은 Well-Known URI 경로(/.well-known/openid-configuration)를 통해 제공되는 JSON 형식의 구성 문서이다. 이 문서는 OIDC 인증 요청을 구성하는 데 필요한 모든 메타데이터를 포함한다.
구성 문서에는 다음과 같은 주요 정보가 명시된다.
정보 | 설명 |
|---|---|
| OpenID Provider의 고유 식별자 |
| 인증 코드를 요청하는 엔드포인트 URL |
| |
| |
| 지원하는 OAuth 2.0 스코프 목록 |
| 지원하는 응답 타입(예: code, id_token) 목록 |
| 지원하는 주체 식별자 타입 |
이 메커니즘은 배포와 유지보수를 단순화한다. 예를 들어, OpenID Provider가 새로운 서명 알고리즘을 추가하거나 엔드포인트 URL을 변경할 때, 모든 Relying Party가 클라이언트 구성을 수동으로 업데이트할 필요가 없다. 각 클라이언트는 인증 흐름을 시작할 때 구성 문서를 조회하여 최신 정보를 사용한다. 이는 분산 환경과 다중 테넌트 시스템에서 특히 유용하다.
Discovery는 OIDC의 상호운용성을 보장하는 기반이 된다. 서로 다른 벤더의 OP와 RP가 사전 합의 없이도 표준화된 방식으로 연결 정보를 교환할 수 있게 한다. 이는 싱글 사인온과 연합 인증 시나리오에서 광범위한 채택을 가능하게 한 핵심 기능 중 하나이다.
Dynamic Client Registration은 OIDC와 OAuth 2.0에서 클라이언트 애플리케이션이 OpenID Provider에 자신의 구성 정보를 자동으로 등록할 수 있도록 하는 프로토콜 확장이다. 이 메커니즘은 클라이언트의 사전 등록 단계를 간소화하여 배포와 관리를 용이하게 한다. 전통적인 방식에서는 개발자가 OpenID Provider의 관리 콘솔에 수동으로 접속해 client_id, redirect_uri 등을 등록해야 했지만, Dynamic Client Registration을 통해 이 과정을 자동화된 API 호출로 대체할 수 있다.
등록 프로세스는 일반적으로 Relying Party가 OP의 등록 엔드포인트(/register)에 HTTP POST 요청을 보내는 것으로 시작한다. 요청에는 클라이언트의 메타데이터가 JSON 형식으로 포함된다. OP는 이 요청을 검증한 후 고유한 client_id와 종종 client_secret을 발급하여 응답한다. 등록 요청에 포함될 수 있는 주요 메타데이터는 다음과 같다.
메타데이터 필드 | 설명 |
|---|---|
| 인증 후 사용자를 리디렉션할 URI 목록 |
| 토큰 엔드포인트에서의 클라이언트 인증 방식 (예: |
| 지원하는 승인 타입 (예: |
| 지원하는 응답 타입 (예: |
| 애플리케이션 유형 ( |
이 방식은 특히 다중 테넌트 SaaS 애플리케이션이나 새로운 클라이언트 인스턴스가 빈번하게 생성되는 환경에서 유용하다. 각 테넌트나 인스턴스가 별도의 클라이언트 등록을 필요로 할 때, 수동 개입 없이 프로그래밍 방식으로 구성이 가능해진다. 또한, 등록 시점에 클라이언트의 기능(지원하는 승인 타입, 암호화 알고리즘 등)을 명시적으로 선언함으로써 보안 정책을 더 세밀하게 적용할 수 있다.
보안을 위해 등록 프로세스는 인증 없이도 수행될 수 있지만, 이는 등록된 클라이언트의 권한을 제한하는 경우가 많다. 일부 OP는 등록 요청에 초기 액세스 토큰을 요구하거나, 등록 후 클라이언트 구성 정보를 안전하게 업데이트하거나 회수할 수 있는 기능을 제공한다. 이 표준은 클라이언트 구성 정보의 유효성을 지속적으로 관리하고, 필요시 등록을 취소할 수 있는 메커니즘도 포함한다[5].

OIDC는 인증과 권한 부여를 분리한 OAuth 2.0 프레임워크 위에 표준화된 신원 정보 교환 계층을 추가하여, 다양한 응용 사례에서 활용된다. 가장 대표적인 활용 분야는 기업 및 포털 서비스의 싱글 사인온 구현이다. 사용자는 하나의 인증 공급자(예: 회사 포털, 구글, 네이버 계정)로 로그인한 후, OIDC를 지원하는 여러 애플리케이션(예: 지메일, 슬랙, GitHub)에 추가 로그인 절차 없이 접근할 수 있다. 이는 사용자 경험을 향상시키고, 개별 애플리케이션마다 비밀번호를 관리해야 하는 부담과 보안 위험을 줄인다.
모바일 애플리케이션과 SPA에서도 OIDC는 중요한 역할을 한다. 이러한 클라이언트는 Authorization Code Flow with PKCE와 같은 보안 흐름을 사용하여 안전하게 인증을 수행할 수 있다. 표준화된 ID 토큰은 사용자의 기본 프로필 정보(이메일, 이름 등)를 안전하게 전달하여, 앱 내에서 즉시 개인화된 서비스를 제공하는 데 기초 데이터로 활용된다. 또한, 백엔드 API 호출 시 액세스 토큰과 함께 ID 토큰을 사용하여 사용자 컨텍스트를 전파할 수 있다.
최근에는 마이크로서비스 아키텍처 환경에서의 통합 인증 및 신원 정보 관리 수단으로도 주목받고 있다. 각 마이크로서비스는 중앙 OpenID Provider로부터 발급받은 JWT 형식의 ID 토큰을 검증함으로써, 사용자 신원을 확인하고 필요한 권한을 부여받을 수 있다. 이는 서비스 간 통신의 보안을 강화하고, 인증 로직의 중복 구현을 피하게 해준다.
응용 분야 | 주요 특징 | 사용 흐름 예시 |
|---|---|---|
엔터프라이즈 SSO | 여러 내부 업무 시스템 통합 로그인 | 직원이 회사 포털 로그인 후, JIRA, Confluence 등에 자동 접근 |
소셜 로그인 | 타사 서비스 간편 가입/로그인 | 웹사이트에서 "Google로 로그인" 버튼 클릭 시 사용자 정보 획득 |
모바일/SPA 인증 | 공용 클라이언트에서의 안전한 인증 | 모바일 앱이 PKCE를 사용한 인증 코드 흐름으로 ID 토큰 획득 |
API 보안 | 마이크로서비스 간 사용자 컨텍스트 전파 |
OIDC는 싱글 사인온 구현을 위한 현대적인 표준 프로토콜로 널리 채택된다. OIDC 기반 SSO는 사용자가 한 번의 로그인으로 여러 애플리케이션 또는 웹사이트에 접근할 수 있도록 한다. 이는 중앙 집중식 OpenID Provider가 사용자의 신원을 인증하고, 그 증거를 ID 토큰 형태로 각 애플리케이션(Relying Party)에 제공하는 방식으로 작동한다. 사용자는 복잡한 비밀번호를 여러 개 관리할 필요가 없어지고, 조직은 사용자 계정과 인증 정책을 통합적으로 관리할 수 있어 보안과 편의성을 동시에 향상시킨다.
기업 환경이나 교육 포털, 정부 서비스와 같이 여러 내부 시스템을 운영하는 곳에서 OIDC SSO는 특히 효과적이다. 예를 들어, 직원이 회사의 인증 포털에 로그인하면, 별도의 로그인 없도 CRM 시스템, 메일, 문서 저장소 등에 자동으로 접근 권한을 부여받을 수 있다. 이 과정에서 각 애플리케이션은 사용자의 개인 데이터 전체를 받는 대신, 필요한 최소한의 정보(예: 이메일, 이름)만 클레임 형태로 ID 토큰을 통해 안전하게 전달받는다.
OIDC SSO의 주요 이점은 다음과 같이 정리할 수 있다.
이점 | 설명 |
|---|---|
사용자 편의성 | 하나의 자격 증명으로 여러 서비스 이용 가능 |
보안 강화 | 중앙에서 강력한 인증 정책(예: 다중 인증) 적용 가능 |
관리 효율성 | 사용자 생명주기(계정 생성, 정지, 삭제)를 중앙에서 통제 |
개발 편의성 | 표준화된 프로토콜을 사용하여 애플리케이션 통합이 용이 |
SAML 같은 이전 SSO 프로토콜에 비해, OIDC는 JSON과 RESTful API를 기반으로 하여 모바일 애플리케이션, SPA와 같은 현대적인 아키텍처에 더 가볍고 쉽게 통합될 수 있다. 또한 OAuth 2.0 인가 프레임워크를 그대로 사용하기 때문에, 인증과 더불어 API에 대한 접근 권한 위임도 동일한 흐름 내에서 처리할 수 있다는 장점이 있다.
모바일 애플리케이션은 네이티브 앱과 모바일 웹의 형태로 존재하며, OIDC는 이러한 환경에 적합한 인증 및 사용자 정보 제공 메커니즘을 정의합니다. OAuth 2.0만으로는 사용자 신원 확인이 명시적이지 않다는 한계가 있었으나, OIDC의 ID 토큰은 JWT 형식으로 표준화된 사용자 클레임을 포함하여 이를 해결합니다. 모바일 앱은 종종 외부 인증 서버(OP)를 통해 로그인을 위임하는 구조를 가지므로, OIDC의 표준화된 엔드포인트와 프로토콜이 광범위한 호환성을 보장합니다.
모바일 환경에서는 보안과 사용자 경험이 중요한 요소입니다. OIDC는 모바일 클라이언트에 적합한 여러 인증 흐름을 지원합니다. 특히, Authorization Code Flow with PKCE(Proof Key for Code Exchange)는 공용 클라이언트(모바일 앱)에 대한 보안 강화를 위해 설계된 표준 방식으로, 권한 부여 코드를 가로채는 공격을 방지합니다. 네이티브 앱은 내장 웹뷰나 시스템 브라우저를 통해 인증을 수행할 수 있으며, OIDC Discovery를 통해 OP의 설정을 동적으로 얻어 안정적으로 연결할 수 있습니다.
아래 표는 모바일 애플리케이션 유형별 OIDC 구현 특징을 요약한 것입니다.
애플리케이션 유형 | 권장 인증 흐름 | 주요 고려사항 |
|---|---|---|
네이티브 앱 (iOS/Android) | Authorization Code Flow with PKCE | 시스템 브라우저 사용 권장, 앱 간 URL 리다이렉트 처리 |
모바일 웹 앱 (SPA) | Authorization Code Flow with PKCE | 토큰을 안전하게 저장(예: 메모리), 리프레시 토큰 사용 주의 |
하이브리드/크로스 플랫폼 앱 | Authorization Code Flow with PKCE | 플랫폼별 딥 링크 처리, 보안 저장소 활용 |
이러한 구현을 통해 모바일 앱은 사용자에게 별도의 비밀번호 입력 부담을 줄이면서도, Google, Facebook, 기업 IdP 등 다양한 OpenID Provider를 통한 편리한 싱글 사인온 경험을 제공할 수 있습니다. 또한, 표준화된 사용자 정보(프로필 클레임)는 앱 내 개인화된 서비스를 구성하는 데 활용됩니다.

OIDC는 인증과 권한 부여를 위한 표준으로, 기존의 SAML 및 JWT와 같은 기술과 비교하여 그 차이점과 관계를 이해하는 것이 중요하다.
SAML(Security Assertion Markup Language)은 주로 엔터프라이즈 환경의 웹 싱글 사인온을 위해 설계된 XML 기반의 오래된 표준이다. 반면, OIDC는 모바일 애플리케이션, 단일 페이지 애플리케이션 및 현대적인 마이크로서비스 아키텍처에 더 적합한 JSON 기반의 경량 프로토콜이다. 두 기술 모두 인증 정보를 교환하는 데 사용되지만, 다음과 같은 주요 차이점이 존재한다.
비교 항목 | SAML | OIDC |
|---|---|---|
프로토콜 기반 | 주로 SOAP 및 브라우저 POST 바인딩 사용 | OAuth 2.0 프레임워크 위에서 동작 |
데이터 형식 | XML | JSON |
토큰 유형 | SAML 어서션 | ID 토큰(JWT 형식), 액세스 토큰 |
사용 사례 | 전통적인 엔터프라이즈 SSO | 모바일 앱, 최신 웹 앱, API 보안 |
복잡성 | 상대적으로 복잡하고 무거움 | 간단하고 구현이 용이 |
SAML은 강력한 보안과 성숙한 엔터프라이즈 기능을 제공하지만, OIDC는 개발의 용이성, RESTful API와의 호환성, 그리고 OAuth 2.0 생태계와의 긴밀한 통합으로 인해 최신 애플리케이션에서 선호되는 경향이 있다.
JWT(JSON Web Token)는 OIDC의 핵심 구성 요소이지만, 그 자체로는 프로토콜이 아닌 토큰 표준이다. OIDC는 인증 과정에서 사용자의 신원 정보를 전달하는 수단으로 JWT 형식의 ID 토큰을 정의하여 사용한다. 즉, JWT는 정보를 안전하게 표현하는 포맷이며, OIDC는 이 포맷을 사용하여 인증 프로토콜을 구축한다. OIDC의 ID 토큰은 반드시 JWT로 인코딩되며, 여기에는 사용자 식별자, 발행자, 만료 시간 등의 표준 클레임이 포함된다. 따라서 OIDC를 구현한다는 것은 JWT의 생성, 서명, 검증 및 처리 메커니즘을 필수적으로 활용하는 것을 의미한다.
SAML과 OIDC는 모두 인증과 권한 부여를 위한 표준 프로토콜이지만, 설계 철학과 기술적 접근 방식에서 뚜렷한 차이를 보인다. SAML은 주로 엔터프라이즈 환경과 페더레이션 싱글 사인온을 위해 설계된 XML 기반의 오래된 표준이다. 반면, OIDC는 모바일 애플리케이션, 단일 페이지 애플리케이션 및 현대적인 웹 API와 같은 현대적 사용 사례에 맞춰 설계된 JSON과 REST API를 중심으로 한 더 간단하고 경량화된 프로토콜이다.
두 프로토콜의 주요 차이점은 다음과 같이 표로 정리할 수 있다.
비교 항목 | SAML (Security Assertion Markup Language) | OIDC (OpenID Connect) |
|---|---|---|
프로토콜 기반 | SOAP 및 XML 기반의 복잡한 메시지 교환 | |
토큰 형식 | XML 형식의 SAML 어서션 | JSON Web Token 형식의 ID 토큰 |
사용 사례 | 전통적인 엔터프라이즈 SSO, B2B 통합 | 모바일 앱, 최신 웹 앱, API 접근 제어 |
데이터 내용 | 사용자 속성과 권한 부여 결정을 포함한 어서션 | 사용자 식별 정보(클레임)와 인증 사실 |
프로토콜 유연성 | 비교적 엄격하고 복잡한 바인딩 | OAuth 2.0의 다양한 흐름(Authorization Code, Implicit 등) 활용 |
SAML은 강력한 보안과 복잡한 페더레이션 신뢰 관계를 수립하는 데 강점이 있지만, 구현과 디버깅이 복잡하다는 단점이 있다. OIDC는 개발자 친화적인 API와 간단한 통합 과정을 제공하며, JWT의 경량성 덕분에 성능상 이점을 가진다. 결과적으로, 새로운 클라우드 기반 애플리케이션과 마이크로서비스 아키텍처에서는 OIDC가 선호되는 경향이 있다. 그러나 많은 기업 내부 시스템과 레거시 애플리케이션은 여전히 SAML을 기반으로 한 인프라를 유지하고 있어, 두 표준이 공존하는 경우가 많다.
OIDC의 핵심 구성 요소인 ID 토큰은 JWT 형식으로 인코딩되어 전달된다. JWT는 JSON 객체를 URL 안전 문자열로 표현하는 개방형 표준(RFC 7519)으로, 헤더, 페이로드, 서명의 세 부분으로 구성된다. OIDC는 이 JWT 구조를 채택하여 ID 토큰을 표준화함으로써 상호 운용성을 보장한다. ID 토큰의 페이로드에는 iss(발급자), sub(주체 식별자), aud(대상자), exp(만료 시간)와 같은 표준 클레임과 사용자 프로필 정보를 담은 추가 클레임이 포함된다.
JWT는 자체 포함적(self-contained) 특성을 가지며, 서명을 통해 토큰의 무결성과 발행자를 검증할 수 있다. 이는 OIDC Relying Party (RP)가 토큰의 유효성을 확인하기 위해 매번 OpenID Provider (OP)에 문의할 필요 없이, 사전에 교환된 공개 키를 이용해 로컬에서 검증할 수 있음을 의미한다. 이 방식은 검증 과정의 효율성을 높이고, OP에 대한 의존성을 줄인다.
다음은 ID 토큰이 JWT로서 가지는 주요 클레임의 예시이다.
클레임 | 설명 | 예시 |
|---|---|---|
| 토큰을 발행한 OP의 식별자(URL) |
|
| 사용자를 고유하게 식별하는 주체 식별자 |
|
| 토큰의 수신자(RP의 클라이언트 ID) |
|
| 토큰의 만료 시간(Unix 타임스탬프) |
|
| 토큰이 발행된 시간(Unix 타임스탬프) |
|
OIDC는 JWT를 ID 토큰의 표준 포맷으로 규정하지만, 모든 JWT가 OIDC ID 토큰은 아니다. JWT는 더 넓은 범위의 인가(OAuth 2.0 액세스 토큰)나 정보 교환에 사용될 수 있는 범용 포맷이다. 반면, OIDC ID 토큰은 반드시 특정 표준 클레임 집합을 포함하고 인증 이벤트를 증명하는 데 사용되는 특수한 형태의 JWT이다. 따라서 OIDC 구현에서는 JWT 라이브러리를 활용하지만, 추가로 ID 토큰의 필수 클레임 검증 및 서명 검증을 철저히 수행해야 한다.

OIDC는 기술적 표준을 넘어 현대 디지털 생태계의 사용자 경험과 신원 관리 패러다임에 지대한 영향을 미쳤다. 이 표준의 등장은 단순한 인증 프로토콜의 진화가 아니라, 웹과 애플리케이션에서 사용자 중심의 상호운용성을 실현하는 중요한 이정표가 되었다.
OIDC의 광범위한 채택은 "로그인 with..." 버튼(예: Google 로그인, Facebook 로그인)을 일상적인 경험으로 만드는 데 기여했다. 이는 사용자가 수많은 사이트에 별도의 계정을 생성하고 암호를 기억해야 하는 부담을 크게 줄여주었다. 개발자 관점에서는 복잡한 인증 시스템을 직접 구축하고 유지 관리하는 부담에서 벗어나, 검증된 전문 ID 공급자에 핵심 인증 기능을 위임할 수 있게 되었다. 이로 인해 개발 리소스는 핵심 비즈니스 로직에 더 집중할 수 있게 되었다.
표준화 과정에서 OIDC는 커뮤니티의 적극적인 피드백과 실무 적용 경험을 반영하며 진화해왔다. 예를 들어, 초기에는 Implicit Flow가 모바일 웹 앱 등에서 널리 사용되었으나, 보안 강화 추세에 따라 Authorization Code Flow with PKCE가 더 권장되는 방식으로 대체되는 등, 보안 요구사항의 변화에 능동적으로 대응해왔다. 또한 OAuth 2.0의 확장성 위에 구축되었기 때문에, 새로운 인증 요구사항이 나타날 때마다 유연하게 확장될 수 있는 토대를 제공한다.
구분 | 내용 |
|---|---|
문화적 영향 | "소셜 로그인"의 대중화와 디지털 신원의 이동성 증대 |
개발 패러다임 | 인증/인가 인프라의 외부화(아웃소싱)와 IDaaS 시장 성장 촉진 |
진화 방향 | 보안 강화(예: PKCE 도입), 사용자 프라이버시 보호(예: OpenID Connect for Identity Assurance) 강조 |
