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