2 λΆ„ μ†Œμš”

OAuth 2.0 Roles

  • OAuth 2.0 λ©”μ»€λ‹ˆμ¦˜μ€ λ‹€μŒ λ„€ κ°€μ§€ μ’…λ₯˜μ˜ 역할을 λ‹΄λ‹Ήν•˜λŠ” 주체듀에 μ˜ν•΄ μ΄λ£¨μ–΄μ§€λŠ” κΆŒν•œλΆ€μ—¬ 체계이닀
  1. Resource Owner (μžμ› μ†Œμœ μž)
    • 보호된 μžμ›μ— λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ λΆ€μ—¬ν•  수 μžˆλŠ” 주체, μ‚¬μš©μžλ‘œμ„œ κ³„μ •μ˜ 일뢀에 λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ λΆ€μ—¬ν•˜λŠ” μ‚¬λžŒ
    • μ‚¬μš©μžλ₯Ό λŒ€μ‹ ν•˜μ—¬ μž‘λ™ν•˜λ €λŠ” λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈλŠ” λ¨Όμ € μ‚¬μš©μžμ˜ ν—ˆκ°€λ₯Ό λ°›μ•„μ•Ό ν•œλ‹€
  2. Resource Server (λ³΄ν˜Έμžμ›μ„œλ²„)
    • 타사 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ ‘κ·Όν•˜λŠ” μ‚¬μš©μžμ˜ μžμ›μ΄ ν¬ν•¨λœ μ„œλ²„λ₯Ό μ˜λ―Έν•œλ‹€
    • μ•‘μ„ΈμŠ€ 토큰을 수락 및 검증할 수 μžˆμ–΄μ•Ό ν•˜λ©° κΆŒν•œ 체계에 따라 μš”μ²­μ„ μŠΉμΈν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
  3. Authorization Server (μΈκ°€μ„œλ²„)
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ‚¬μš©μž 계정에 λŒ€ν•œ λ™μ˜ 및 접근을 μš”μ²­ν•  λ•Œ μƒν˜Έ μž‘μš©ν•˜λŠ” μ„œλ²„λ‘œμ„œ ν΄λΌμ΄μ–ΈνŠΈμ˜ κΆŒν•œ λΆ€μ—¬ μš”μ²­μ„ μŠΉμΈν•˜κ±°λ‚˜ κ±°λΆ€ν•˜λŠ” μ„œλ²„
    • μ‚¬μš©μžκ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ κΆŒν•œ λΆ€μ—¬ μš”μ²­μ„ μŠΉμΈν•œ ν›„ access token 을 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λΆ€μ—¬ν•˜λŠ” μ—­ν• 
  4. Client (ν΄λΌμ΄μ–ΈνŠΈ)
    • μ‚¬μš©μžλ₯Ό λŒ€μ‹ ν•˜μ—¬ κΆŒν•œμ„ λΆ€μ—¬λ°›μ•„ μ‚¬μš©μžμ˜ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜λ €λŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜
    • μ‚¬μš©μžλ₯Ό κΆŒν•œ λΆ€μ—¬ μ„œλ²„λ‘œ μ•ˆλ‚΄ν•˜κ±°λ‚˜ μ‚¬μš©μžμ˜ μƒν˜Έ μž‘μš© 없이 κΆŒν•œ λΆ€μ—¬ μ„œλ²„λ‘œλΆ€ν„° 직접 κΆŒν•œμ„ 얻을 수 μžˆλ‹€

image

OAuth 2.0 Client Types

  • κ°œμš”
    • RFC 6749 - https://datatracker.ietf.org/doc/html/rfc6749#section-2.1
    • 인증 μ„œλ²„μ— ν΄λΌμ΄μ–ΈνŠΈλ₯Ό 등둝할 λ•Œ ν΄λΌμ΄μ–ΈνŠΈ 자격 증λͺ…인 ν΄λΌμ΄μ–ΈνŠΈ 아이디와 ν΄λΌμ΄μ–ΈνŠΈ μ•”ν˜Έλ₯Ό λ°›λŠ”λ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈ μ•”ν˜ΈλŠ” 비밀이고 κ·ΈλŒ€λ‘œ μœ μ§€λ˜μ–΄μ•Ό ν•˜λŠ” 반면 ν΄λΌμ΄μ–ΈνŠΈ μ•„μ΄λ””λŠ” κ³΅κ°œμ΄λ‹€.
    • 이 자격 증λͺ…은 인증 μ„œλ²„μ— λŒ€ν•œ ν΄λΌμ΄μ–ΈνŠΈ IDλ₯Ό 증λͺ…ν•œλ‹€
  • κΈ°λ°€ ν΄λΌμ΄μ–ΈνŠΈ (Confidential Clients)
    • κΈ°λ°€ ν΄λΌμ΄μ–ΈνŠΈλŠ” client_secret 의 기밀성을 μœ μ§€ν•  수 μžˆλŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ˜λ―Έν•œλ‹€.
    • 일반적으둜 μ‚¬μš©μžκ°€ μ†ŒμŠ€ μ½”λ“œμ— μ•‘μ„ΈμŠ€ν•  수 μ—†λŠ” μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨μœΌλ‘œ NET, Java, PHP 및 Node.JS와 같은 μ„œλ²„ μΈ‘ μ–Έμ–΄λ‘œ μž‘μ„±λœλ‹€
    • μ΄λŸ¬ν•œ μœ ν˜•μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λŒ€λΆ€λΆ„ μ›Ή μ„œλ²„μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— 일반적으둜 οΌ‚μ›Ή 앱"이라고 ν•œλ‹€
  • 곡개 ν΄λΌμ΄μ–ΈνŠΈ (Public Clients)
    • 곡개 ν΄λΌμ΄μ–ΈνŠΈλŠ” client_secret 의 기밀을 μœ μ§€ν•  수 μ—†μœΌλ―€λ‘œ μ΄λŸ¬ν•œ μ•±μ—λŠ” secret 이 μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€.
    • λΈŒλΌμš°μ €(SPA)μ—μ„œ μ‹€ν–‰λ˜λŠ” JavaScript μ• ν”Œλ¦¬μΌ€μ΄μ…˜, Android λ˜λŠ” iOS λͺ¨λ°”일 μ•±, λ°μŠ€ν¬ν†±μ—μ„œ μ‹€ν–‰λ˜λŠ” κΈ°λ³Έ μ•±λΏλ§Œ μ•„λ‹ˆλΌ IoT/μž„λ² λ””λ“œ μž₯μΉ˜μ—μ„œ μ‹€ν–‰λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 등이 μžˆλ‹€
    • Chrome 개발자 μ½˜μ†”μ΄λ‚˜ λ””μŠ€μ–΄μ…ˆλΈ”λŸ¬μ™€ 같은 디버깅 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°”μ΄λ„ˆλ¦¬/μ‹€ν–‰ μ½”λ“œμ—μ„œ κΈ°λ°€ 정보λ₯Ό μΆ”μΆœν•  수 있기 λ•Œλ¬Έμ— 곡개둜 κ°„μ£Όλœλ‹€
    • μ„œλ²„μΈ‘μ΄ μ•„λ‹Œ λ¦¬μ†ŒμŠ€ μ†Œμœ μžκ°€ μ‚¬μš©ν•˜λŠ” μž₯μΉ˜μ—μ„œ μ‹€ν–‰λ˜λŠ” λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈλŠ” 곡개 ν΄λΌμ΄μ–ΈνŠΈλ‘œ κ°„μ£Όλ˜μ–΄μ•Ό ν•œλ‹€

image

OAuth 2.0 Token Types

  1. Access Token
    • ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‚¬μš©μžμ˜ 보호된 λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μΌμ’…μ˜ 자격 증λͺ…μœΌλ‘œμ„œ 역할을 ν•˜λ©° λ¦¬μ†ŒμŠ€ μ†Œμœ μžκ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λΆ€μ—¬ν•œ κΆŒν•œ λΆ€μ—¬μ˜ ν‘œν˜„μ΄λ‹€
    • 일반적으둜 JWT(JSON Web Tokens) ν˜•μ‹μ„ μ·¨ν•˜μ§€λ§Œ 사양에 따라 그럴 ν•„μš”λŠ” μ—†λ‹€.
    • ν† ν°μ—λŠ” ν•΄λ‹Ή μ•‘μ„ΈμŠ€ κΈ°κ°„, λ²”μœ„ 및 μ„œλ²„μ— ν•„μš”ν•œ 기타 정보가 μžˆλ‹€.
    • νƒ€μž…μ—λŠ” μ‹λ³„μž νƒ€μž… (Identifier Type) κ³Ό 자체 ν¬ν•¨νƒ€μž… (Self-contained Type) 이 μžˆλ‹€
  2. Refresh Token
    • μ•‘μ„ΈμŠ€ 토큰이 만료된 ν›„ μƒˆ μ•‘μ„ΈμŠ€ 토큰을 μ–»κΈ° μœ„ν•΄ ν΄λΌμ΄μ–ΈνŠΈ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•˜λŠ” 자격 증λͺ…
    • μ•‘μ„ΈμŠ€ 토큰이 λ§Œλ£Œλ˜λŠ” 경우 ν΄λΌμ΄μ–ΈνŠΈλŠ” κΆŒν•œ λΆ€μ—¬ μ„œλ²„λ‘œ μΈμ¦ν•˜κ³  Refresh Token 을 μ „λ‹¬ν•œλ‹€.
    • 인증 μ„œλ²„λŠ” Refresh Token 의 μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜κ³  μƒˆ μ•‘μ„ΈμŠ€ 토큰을 λ°œκΈ‰ν•œλ‹€.
    • Refresh Token 은 μ•‘μ„ΈμŠ€ 토큰과 달리 κΆŒν•œ μ„œλ²„ 토큰 μ—”λ“œν¬μΈνŠΈμ—λ§Œ 보내지고 λ¦¬μ†ŒμŠ€ μ„œλ²„μ—λŠ” 보내지 μ•ŠλŠ”λ‹€.
  3. ID Token
    • OpenID Connect μ±•ν„°μ—μ„œ ν•™μŠ΅ν•¨
  4. Authorization Code
    • κΆŒν•œ λΆ€μ—¬ μ½”λ“œ νλ¦„μ—μ„œ μ‚¬μš©λ˜λ©° 이 μ½”λ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ•‘μ„ΈμŠ€ 토큰과 κ΅ν™˜ν•  μž„μ‹œ μ½”λ“œμž„.
    • μ‚¬μš©μžκ°€ ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•˜λŠ” 정보λ₯Ό ν™•μΈν•˜κ³  인가 μ„œλ²„λ‘œλΆ€ν„° λ¦¬λ‹€μ΄λ ‰νŠΈ λ˜μ–΄ λ°›μ•„μ˜¨λ‹€.

Access Token μœ ν˜•

  • μ‹λ³„μž νƒ€μž… (Identifier Type) image
  • 자체 포함 νƒ€μž… (Self-contained Type) image

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

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

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