π[μ€νλ§ μνλ¦¬ν° OAuth2] OAuth 2.0 μ©μ΄ μ΄ν΄
OAuth 2.0 Roles
- OAuth 2.0 λ©μ»€λμ¦μ λ€μ λ€ κ°μ§ μ’ λ₯μ μν μ λ΄λΉνλ 주체λ€μ μν΄ μ΄λ£¨μ΄μ§λ κΆνλΆμ¬ 체κ³μ΄λ€
- Resource Owner (μμ μμ μ)
- 보νΈλ μμμ λν μ κ·Ό κΆνμ λΆμ¬ν μ μλ 주체, μ¬μ©μλ‘μ κ³μ μ μΌλΆμ λν μ κ·Ό κΆνμ λΆμ¬νλ μ¬λ
- μ¬μ©μλ₯Ό λμ νμ¬ μλνλ €λ λͺ¨λ ν΄λΌμ΄μΈνΈλ λ¨Όμ μ¬μ©μμ νκ°λ₯Ό λ°μμΌ νλ€
- Resource Server (보νΈμμμλ²)
- νμ¬ μ΄ν리μΌμ΄μ μμ μ κ·Όνλ μ¬μ©μμ μμμ΄ ν¬ν¨λ μλ²λ₯Ό μλ―Ένλ€
- μ‘μΈμ€ ν ν°μ μλ½ λ° κ²μ¦ν μ μμ΄μΌ νλ©° κΆν 체κ³μ λ°λΌ μμ²μ μΉμΈν μ μμ΄μΌ νλ€.
- Authorization Server (μΈκ°μλ²)
- ν΄λΌμ΄μΈνΈκ° μ¬μ©μ κ³μ μ λν λμ λ° μ κ·Όμ μμ²ν λ μνΈ μμ©νλ μλ²λ‘μ ν΄λΌμ΄μΈνΈμ κΆν λΆμ¬ μμ²μ μΉμΈνκ±°λ κ±°λΆνλ μλ²
- μ¬μ©μκ° ν΄λΌμ΄μΈνΈμκ² κΆν λΆμ¬ μμ²μ μΉμΈν ν access token μ ν΄λΌμ΄μΈνΈμκ² λΆμ¬νλ μν
- Client (ν΄λΌμ΄μΈνΈ)
- μ¬μ©μλ₯Ό λμ νμ¬ κΆνμ λΆμ¬λ°μ μ¬μ©μμ 리μμ€μ μ κ·Όνλ €λ μ΄ν리μΌμ΄μ
- μ¬μ©μλ₯Ό κΆν λΆμ¬ μλ²λ‘ μλ΄νκ±°λ μ¬μ©μμ μνΈ μμ© μμ΄ κΆν λΆμ¬ μλ²λ‘λΆν° μ§μ κΆνμ μ»μ μ μλ€
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 κ°λ°μ μ½μμ΄λ λμ€μ΄μ λΈλ¬μ κ°μ λλ²κΉ λꡬλ₯Ό μ¬μ©νμ¬ λ°μ΄λ리/μ€ν μ½λμμ κΈ°λ° μ 보λ₯Ό μΆμΆν μ μκΈ° λλ¬Έμ 곡κ°λ‘ κ°μ£Όλλ€
- μλ²μΈ‘μ΄ μλ 리μμ€ μμ μκ° μ¬μ©νλ μ₯μΉμμ μ€νλλ λͺ¨λ ν΄λΌμ΄μΈνΈλ κ³΅κ° ν΄λΌμ΄μΈνΈλ‘ κ°μ£Όλμ΄μΌ νλ€
OAuth 2.0 Token Types
- Access Token
- ν΄λΌμ΄μΈνΈμμ μ¬μ©μμ 보νΈλ 리μμ€μ μ κ·ΌνκΈ° μν΄ μ¬μ©νλ μΌμ’ μ μ격 μ¦λͺ μΌλ‘μ μν μ νλ©° 리μμ€ μμ μκ° ν΄λΌμ΄μΈνΈμκ² λΆμ¬ν κΆν λΆμ¬μ ννμ΄λ€
- μΌλ°μ μΌλ‘ JWT(JSON Web Tokens) νμμ μ·¨νμ§λ§ μ¬μμ λ°λΌ κ·Έλ΄ νμλ μλ€.
- ν ν°μλ ν΄λΉ μ‘μΈμ€ κΈ°κ°, λ²μ λ° μλ²μ νμν κΈ°ν μ λ³΄κ° μλ€.
- νμ μλ μλ³μ νμ (Identifier Type) κ³Ό μ체 ν¬ν¨νμ (Self-contained Type) μ΄ μλ€
- Refresh Token
- μ‘μΈμ€ ν ν°μ΄ λ§λ£λ ν μ μ‘μΈμ€ ν ν°μ μ»κΈ° μν΄ ν΄λΌμ΄μΈνΈ μμ© νλ‘κ·Έλ¨μμ μ¬μ©νλ μ격 μ¦λͺ
- μ‘μΈμ€ ν ν°μ΄ λ§λ£λλ κ²½μ° ν΄λΌμ΄μΈνΈλ κΆν λΆμ¬ μλ²λ‘ μΈμ¦νκ³ Refresh Token μ μ λ¬νλ€.
- μΈμ¦ μλ²λ Refresh Token μ μ ν¨μ±μ κ²μ¬νκ³ μ μ‘μΈμ€ ν ν°μ λ°κΈνλ€.
- Refresh Token μ μ‘μΈμ€ ν ν°κ³Ό λ¬λ¦¬ κΆν μλ² ν ν° μλν¬μΈνΈμλ§ λ³΄λ΄μ§κ³ 리μμ€ μλ²μλ 보λ΄μ§ μλλ€.
- ID Token
- OpenID Connect μ±ν°μμ νμ΅ν¨
- Authorization Code
- κΆν λΆμ¬ μ½λ νλ¦μμ μ¬μ©λλ©° μ΄ μ½λλ ν΄λΌμ΄μΈνΈκ° μ‘μΈμ€ ν ν°κ³Ό κ΅νν μμ μ½λμ.
- μ¬μ©μκ° ν΄λΌμ΄μΈνΈκ° μμ²νλ μ 보λ₯Ό νμΈνκ³ μΈκ° μλ²λ‘λΆν° 리λ€μ΄λ νΈ λμ΄ λ°μμ¨λ€.
Access Token μ ν
- μλ³μ νμ
(Identifier Type)
- μ체 ν¬ν¨ νμ
(Self-contained Type)
λκΈλ¨κΈ°κΈ°