π[μ€νλ§ μνλ¦¬ν° OAuth2] Open ID Connect
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 μ 곡νλ€
OpenID Connect Discovery 1.0 Provider Metadata
- OpenID Connect λ₯Ό μ¬μ©νκΈ° μν΄ νμν λͺ¨λ μλ ν¬μΈνΈ λ° κ³΅κ° ν€ μμΉ μ 보λ₯Ό ν¬ν¨ νμ¬ OpenID 곡κΈμμ ꡬμ±μ λν ν΄λ μ μ§ν©μ λνλΈλ€
- κ²μ λ¬Έμ κ²½λ‘ : /.well-known/openid-configuration
- https://[base-server-url]/.well-known/openid-configuration μμ κ²μ ν μ μλ€
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 μ μΈμ¦μ μν΄ μ¬μ©ν΄μλ μλλ©° 리μμ€μ μ κ·ΌνκΈ° μν΄ μ¬μ©λμ΄μ ΈμΌ νλ€
OIDC Scope
Claims
OIDC λ‘κ·ΈμΈ μμ²
OIDC μνΈ μμ© νμμ
- OpenID Provider
- μ€μ¬μ OP λΌκ³ νλ©° OpenID μ 곡μλ‘μ μ΅μ’ μ¬μ©μλ₯Ό μΈμ¦νκ³ μΈμ¦ κ²°κ³Όμ μ¬μ©μμ λν μ 보λ₯Ό μ λ’° λΉμ¬μμκ² μ 곡ν μ μλ Oauth2.0 μλ²λ₯Ό μλ―Ένλ€
- Relying Party
- μ€μ¬μ RP λΌκ³ νλ©° μ λ’° λΉμ¬μλ‘μ μΈμ¦ μμ²μ μ²λ¦¬νκΈ° μν΄ OPμ οΌμμ‘΄οΌνλ Oauth 2.0 μ ν리μΌμ΄μ μ μλ―Ένλ€
νλ¦
- RPλ OPμ κΆν λΆμ¬ μμ²μ 보λΈλ€.
- OPλ μ΅μ’ μ¬μ©μλ₯Ό μΈμ¦νκ³ κΆνμ μ»λλ€.
- OPλ ID ν ν°κ³Ό μ‘μΈμ€ ν ν°μΌλ‘ μλ΅νλ€.
- RPλ Access Tokenμ μ¬μ©νμ¬ UserInfo μλν¬μΈνΈμ μμ²μ λ³΄λΌ μ μλ€.
- UserInfo μλν¬μΈνΈλ μ΅μ’ μ¬μ©μμ λν ν΄λ μμ λ°ννλ€.
λ§€κ°λ³μ μμ² λ° μλ΅
- μμ² μ openid λ²μλ₯Ό scope λ§€κ° λ³μμ ν¬ν¨ν΄μΌ νλ€.
- response_type λ§€κ° λ³μλ id_tokenμ(λ₯Ό) ν¬ν¨ νλ€. (response_type μ΄ ν΄λΉ ν ν°μ μ§μν΄μΌ νλ€)
- μμ²μ nonce λ§€κ° λ³μλ₯Ό ν¬ν¨ν΄μΌ νλ€. (Implicit Flow μΈ κ²½μ° νμ)
- μμ²μ ν¬ν¨λλ κ°μΌλ‘μ κ²°κ³Ό id_token κ°μ ν΄λ μμΌλ‘ ν¬ν¨λλ©° μ΄κ²μ ν ν°μ μ¬μ 곡격μ λ°©μ§νκ³ μμ²μ μΆμ²λ₯Ό μλ³νλ λ° μ¬μ©ν μ μλ μμμ κ³ μ λ¬Έμμ΄μ΄λ€.
- ν΄λΉ nonce ν΄λ μμλ μμ²μμ μ μ‘λ κ²κ³Ό μ νν λμΌν κ°μ΄ ν¬ν¨λμ΄μΌ ν©λλ€. κ·Έλ μ§ μμ κ²½μ° μ ν리μΌμ΄μ μμ μΈμ¦μ κ±°λΆν΄μΌ νλ€
λκΈλ¨κΈ°κΈ°