0Pricing
Cyber Security Academy · 강의

OpenID Connect (OIDC)

OAuth 위에 사용자 식별 기능을 추가합니다.

OpenID Connect (OIDC)은(는) CoddyKit의 무료 Cyber Security Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cyber Security Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

OIDC가 필요한 이유

OpenID Connect는 OAuth 2.0 위에 구축된 얇은 신원 계층입니다. OAuth가 이 앱이 무엇을 할 수 있는지에 답한다면, OIDC는 사용자가 누구인지에 답합니다.

  • 클라이언트가 사용자를 인증하고 검증된 신원 클레임을 받는 방식을 표준화합니다.
  • 인증을 증명하는 암호학적으로 서명된 어설션인 ID 토큰을 도입합니다.

OIDC가 등장하기 전에는 개발자가 OAuth 액세스 토큰을 로그인에 잘못 사용했고, 그 결과 혼동된 대리인 및 사칭 버그가 발생했습니다.

ID 토큰(JSON 웹 토큰)

OIDC를 대표하는 산출물은 인증 이벤트를 설명하는 서명된 ID 토큰, 즉 JSON 웹 토큰입니다.

  • 로그인한 사용자와 로그인한 시점에 관한 클레임을 담습니다.
  • 리소스 서버가 아니라 클라이언트가 사용하도록 설계되었습니다.

ID 토큰을 액세스 자격 증명으로 API에 보내지 말고, 서명과 클레임을 검증하지 않은 채 수락하지 마십시오.

Header.Payload.Signature
{
  "iss": "https://idp.example",
  "sub": "248289761001",
  "aud": "app123",
  "exp": 1718000000,
  "iat": 1717996400,
  "nonce": "n-abc"
}

핵심 ID 토큰 클레임

ID 토큰을 검증한다는 것은 서명만 확인하는 것이 아니라 특정 클레임을 확인한다는 뜻입니다.

  • iss 발급자는 예상한 IdP와 일치해야 합니다.
  • aud 수신 대상에는 애플리케이션의 client_id가 포함되어야 합니다.
  • exp / iat 토큰은 만료되지 않았고 최근에 발급되어야 합니다.
  • sub 안정적이고 고유한 사용자 식별자입니다.
  • nonce는 클라이언트가 보낸 값과 일치해야 합니다.

OIDC 인증 흐름

OIDC는 권한 부여 코드 흐름을 재사용하지만 openid 범위와 nonce를 추가합니다.

  • 클라이언트는 openid 범위와 선택적으로 profile, email을 요청합니다.
  • 토큰 엔드포인트는 액세스 토큰과 함께 ID 토큰을 반환합니다.
  • nonce는 ID 토큰을 원래 요청에 연결하여 재생 공격을 방지합니다.
GET /authorize?response_type=code
  &scope=openid profile email
  &client_id=app123
  &redirect_uri=https://app.example/cb
  &state=xyz&nonce=n-abc

JWKS로 서명 검증

OIDC 제공자는 잘 알려진 구성 문서에서 찾을 수 있는 JWKS 엔드포인트에 서명 키를 공개합니다.

  • jwks_uri에서 키를 가져와 토큰의 kid 헤더와 일치시키십시오.
  • 목록에 지정된 비대칭 알고리즘(RS256, ES256)으로 검증하십시오.

none 알고리즘은 거부하고, 토큰이 제공한 알고리즘 값만을 근거로 신뢰하지 마십시오.

GET /.well-known/openid-configuration
  -> { "jwks_uri": "https://idp.example/jwks", ... }
GET /jwks
  -> { "keys": [ { "kid": "k1", "kty": "RSA", ... } ] }

재생 공격을 방어하는 nonce

nonce는 ID 토큰에서 state가 리디렉션에서 하는 역할과 같습니다. 즉, 응답을 요청에 연결하는 일회성 값입니다.

  • 클라이언트가 무작위 nonce를 생성하여 세션에 저장합니다.
  • IdP가 이를 ID 토큰 안에 그대로 넣어 반환합니다.
  • 토큰을 받으면 클라이언트가 nonce가 일치하고 이전에 사용되지 않았는지 검증합니다.

이렇게 하면 토큰 재생과 다른 세션을 위해 발급된 토큰의 주입을 차단할 수 있습니다.

UserInfo 엔드포인트

ID 토큰에 포함된 정보 외에 추가 프로필 데이터가 필요한 경우 OIDC는 UserInfo 엔드포인트를 정의합니다.

  • 클라이언트는 액세스 토큰을 사용하여 호출합니다(ID 토큰이 아닙니다).
  • 인증된 주체의 이름, 이메일, 사진과 같은 클레임을 반환합니다.

클레임 대체를 방지하려면 반환된 sub를 ID 토큰의 sub와 항상 일치시키십시오.

GET /userinfo
Authorization: Bearer <access_token>

-> { "sub": "248289761001", "email": "u@example.com" }

검색과 메타데이터

OIDC는 클라이언트가 엔드포인트와 지원 기능을 자동으로 구성할 수 있도록 검색을 표준화합니다.

  • /.well-known/openid-configuration 문서에는 엔드포인트, 지원되는 범위, 알고리즘이 나열됩니다.
  • 발급자를 고정하거나 검증하고, 공격자가 제어하는 호스트에서 제공되는 검색을 맹목적으로 따르지 마십시오.

검색은 통합을 단순화하지만 발급자는 반드시 검증해야 하는 신뢰의 기준점으로 남습니다.

프런트 채널과 백 채널 로그아웃

연합 애플리케이션 전반의 세션 종료는 OIDC 로그아웃 사양으로 처리됩니다.

  • 프런트 채널 로그아웃은 브라우저 리디렉션/인라인 프레임을 사용하여 각 신뢰 당사자의 세션을 지웁니다.
  • 백 채널 로그아웃은 서버 간 로그아웃 토큰을 전송합니다. 더 안정적이지만 엔드포인트가 필요합니다.

로그아웃을 조정하지 않으면 사용자가 한 앱에서는 로그아웃하고도 다른 앱에는 로그인된 상태로 남을 수 있으며, 이는 실제 세션 관리 위험입니다.

흔한 OIDC 함정

신원 관련 버그는 검증 단계를 건너뛰어서 발생하는 경우가 많습니다.

  • aud를 확인하지 않고 토큰을 수락하는 경우(다른 클라이언트용 토큰일 수 있습니다).
  • iss를 무시하여 IdP 위조를 허용하는 경우
  • 서명을 검증하지 않거나 alg: none을 수락하는 경우
  • ID 토큰과 액세스 토큰을 혼동하는 경우
  • nonce를 확인하지 않아 재생 공격이 가능해지는 경우
Validation checklist:
  [ ] iss == expected
  [ ] aud contains client_id
  [ ] exp not passed, iat sane
  [ ] signature verified via JWKS
  [ ] nonce matches session

로그인을 위한 OIDC와 일반 OAuth 비교

목표가 로그인이라면 일반 OAuth가 아니라 OIDC를 사용하십시오.

  • OAuth 액세스 토큰은 클라이언트에 불투명하며 신원을 전혀 증명하지 않습니다.
  • 액세스 토큰이 다른 사용자나 앱에 대해 유효할 수 있으므로, 이를 로그인에 사용하면 사칭으로 이어질 수 있습니다.
  • OIDC ID 토큰은 수신 대상에 명시적으로 결속된 신원 어설션입니다.

이 구분을 통해 고전적인 혼동된 대리인 인증 결함을 방지할 수 있습니다.

빠른 확인: ID 토큰 검증

ID 토큰을 사용하는 신뢰 당사자에게 가장 중요한 검증 단계를 선택하십시오.

요약: OpenID Connect

핵심 요점:

  • OIDC는 OAuth 2.0에 신원 계층을 추가하며, ID 토큰은 인증을 증명하는 서명된 JSON 웹 토큰입니다.
  • 항상 iss, aud, exp, 서명(JWKS 사용), nonce를 검증하십시오.
  • ID 토큰은 클라이언트용이고 액세스 토큰은 API용입니다. 두 토큰의 역할을 절대 바꾸지 마십시오.
  • 재생 공격에는 nonce를 사용하고 CSRF에는 state를 사용하십시오.
  • 사용자를 인증해야 할 때는 일반 OAuth가 아니라 OIDC를 사용하십시오.

자주 묻는 질문

“OpenID Connect (OIDC)” 강의는 무료인가요?

네 — “OpenID Connect (OIDC)” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cyber Security Academy 강의 전체를 잠금 해제할 수 있습니다. Cyber Security Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“OpenID Connect (OIDC)”에서 뭘 배우나요?

OAuth 위에 사용자 식별 기능을 추가합니다. 브라우저에서 직접 실행하는 실습 코드로 Cyber Security Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Cyber Security Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Cyber Security Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“OpenID Connect (OIDC)” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Cyber Security Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Cyber Security Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. OAuth 2.0 흐름
  2. OpenID Connect (OIDC)
  3. SAML과 페더레이션
  4. 토큰 공격과 보안 강화
← Cyber Security Academy(으)로 돌아가기