1 λΆ„ μ†Œμš”

1. κ°œμš” 및 νŠΉμ§•

κ°œμš” 및 νŠΉμ§•

  • OpenID Connect 1.0은 OAuth 2.0 ν”„λ‘œν† μ½œ μœ„μ— κ΅¬μΆ•λœ ID κ³„μΈ΅μœΌλ‘œ OAuth 2.0을 ν™•μž₯ν•˜μ—¬ 인증 방식을 ν‘œμ€€ν™” ν•œ OAuth 2.0 기반의 인증 ν”„λ‘œν† μ½œμ΄λ‹€
  • scope μ§€μ • μ‹œ β€œopenid” λ₯Ό ν¬ν•¨ν•˜λ©΄ OpenID Connect μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ©° 인증에 λŒ€ν•œ μ •λ³΄λŠ” ID 토큰 (ID Token )이라고 ν•˜λŠ” JSON μ›Ή 토큰(JWT) 으둜 λ°˜ν™˜λœλ‹€
  • OpenID ConnectλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‚¬μš©μž IDλ₯Ό 확인할 수 있게 ν•˜λŠ” λ³΄μ•ˆ 토큰인 ID Token μ œκ³΅ν•œλ‹€

image

OpenID Connect Discovery 1.0 Provider Metadata

  • OpenID Connect λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ λͺ¨λ“  μ—”λ“œ 포인트 및 곡개 ν‚€ μœ„μΉ˜ 정보λ₯Ό 포함 ν•˜μ—¬ OpenID κ³΅κΈ‰μžμ˜ ꡬ성에 λŒ€ν•œ ν΄λ ˆμž„ 집합을 λ‚˜νƒ€λ‚Έλ‹€
  • 검색 λ¬Έμ„œ 경둜 : /.well-known/openid-configuration
    • https://[base-server-url]/.well-known/openid-configuration μ—μ„œ 검색 ν•  수 μžˆλ‹€

image

2. ID Token & Scope

ID Token

  • ID 토큰은 μ‚¬μš©μžκ°€ 인증 λ˜μ—ˆμŒμ„ 증λͺ…ν•˜λŠ” κ²°κ³Όλ¬Όλ‘œμ„œ OIDC μš”μ²­ μ‹œ access token κ³Ό ν•¨κ»˜ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „λ‹¬λ˜λŠ” 토큰이닀
  • ID 토큰은 JWT(JSON μ›Ή 토큰)으둜 ν‘œν˜„λ˜λ©° 헀더, νŽ˜μ΄λ‘œλ“œ 및 μ„œλͺ…μœΌλ‘œ κ΅¬μ„±λœλ‹€
  • ID 토큰은 개인 ν‚€λ‘œ λ°œκΈ‰μžκ°€ μ„œλͺ…ν•˜λŠ” κ²ƒμœΌλ‘œμ„œ ν† ν°μ˜ 좜처λ₯Ό 보μž₯ν•˜κ³  λ³€μ‘°λ˜μ§€ μ•Šμ•˜μŒμ„ 보μž₯ν•œλ‹€.
  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 곡개 ν‚€λ‘œ ID 토큰을 검증 및 μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜κ³  λ§Œλ£Œμ—¬λΆ€ λ“± ν† ν°μ˜ ν΄λ ˆμž„μ„ 확인 ν•œλ‹€
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” ν΄λ ˆμž„ 정보에 ν¬ν•¨λ˜μ–΄ μžˆλŠ” μ‚¬μš©μžλͺ…, 이메일을 ν™œμš©ν•˜μ—¬ 인증 관리λ₯Ό ν•  수 μžˆλ‹€

ID Token vs Access Token

  • ID Token 은 API μš”μ²­μ— μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλ˜λ©° μ‚¬μš©μžμ˜ 신원확인을 μœ„ν•΄ μ‚¬μš©λ˜μ–΄μ Έμ•Ό ν•œλ‹€
  • Access Token 은 인증을 μœ„ν•΄ μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλ˜λ©° λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜μ–΄μ Έμ•Ό ν•œλ‹€

image

OIDC Scope

image

Claims

image

OIDC 둜그인 μš”μ²­

OIDC μƒν˜Έ μž‘μš© ν–‰μœ„μž

  1. OpenID Provider
    • μ€„μ—¬μ„œ OP 라고 ν•˜λ©° OpenID μ œκ³΅μžλ‘œμ„œ μ΅œμ’… μ‚¬μš©μžλ₯Ό μΈμ¦ν•˜κ³  인증 결과와 μ‚¬μš©μžμ— λŒ€ν•œ 정보λ₯Ό μ‹ λ’° λ‹Ήμ‚¬μžμ—κ²Œ μ œκ³΅ν•  수 μžˆλŠ” Oauth2.0 μ„œλ²„λ₯Ό μ˜λ―Έν•œλ‹€
  2. Relying Party
    • μ€„μ—¬μ„œ RP 라고 ν•˜λ©° μ‹ λ’° λ‹Ήμ‚¬μžλ‘œμ„œ 인증 μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ OP에 οΌ‚μ˜μ‘΄οΌ‚ν•˜λŠ” Oauth 2.0 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ˜λ―Έν•œλ‹€

흐름

  1. RPλŠ” OP에 κΆŒν•œ λΆ€μ—¬ μš”μ²­μ„ 보낸닀.
  2. OPλŠ” μ΅œμ’… μ‚¬μš©μžλ₯Ό μΈμ¦ν•˜κ³  κΆŒν•œμ„ μ–»λŠ”λ‹€.
  3. OPλŠ” ID 토큰과 μ•‘μ„ΈμŠ€ ν† ν°μœΌλ‘œ μ‘λ‹΅ν•œλ‹€.
  4. RPλŠ” Access Token을 μ‚¬μš©ν•˜μ—¬ UserInfo μ—”λ“œν¬μΈνŠΈμ— μš”μ²­μ„ 보낼 수 μžˆλ‹€.
  5. UserInfo μ—”λ“œν¬μΈνŠΈλŠ” μ΅œμ’… μ‚¬μš©μžμ— λŒ€ν•œ ν΄λ ˆμž„μ„ λ°˜ν™˜ν•œλ‹€.

λ§€κ°œλ³€μˆ˜ μš”μ²­ 및 응닡

  • μš”μ²­ μ‹œ openid λ²”μœ„λ₯Ό scope 맀개 λ³€μˆ˜μ— 포함해야 ν•œλ‹€.
  • response_type 맀개 λ³€μˆ˜λŠ” id_token을(λ₯Ό) 포함 ν•œλ‹€. (response_type 이 ν•΄λ‹Ή 토큰을 지원해야 ν•œλ‹€)
  • μš”μ²­μ€ nonce 맀개 λ³€μˆ˜λ₯Ό 포함해야 ν•œλ‹€. (Implicit Flow 인 경우 ν•„μˆ˜)
    • μš”μ²­μ— ν¬ν•¨λ˜λŠ” κ°’μœΌλ‘œμ„œ κ²°κ³Ό id_token 값에 ν΄λ ˆμž„μœΌλ‘œ ν¬ν•¨λ˜λ©° 이것은 ν† ν°μ˜ μž¬μƒ 곡격을 λ°©μ§€ν•˜κ³  μš”μ²­μ˜ 좜처λ₯Ό μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ” μž„μ˜μ˜ 고유 λ¬Έμžμ—΄μ΄λ‹€.
    • ν•΄λ‹Ή nonce ν΄λ ˆμž„μ—λŠ” μš”μ²­μ—μ„œ μ „μ†‘λœ 것과 μ •ν™•νžˆ λ™μΌν•œ 값이 ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έλ ‡μ§€ μ•Šμ€ 경우 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 인증을 κ±°λΆ€ν•΄μ•Ό ν•œλ‹€

image

μΉ΄ν…Œκ³ λ¦¬:

μ—…λ°μ΄νŠΈ:

λŒ“κΈ€λ‚¨κΈ°κΈ°