Post

OAuth2

OAuth2

πŸ”” Oauth2? 그럼 Oauth1도?
πŸ”” Oauth2 λ™μž‘ κ³Όμ •

RFC6749(Oauth 2.0) λ¬Έμ„œλ₯Ό ν† λŒ€λ‘œ μš”μ•½ν•˜μ—¬ μ •λ¦¬ν•œ κΈ€μ΄λ‹ˆ, μžμ„Έν•œ λ‚΄μš©μ€ ν•΄λ‹Ή λ¬Έμ„œλ₯Ό μ°Έκ³ ν•΄μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.

What? Why?

인증(authentication)이 μ•„λ‹Œ 인가(authorization)에 μ΄ˆμ μ„ λ§žμΆ”λ©°, λ¦¬μ†ŒμŠ€ μ†Œμœ μžκ°€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μžμ‹ μ˜ λ¦¬μ†ŒμŠ€μ— λŒ€ν•œ μ œν•œμ  μ ‘κ·Ό κΆŒν•œμ„ λΆ€μ—¬ν•  수 μžˆλ„λ‘ ν•˜λŠ” ν”„λ ˆμž„μ›Œν¬

μ—­ν• 

  • Resource Owner
    • 보호된 λ¦¬μ†ŒμŠ€(Protected Resource)의 μ‹€μ œ μ†Œμœ μž ν˜Ήμ€ 주체
    • ex) μ‚¬μš©μžμ˜ 계정, μ‚¬μš©μž 데이터
  • Resource Server
    • 보호된 λ¦¬μ†ŒμŠ€λ₯Ό ν˜ΈμŠ€νŒ…(μ €μž₯ 및 관리)ν•˜κ³  μžˆλŠ” μ„œλ²„
    • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ œκ³΅ν•˜λŠ” μ•‘μ„ΈμŠ€ 토큰을 κ²€μ¦ν•˜κ³ , μœ νš¨ν•œ 토큰이면 λ¦¬μ†ŒμŠ€ 접근을 ν—ˆμš©
  • Client
    • λ¦¬μ†ŒμŠ€ μ†Œμœ μžλ₯Ό λŒ€μ‹ ν•˜μ—¬ λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•˜λ €κ³  μš”μ²­ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜
    • ex) μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜, λͺ¨λ°”일 μ•±, λ°μŠ€ν¬ν†± ν”„λ‘œκ·Έλž¨ λ“±
  • Authorization Server
    • ν΄λΌμ΄μ–ΈνŠΈμ˜ κΆŒν•œ μš”μ²­μ„ 인증/μΈκ°€ν•˜κ³ , μ•‘μ„ΈμŠ€ 토큰(ν˜Ήμ€ λ¦¬ν”„λ ˆμ‹œ 토큰)을 λ°œκΈ‰ν•˜λŠ” μ„œλ²„
    • Resource Owner와 Client μ‚¬μ΄μ—μ„œ μ•ˆμ „ν•˜κ²Œ 토큰을 주고받도둝 μ€‘μž¬

Oauth 1.0 vs 2.0

κΈ°μ‘΄ Oauth 1.0은 λ‹€μŒκ³Ό 같은 문제점이 μžˆμ—ˆλŠ”λ°, 이λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ Oauth 2.0이 λ§Œλ“€μ–΄μ‘Œλ‹€.

1.0

  • λ³΅μž‘ν•œ μ„œλͺ… ν”„λ‘œμ„ΈμŠ€
    • 각 μš”μ²­λ§ˆλ‹€ μ„œλͺ…을 생성
  • μœ μ—°μ„± λΆ€μ‘±
    • νŠΉμ •ν•œ 인증 ν”Œλ‘œμš°μ— κ΅­ν•œλ˜μ–΄ 있음
    • ex) λͺ¨λ°”일 μ•±, 단일 νŽ˜μ΄μ§€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(SPA) λ“±
  • λ³΄μ•ˆμƒμ˜ μ œμ•½
    • HTTPS와 같은 전솑 계측 λ³΄μ•ˆμ„ μ™„μ „νžˆ λŒ€μ²΄ν•  수 μ—†μŒ
    • μ„œλͺ… 관리 μžμ²΄κ°€ λ³΄μ•ˆ μœ„ν—˜ μš”μ†Œ κ°€λŠ₯μ„±
  • ν™•μž₯μ„±μ˜ ν•œκ³„

2.0

  • λ‹¨μˆœν™”λœ 인증 ν”„λ‘œμ„ΈμŠ€
    • μ„œλͺ… 기반 인증을 μ œκ±°ν•˜κ³  HTTPSλ₯Ό κΈ°λ³Έ λ³΄μ•ˆ κ³„μΈ΅μœΌλ‘œ μ‚¬μš©
  • λ‹€μ–‘ν•œ 인증 ν”Œλ‘œμš° 지원
    • λ‹€μ–‘ν•œ 인증 ν”Œλ‘œμš°(그랜트 νƒ€μž…)λ₯Ό 지원
    • ex) Authorization Code, Implicit, Client Credentials λ“±
  • ν™•μž₯μ„±κ³Ό μœ μ—°μ„± ν–₯상
    • λͺ¨λ“ˆμ‹ μ•„ν‚€ν…μ²˜λ₯Ό μ±„νƒν•˜μ—¬ ν•„μš”μ— 따라 ν™•μž₯ κ°€λŠ₯
    • ex) PKCE(Proof Key for Code Exchange)
  • ν–₯μƒλœ λ³΄μ•ˆ κΈ°λŠ₯
    • 토큰 기반 인증
    • ν† ν°μ˜ λ²”μœ„(scope) μ„ΈλΆ„ν™”
  • 더 λ‚˜μ€ μ‚¬μš©μž κ²½ν—˜
    • SPAλ‚˜ λ„€μ΄ν‹°λΈŒ λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλ„ μ‰½κ²Œ 톡합 κ°€λŠ₯

흐름도

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 +--------+                               +---------------+
 |        |--(A)- Authorization Request ->|   Resource    |
 |        |                               |     Owner     |
 |        |<-(B)-- Authorization Grant ---|               |
 |        |                               +---------------+
 |        |
 |        |                               +---------------+
 |        |--(C)-- Authorization Grant -->| Authorization |
 | Client |                               |     Server    |
 |        |<-(D)----- Access Token -------|               |
 |        |                               +---------------+
 |        |
 |        |                               +---------------+
 |        |--(E)----- Access Token ------>|    Resource   |
 |        |                               |     Server    |
 |        |<-(F)--- Protected Resource ---|               |
 +--------+                               +---------------+

(A) ν΄λΌμ΄μ–ΈνŠΈκ°€ 승인 μš”μ²­

ν΄λΌμ΄μ–ΈνŠΈλŠ” λ¦¬μ†ŒμŠ€ μ†Œμœ μžμ—κ²Œ 직접 승인 μš”μ²­μ„ ν•  수 μžˆλ‹€. 인증 μš”μ²­μ€ λ¦¬μ†ŒμŠ€ μ†Œμœ μž 직접 μ΄λ£¨μ–΄μ§ˆ μˆ˜λ„ 있고 μ€‘κ°œμžλ‘œμ„œ 인증 μ„œλ²„λ₯Ό 톡해 κ°„μ ‘μ μœΌλ‘œ μ΄λ£¨μ–΄μ§ˆ μˆ˜λ„ μžˆλ‹€.

(B) 인증 λΆ€μ—¬λ₯Ό λ°›μŒ

ν΄λΌμ΄μ–ΈνŠΈλŠ” λ¦¬μ†ŒμŠ€ μ†Œμœ μžμ˜ 인증을 λ‚˜νƒ€λ‚΄λŠ” 자격 증λͺ…인 인증 λΆ€μ—¬λ₯Ό λ°›λŠ”λ‹€. λͺ…μ„Έμ„œμ— μ •μ˜λœ λ„€ 가지 μœ ν˜• 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ ν™•μž₯ λΆ€μ—¬ μœ ν˜•μ„ μ‚¬μš©ν•˜μ—¬ ν‘œν˜„λœλ‹€. 인증 λΆ€μ—¬ μœ ν˜•μ€ ν΄λΌμ΄μ–ΈνŠΈκ°€ 인증을 μš”μ²­ν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” 방법과 인증 μ„œλ²„κ°€ μ§€μ›ν•˜λŠ” μœ ν˜•μ— 따라 λ‹€λ₯΄λ‹€.

(C) μ—‘μ„ΈμŠ€ 토큰 μš”μ²­

ν΄λΌμ΄μ–ΈνŠΈλŠ” κΆŒν•œ λΆ€μ—¬ μ„œλ²„λ‘œ μΈμ¦ν•˜κ³  κΆŒν•œ λΆ€μ—¬λ₯Ό μ œμ‹œν•˜μ—¬ μ•‘μ„ΈμŠ€ 토큰을 μš”μ²­ν•œλ‹€.

(D) μ—‘μ„ΈμŠ€ 토큰 λ°œκΈ‰

인증 μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μΈμ¦ν•˜κ³  인증 λΆ€μ—¬λ₯Ό κ²€μ¦ν•œ 후에, μœ νš¨ν•œ 경우 μ•‘μ„ΈμŠ€ 토큰을 λ°œκΈ‰ν•œλ‹€.

(E) 인증

ν΄λΌμ΄μ–ΈνŠΈλŠ” λ¦¬μ†ŒμŠ€ μ„œλ²„μ—μ„œ λ³΄ν˜Έλ˜λŠ” λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜κ³  μ•‘μ„ΈμŠ€ 토큰을 μ œμ‹œν•˜μ—¬ μΈμ¦ν•œλ‹€.

(F) μš”μ²­ 처리

λ¦¬μ†ŒμŠ€ μ„œλ²„λŠ” μ•‘μ„ΈμŠ€ ν† ν°μ˜ μœ νš¨μ„±μ„ κ²€μ‚¬ν•˜κ³  μœ νš¨ν•œ 경우, μš”μ²­μ„ μ²˜λ¦¬ν•œλ‹€.

λ‹€μŒ μž₯에 μ΄μ–΄μ„œ..

자료 좜처

RFC 6749
ChatGPT

This post is licensed under CC BY 4.0 by the author.