Session / JWT
Last updated
Last updated
μ§λλ² μΏ ν€μ μΉμ€ν 리μ§μ λν΄μ 곡λΆν΄λ³΄μλλ° μ΄μ΄μ μ΄λ²μ μΈμ¦/μΈκ°λ°©μμ λν΄μ 곡λΆν΄λ³΄λ €κ³ νλ€.
μΈμ¦κ³Ό μΈκ°λΌλ λ¨μ΄κ° λμλλ° μ μ μ©μ΄λ₯Ό μ 리νκ³ κ°μ.
μΈμ¦ (Authentication) μ΄λ ν΄λΌμ΄μΈνΈμμ μ¬μ©μ λ³ΈμΈμ΄ λ§λμ§ νμΈνλ κ³Όμ μ΄λ€. μ°λ¦¬κ° νν λ§νλ λ‘κ·ΈμΈμ΄λΌκ³ μκ°νλ©΄ νΈνλ€.
**μΈκ°(Authorization)**λ μΈμ¦μ ν νμ μνλλ©°, μΈμ¦λ μ¬μ©μκ° μ΄λ€ μμμ λνμ¬ μ κ·Όμ΄ κ°λ₯νμ§ νμΈνλ κ³Όμ μ΄λ€.
κ°λ¨ν μμλ₯Ό λ€μλ©΄, λλ ꡬκΈμ λ‘κ·ΈμΈμ΄ κ°λ₯νκ³ λμλ λ‘κ·ΈμΈμ΄ κ°λ₯νλ€. κ΅¬κΈ dbμμ λ±λ‘λ μ¬μ©μκ° λ³ΈμΈμ΄ λ§λμ§ νμΈνκ³ λ±λ‘μ΄ λμ΄μκ³ λ³ΈμΈμ΄ λ§μμ΄ νμΈλλ€λ©΄ μΈμ¦ (λ‘κ·ΈμΈ)μ΄ λλκ²μ΄λ€. νμ§λ§, λ΄κ° μμ±ν κ²μκΈμ λμμ΄ μμ ν μλ μλ€. μ΄μ λ λ΄κ° μμ±ν κ²μλ¬Όμ λν΄μ λμμ μμ μμ μ κ·Όμ΄ λΆκ°λ₯νκΈ° λλ¬Έμ΄λ€. μ΄κ²μ΄ μΈκ°μ΄λ€.
λ€μ λμμμ, ν΄λΌμ΄μΈνΈμμ μ μ κ° λ‘κ·ΈμΈμ μλμμ²μ λ³΄λΈ ν, μ±κ³΅νλ€λ©΄ μλ²λ ν΄λΌμ΄μΈνΈμκ² μΈμ¦μ΄ μλ£λμλ€λΌλ μλ―Έλ‘ μΈμ μ΄λ ν ν°μ μ μ‘νλ€.
κ·Έλ λ€λ©΄ μ¬κΈ°μ μΈμ κ³Ό ν ν°μ μ°¨μ΄λ₯Ό μμ보μ
λ¨Όμ μΈμ μ μ¬μ©μμ μΈμ¦μ λ³΄κ° μλ²μ μ μ₯μμ μ μ₯λλ€.
μ¬μ©μκ° λ‘κ·ΈμΈ μμ²μ, ν΄λΉ μΈμ¦ μ 보λ₯Ό μλ² μΈμ μ μ₯μμ μ μ₯ ν, μ¬μ©μμκ² Session IDλ₯Ό λ°κΈνλ€. λ°κΈν session idλ λΈλΌμ°μ μ μΏ ν€ννλ‘ μ μ₯λλ€.
Session idλ λΈλΌμ°μ μΏ ν€μ μ μ₯λμ§λ§, μΈμ¦μ 보 μ체λ μλ²μ μ μ₯λλ€.
λ°λΌμ λ‘κ·ΈμΈμ μ±κ³΅νλ€λ μ¦κ±°μΈ session idκ° μΏ ν€μ μ μ₯λμ΄ μκΈ° λλ¬Έμ ν΄λΌμ΄μΈνΈλ λͺ¨λ μμ²μ μΏ ν€λ₯Ό λ΄μ μ μ‘νκ² λλ€. μ΄ν μλ²λ ν΄λΌμ΄μΈνΈμμ λμ΄μ¨ μΏ ν€μ λ΄κΈ΄ session idμ μλ²μ μ μ₯λ session idλ₯Ό λΉκ΅νμ¬ μΌμΉν κ²½μ°μλ§ μΈκ°λ₯Ό μννλ€.
μΈμ μ κΈ°λ³Έμ μΌλ‘ μΈμ¦μ 보λ₯Ό μλ²μ μ μ₯νκΈ° λλ¬Έμ (μ¦, μνμ 보λ₯Ό μλ²μμ κ΄λ¦¬νλ€) 보μμ±μ΄ λ§€μ° λλ€. λ€λ§, ν΄λΌμ΄μΈνΈμ μνλ₯Ό μλ²μμ μ μ§νκΈ° λλ¬Έμ μΈμ λ°μ΄ν°κ° μ¦κ°νκ² λλ©΄ λΆνκ° λ°μν νλ₯ μ΄ ν¬λ€.
μΈμ κ³Ό λ¬λ¦¬ ν ν°μ μ¬μ©μμ μΈμ μ λ³΄κ° μλ²μ μ μ₯λμ§ μκ³ ν΄λΌμ΄μΈνΈμμ μ μ₯λλ€. μ¬μ©μκ° λ‘κ·ΈμΈ μμ²μ, μλ²μμ μΈμ¦μ΄ κ°λ₯ν ν ν°μ λ§λ€μ΄μ ν΄λΌμ΄μΈνΈμ μ λ¬νλ€. μ΄ν ν΄λΌμ΄μΈνΈλ μμ²μ ν ν°μ μλ²λ‘ μ λ¬νκ³ , μλ²μμλ ν ν°μ μ ν¨μ±μ κ²μ¦νμ¬ μΈμ¦νλ λ°©μμ΄λ€.
λ€μλ§ν΄, μλ²μΈ‘μμ λμ΄μ μνλ₯Ό κ΄λ¦¬νμ§(μ μ§νμ§) μκΈ° λλ¬Έμ ν΄λΌμ΄μΈνΈμ μμ²λ§μΌλ‘ μΈμ¦μ²λ¦¬κ° κ°λ₯νλ€.
μ΄ ν ν°μ€μ κ°μ₯ λ§μ΄ μ¬μ©λλ κ²μ΄ λ°λ‘ JWTμ΄λ€. Json Web tokenμ μ½μλ‘μ¨ λ¨μ΄ κ·Έλλ‘ Jsonννλ‘ μ 보λ₯Ό μ£Όκ³ λ°κΈ° μν΄μ μνΈνλ ν ν°μ μ¬μ©νλ€.
JWTλ ν€λ, νμ΄λ‘λ, μκ·Έλμ² λΆλΆμΌλ‘ λλλ€.
Header μ΄λ»κ² ν ν°μ κ²μ¦ν κ²μΈκ° μ λν λ΄μ©μ λ΄κ³ μλ€.
payload ν ν°μ λ΄κΈ΄ μ¬μ©μμ μ λ³΄κ° μ μ₯λλ€. (μ ν¨κΈ°κ°, λλ€μ, λ°κΈλμ λ±λ±) ν ν° μ체μ μ λ³΄κ° λ΄κ²¨μκΈ° λλ¬Έμ μλ²μΈ‘μμλ dbλ₯Ό μ¬μ©ν μΌμ΄ μ μ΄μ§λ€.
signature ν€λμ νμ΄λ‘λλ₯Ό ν©μΉν μλ²κ° μ§μ ν secret keyλ‘ μνΈνμν€λ λΆλΆμ΄λ€. (μ΄ Secret Keyλ μλ²κ° κ°μ§κ³ μλ€.) λλ¬Έμ ν ν° λ°κΈν, νμ΄λ‘λμ λ΄μ©μ΄ λ³μ‘°λμμ΄λ μκ·Έλμ²μ μμ μ μ λ΄μ©μ΄ μ μ₯λμ΄ μκΈ° λλ¬Έμ ν ν°μ΄ λ³μ‘°λμλμ§ μμνκ² νμ ν μ μλ€.
νμ§λ§ κ²°κ΅ JWTλ ν ν° νμ·¨μ μνμΌλ‘λΆν° μμ λ‘μΈμ μκΈ° λλ¬Έμ, Access Token
, Refresh Token
μ μ¬μ©νλ λ°©μμ μ£Όλ‘ μ¬μ©νλ€.
Access Token
μ ν΄λΌμ΄μΈνΈκ° κ°μ§κ³ μλ ν ν°μ΄λ€. μ¬κΈ°μλ μ€μ μ μ μ μ λ³΄κ° λ€μ΄μλλ°, μλ²μμλ μμ²μ λ°μΌλ©΄ μ΄ ν ν°μ μ΄μ©νμ¬ μλ΅μ μ§ννλ€. κ·Έλ°λ° λ§μ½ Access Tokenμ΄ XSSλ CSRF곡격μΌλ‘ μΈν΄ νμ·¨λλ€λ©΄ ν΄λΉ ν ν°μ΄ λ§λ£λ λκΉμ§ κΆνμ΄ λΆμ¬λλ λ¬Έμ κ° μλ€. νμ§λ§ μ΄κ²μΌλ‘ μΈνμ¬ λ§λ£κΈ°κ°μ΄ μ§§μμ Έ λ²λ¦°λ€λ©΄ μ¬μ©μ μ
μ₯μμλ μ¬μ©μ μΈμ¦μ κ³μν΄μΌ νλ λΆνΈν¨μ΄ μκΈΈμλ°μ μλ€.
XSS (Cross Site Scriping) : μ¬μ©μκ° νΉμ μ€ν¬λ¦½νΈλ₯Ό κ°μ λ‘ μ€ννλλ‘ μ λνμ¬ μ‘μΈμ€ ν ν°μ νμ·¨νλ 곡격λ². Stored Xssμ Reflected Xssλ‘ λλλ€. ν΄λΌμ΄μΈνΈ μΈ‘μμ μ μ±μ½λκ° μ€νλλ€. μ¬μ©μκ° μ¬μ΄νΈλ₯Ό μ λ’°νμ¬ λ°μν¨.
CSRF (Cross-site Request Forgery) : μ¬μ΄νΈκ°μ μμ²μ μμ‘°νλκ². 곡격μκ° μλν νλ (μλ²μ reqλ₯Ό 보λ΄λ νλ - λ±λ‘, μμ λ±)μ μ¬μ΄νΈμ μμ²νκ² νλ 곡격λ². μμ²λ°μ μλ²μΈ‘μμ μ μ±μ½λκ° μ€νλλ€. μ¬μ΄νΈκ° μ¬μ©μλ₯Ό μ λ’°νμ¬ λ°μν¨.
μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ μ¬μ©λλκ²μ΄Refresh Token
μ΄λ€. **Refresh Token
**μ μλ‘μ΄ Access Tokenμ λ°κΈνκΈ° μν΄ μ¬μ©νλ€. Access Tokenμ μ§§μ μλͺ
μ κ°μ§κ³ μκΈ° λλ¬Έμ λ§λ£λ ν ν°μ μλ‘κ² λ°κΈνκΈ° μν΄ μ¬μ©λλ ν ν°μ΄λ€.
λ§μ§λ§μΌλ‘ JWTμ λμκ³Όμ μ λν΄ μ΄ν΄λ³΄μ
ν΄λΌμ΄μΈνΈμμ λ‘κ·ΈμΈ μμ²μ 보λΈλ€.
μμ²μ λ°μ μλ²λ μ λ³΄κ° λ§λμ§ νμΈ ν, λ§λ€λ©΄ JWTλ₯Ό Secret Key λ‘ μμ±νκ³ μλ΅μΌλ‘ 보λΈλ€.
ν΄λΌμ΄μΈνΈλ μλ΅λ°μ ν ν°μ λ‘μ»¬μΏ ν€μ μ μ₯νλ€.
μ΄ν, ν΄λΌμ΄μΈνΈλ μλ²μ μμ²μ 보λΌλλ§λ€ ν€λμ ν ν°μ ν¬ν¨νμ¬ μ μ‘νλ€.
μλ²λ μμ²μ΄ μ¬λλ§λ€ Secret keyλ₯Ό μ΄μ©νμ¬ μ μ‘λ°μ ν ν°μ΄ μ ν¨νμ§ κ²μ¦νλ€.
ν ν°μ΄ κ²μ¦λλ€λ©΄, μΆκ°μ μΈ μ 보νμΈ μμ΄ μΈκ°λ₯Ό μννλ€.