OAuth 2.0과 OpenID Connect(OIDC)의 차이를 설명해주세요.
답변 포인트
인가와 인증의 차이, Access Token과 ID Token의 목적을 구분해보세요.
정답 및 해설
빠른 요약
OAuth 2.0은 사용자가 비밀번호를 직접 제공하지 않고 특정 리소스 접근 권한을 위임하는 인가 프레임워크입니다. API 호출에는 Access Token을 사용합니다.
OAuth 2.0은 인증(Authentication)이 아니라 인가(Authorization) 를 위한 프레임워크입니다. OpenID Connect는 OAuth 2.0 위에 인증 계층을 얹어 사용자의 신원을 확인할 수 있게 만든 표준입니다.
인증과 인가
인증(Authentication):
- 사용자가 누구인지 확인
- 예: 로그인, 신원 확인
인가(Authorization):
- 사용자가 무엇을 할 수 있는지 허용
- 예: 내 구글 드라이브 파일 읽기 권한 부여
OAuth 2.0
OAuth 2.0은 사용자가 비밀번호를 직접 넘기지 않고, 특정 리소스에 대한 접근 권한을 위임하는 방식입니다.
예:
"이 앱이 내 GitHub 저장소 목록을 읽도록 허용합니다."
등장 주체:
| 주체 | 설명 |
|---|---|
| Resource Owner | 사용자 |
| Client | 권한을 요청하는 애플리케이션 |
| Authorization Server | 권한 부여 및 토큰 발급 서버 |
| Resource Server | 보호된 API 서버 |
OAuth 2.0에서 클라이언트는 Access Token을 받아 API를 호출합니다.
Authorization: Bearer access-tokenAuthorization Code Flow
웹 서비스에서 가장 일반적인 흐름입니다.
- 사용자를 Authorization Server로 리다이렉트합니다.
- 사용자가 로그인하고 권한을 승인합니다.
- 서버가
authorization code를 클라이언트로 돌려줍니다. - 클라이언트가 code를 Access Token으로 교환합니다.
- Access Token으로 Resource Server API를 호출합니다.
PKCE를 함께 사용하면 공개 클라이언트(SPA, 모바일 앱)에서도 code 탈취 위험을 줄일 수 있습니다.
OpenID Connect
OIDC는 OAuth 2.0에 사용자 인증 정보를 표준화한 프로토콜입니다. 핵심은 ID Token입니다.
{
"sub": "123456",
"email": "user@example.com",
"name": "Kim",
"iss": "https://accounts.example.com",
"aud": "client-id"
}ID Token은 보통 JWT 형식이며, 사용자가 누구인지 클라이언트가 확인하는 데 사용합니다.
Access Token과 ID Token 차이
| 토큰 | 목적 | 대상 |
|---|---|---|
| Access Token | API 접근 권한 증명 | Resource Server |
| ID Token | 사용자 인증 결과 전달 | Client |
중요한 점은 ID Token을 API 호출 권한으로 사용하면 안 된다는 것입니다. API 호출에는 Access Token을 사용해야 합니다.
정리
OAuth 2.0은 "이 앱이 어떤 리소스에 접근해도 되는가"를 다루는 인가 프레임워크이고, OIDC는 "로그인한 사용자가 누구인가"를 다루는 인증 프로토콜입니다. 소셜 로그인은 대부분 OIDC를 사용하며, API 권한 위임은 OAuth 2.0의 Access Token을 사용합니다.
OAuth 2.0과 OIDC의 핵심 차이
OAuth 2.0은 “권한 위임” 프로토콜입니다. 사용자가 어떤 애플리케이션에 자신의 리소스 접근 권한을 위임하는 흐름을 정의합니다. OIDC는 OAuth 2.0 위에 “인증” 계층을 추가해 사용자가 누구인지 확인할 수 있게 합니다.
OAuth 2.0: 이 앱이 내 Google Drive 파일을 읽어도 되는가?
OIDC: 로그인한 사용자가 누구인가?토큰 관점
| 토큰 | 용도 |
|---|---|
| Access Token | API 리소스 접근 권한 증명 |
| Refresh Token | 새 access token 발급 |
| ID Token | 사용자 인증 결과. OIDC에서 사용 |
ID Token은 보통 JWT이며 sub, iss, aud, exp 같은 클레임을 검증해야 합니다.
실무 보안 포인트
- SPA/모바일에서는 Authorization Code + PKCE 흐름을 사용합니다.
- redirect URI는 정확히 등록된 값만 허용합니다.
- access token을 “로그인 세션”처럼 프론트에서 임의 해석하지 않습니다.
- ID Token은 서명, issuer, audience, 만료 시간을 검증해야 합니다.