λͺ©μ°¨
1. μΈμ¦(Authentication)κ³Ό μΈκ°(Authorization)
μΈμ¦κ³Ό μΈκ°λ μΈλ» λΉμ·νμ§λ§ λͺ νν λ€λ₯Έ λ¨μ΄μ΄λ€.
μΈμ¦μ 'λ‘κ·ΈμΈ' κ·Έ μ체μ΄λΌκ³ μκ°νλ©΄ λλ€.
μ¦, μ¬μ΄νΈμ νΉμ κΆνμ κ°μ§ μ¬μ©μμμ κ³ μ ID, pw λ±μ ν΅ν΄μ μΈμ¦μ λ°λ κ²μ΄λ€.
μΈκ°λ λ‘κ·ΈμΈμ΄ 'μ μ§λλ μνμμ μΌμ΄λλ μΌ'μ΄λ€.
μΈμ¦μ λ°μ μ¬μ©μκ° μ¬μ΄νΈ λ΄μμ 'μμ μ κ³μ μΌλ‘λ§' ν μ μλ νλμ ν λ μ¬μ΄νΈμμ νκ°νλ κ²μ μλ―Ένλ€.
μ¬μ©μκ° μκΈ° κ³μ μ μ¬μ©νλ €ν λ μ΄μΌν±μΌμ΄μ€!!
μ μ΄μμλΌμ΄μ μ΄μ ~ -μμ½μ€
2. JWT(JSON Web Token)
1) μλ²μμ μμμΌνλ κ²μ?
JWTλ μΈκ°μ κ΄λ ¨λ κΈ°μ μ΄λ€.
μ΄λ€ μ¬μ΄νΈλ₯Ό μ¬μ©μκ° μ΄μ©ν λμλ 'ν΄λΉ μ μ κ° λ‘κ·ΈμΈν μνμΈμ§ μλμ§' λ₯Ό μλ²κ° μ μ μλ λ°©λ²μ΄ νμνλ€.
λ¨Όμ , μ¬μ΄νΈ λ΄ μλΉμ€λ₯Ό μ¬μ©μλ€μ΄ μ΄μ©ν λλ λͺ¨λ κ²μ΄ λ€ μμ²μ΄λ€. κ·Έλ¦¬κ³ μ¬μ΄νΈλ κ·Έ μμ²μ λν μλ΅μ νλ€.
μ΄λ μλ²λ μμ²λ§λ€ λ‘κ·ΈμΈ μ¬λΆλ₯Ό νμΈν ν, νΉμ μλΉμ€μ μ 곡μ νμ©ν μ§ μ ν μ§λ₯Ό κ²°μ νλ€.
맀 μμ²λ§λ€ μλ²μ μ μ μμ΄λ, λΉλ² μ 보 μ체λ₯Ό μ μ‘νκΈ°μλ λ‘κ·ΈμΈ μμ μ΄ λ무 λ¬΄κ±°μ΄ μμ μ΄λ€.
(DBμ μ μ₯λ μμ΄λ κ³μ κ³Ό λΉλ°λ²νΈλ₯Ό μ²λ¦¬ν κ°μ΄ μ λ ₯κ°κ³Ό μΌμΉνλκ°? λ±μ μ²λ¦¬)
λν 보μ μμ μ°λ €λ μ‘΄μ¬νλ€.
2) μΈμ
μΈκ°λ₯Ό μ²λ¦¬νλ λ°©μ μ€ μΈμ μ νμ©νλ λ°©λ²μ 'μΈμ νλ±μ§'λ₯Ό μ μ μ μλ²κ° μλ‘ λλμ΄ κ°μ§λ©°
μμ²μ΄ μλ²μ λ€μ΄μμ λ μ΄λ₯Ό μ΄μ©νμ¬ μΈκ°λ₯Ό νμΈνλ€.
κ·Έλ¬λ μ΄ λ°©μμ μ¬μ©μ μμ λ°λ₯Έ μ©λ λΆμ‘±κ³Ό μλ² μ¬λΆν μ μ μ₯λ μλ£κ° μ¦λ°νλ λ¬Έμ κ° μλ€.
κ·Έμ λ°λΌ λͺ¨λ μ¬μ©μ λ‘κ·ΈμΈμ΄ νκΈ°λ κ²½μ°κ° λ°μνκΈ°λ νλ€.
λ λ¬Έμ λ μλΉμ€μ κ·λͺ¨κ° 컀μ μλ² Comμ μ¬λ¬ λ λκ³ μ΄μν λμΈλ°
κ° Comκ°μ μ 보 곡μ λ¬Έμ λ‘ μΈμ μ μ§κ° μ΄λ ΅λ€λ λ¬Έμ κ° λ°μν μ μλ€.
λ§μ½ λ©λͺ¨λ¦¬κ° μλ μλ², DB λ±μ μ μ₯ν κ²½μ°μλ μλ μ νμ λ¬Έμ κ° μλ€.
μ 리νλ©΄ μΈμ μ μλ²κ° 볡μ‘ν ꡬμ±κ³Ό νκ²½μμ μ΄λ€ μνλ₯Ό κΈ°μ΅ν΄μΌνλ€λ μ€λ²ν€λκ° λ°μνλ€.
3) JWTμ λ±μ₯
JWTλ μΈμ μ λ¨μ μ 극볡νκ³ 'μΈκ°'λ₯Ό μ²λ¦¬νκΈ°μν΄ κ³ μλ 'ν ν° λ°©μ'μ΄λ€.
μ΄λ₯Ό μ¬μ©νλ μλΉμ€μλ μ¬μ©μκ° λ‘κ·ΈμΈμ νλ©΄ ν ν°μ μΆλ ₯ν΄μ μ λ¬νλ€.
μΈμ μ΄ μλ²κ° λ°μ κ°κ³ λλ¨Έμ§ λ°μ μ£Όμλ€λ©΄
JWTλ μ¬μ©μμκ² μ¨μ ν μ λ¬νλ€. μ΄κ²μ΄ μΈμ κ³Ό λ€λ₯Έμ μ΄λ€.
μ½λμ ννλ μΈμ½λ© νΉμ μνΈνλ 3κ°μ§ λ°μ΄ν°λ₯Ό μ΄μ΄λΆμΈ κ²μ΄λ€.
ex) eyJhbGciOiJIUzI.eyJzdWIiOyfQ.SflKxwReJf366yJV_adQssw5c (μμ μμ)
https://jwt.io/
JWT ꡬμ±
μμ μμλ₯Ό 보면 ' . ' λκ°λ‘ 3λΆλΆμΌλ‘ λλ κ²μ μ μ μλ€.
κ°κ°μ μ΄λ¦μ header(ν€λ), payload(νμ΄λ‘λ), verify signature(μλͺ ) μ΄λ€.
β
payloadλ μ¬μ©μ μ 보 λ±μ λ°μ΄ν°μΈ Claimμ λ΄λλ€.(λκ° λꡬμκ² μ 곡, μ ν¨κΈ°κ°, λλ€μ, κ΄λ¦¬μ μ¬λΆ λ± μλΉμ€κ° λ΄κ³ μΆμ κ²λ€)
μ¦, μ¬μ©μκ° λ‘κ·ΈμΈμ νκ³ λ°λ ν ν° λ΄μ Claimμ΄ λ΄κ²¨ μκ³
μ¬μ©μκ° μμ²μ λ³΄λΌ λλ§λ€ μλ²λ‘ ν ν°μ 보λ΄λ©΄μ μ΄λ²μλ μ¬μ©μμμ μλ²λ‘ λ°μ΄ν°κ° μ λ¬λλ κ²μ΄λ€.
μ΄λ¬ν λ°©μμ ν ν° μ체μ νμν μ 보λ€μ΄ λ€μ΄μκΈ° λλ¬Έμ DB λ΄μμ μ 보 κ²μ μκ°μ΄ μ€μ΄λ λ€.
β‘
κ·Έλ λ€λ©΄ μ΄ μ 보μ μνΈνλ μ΄λ»κ² μ§νν κΉ?
λ¨Όμ headerλ typeκ³Ό algμΌλ‘ μ΄λ£¨μ΄μ§λλ°
typeμ jwtλ‘ κ³ μ μ΄κ³ algλ verify signatureμ κ°μΌλ‘ μ¬μ©λ μκ³ λ¦¬μ¦μ΄λ€. HS256 λ± μ¬λ¬ μνΈν λ°©μ μ€ νλλ₯Ό μ§μ νλ€.
ν€λμ νμ΄λ‘λ, μλ²μ λ΄μ₯λ μνΈν€λ₯Ό μκ³ λ¦¬μ¦μ λ£μ΄μ λμ¨ κ°μ΄ λ°λ‘ verify signatureκ°μ΄λ€.
μΈλΆμ¬μ©μλ μλ²μ λ΄μ₯λ μνΈν€λ₯Ό μμ§ λͺ»νλ€λ©΄ ν ν°μ ν΅ν΄μλ μ 보λ€μ μ‘°μν μ μλ€.
μλ²λ μ¬μ©μμ μμ²μ λ΄κΈ΄ ν ν°μ headerμ payload κ°μ μλ²μ λΉλ° ν€μ ν¨κ» μκ³ λ¦¬μ¦μ λ리κ³
λ°νλ κ°μ΄ verify signatureκ°κ³Ό μΌμΉνλμ§λ₯Ό κ²ν νλ€.
λ§μ½ μΌμΉνμ§ μλλ€λ©΄ μ κ·Όμ κ±°λΆνκ³
μΌμΉνκ³ μ ν¨κΈ°κ°κΉμ§ λ¬Έμ μλ€λ©΄ λ‘κ·ΈμΈλ μ μ λ‘ μΈκ°λ₯Ό λ΄μ€λ€.
4) μΈμ κ³Ό JWTμ λ¨μ
JWTκ° μΈμ μ μλ²½νκ² λ체ν μ μλ κ²μ μλλ€!
μΈμ μ statefulνκ³ , JWTλ statelessνλ€. μ¦, λμ μ΄κ³ μ μ μ΄λ€.
μΈμ μ κ²½μ° λͺ¨λ μ¬μ©μλ€μ μνλ₯Ό κΈ°μ΅ν΄μΌνλ€λ κ²μ΄ λ¨μ μ΄μ§λ§
μ΄κ²μ΄ ν΄κ²°μ΄ λ κ²½μ° κΈ°μ΅ν΄μΌν λμμ μνλ₯Ό μΈμ λ μ μ΄ν μ μλ€.(무ν¨ν λ±μ΄ κ°λ₯ν¨)
μ΄μ λν μμλ‘ λ§μ½ λ‘κ·ΈμΈν κΈ°κΈ°κ° ν λλ§ μ μ§λλλ‘ νκΈ°μν΄μ
μΈμ λ°©μμ νμ©ν κ²½μ° μλ‘μ΄ κΈ°κΈ°κ° λ‘κ·ΈμΈμ μλν λ λ‘κ·ΈμΈλ κΈ°κΈ°λ λ‘κ·Έμμμ΄ λλλ‘
κΈ°μ‘΄ μΈμ μ μ’ λ£νλ©΄ λλ€.
λ°λλ‘ ν ν°μ κ²½μ°μλ ν λ² λ°κΈμ΄ λλ€λ©΄ μλ²μμλ λμμ μ 보λ₯Ό κ°μ§κ³ μμ§ μκΈ° λλ¬Έμ
ν΅μ νλ κ²μ΄ μ΄λ ΅λ€. μ¬μ§μ΄ μ΄λ₯Ό μ μ©νμ¬ ν ν°μ μ μ± μ μ κ° νμ©ν κ²½μ° μ΄λ₯Ό μ μ§ν μ μλ λ°©λ²μ΄ μλ€.
λ°λΌμ λ§μ μλΉμ€λ€μ΄ JWTμ μΈμ μ μ μ ν λΆλ°°νμ¬ μ¬μ΄νΈλ₯Ό λ§λ λ€.
5) ν ν°μ λ¨μ μ 보μνλ λ°©λ²
μ΄λ¬ν ν ν°μ λ¨μ μ 보μνκΈ° μν΄μ κ³ μν λ°©λ² μ€ νλλ λ‘κ·ΈμΈ μ 2κ°μ ν ν°μ λΆμ¬νλ κ²μ΄λ€.
μλͺ μ΄ λͺ μκ° νΉμ λͺ λΆ μ΄νλ‘ μ§§μ access ν ν°κ³Ό
λ³΄ν΅ 2μ£Ό μ λμ κΈ΄ μλͺ μ κ°μ§λ refresh ν ν°μ΄λ€.
μ΄ λ°©μμ ꡬννλ λ°©μ μ€ νλλ
λ ν ν°μ λ°κΈνκ³ ν΄λΌμ΄μΈνΈμκ² λ³΄λ΄κ³ λμ refresh ν ν°μ μμκ°μ DBμλ μ μ₯νλ€.
μ¬μ©μλ access ν ν°μ μλͺ μ΄ λ€νλ©΄ refresh ν ν°μ 보λ΄λλ°
μλ²κ° DBμ μ μ₯λ κ°κ³Ό λΉκ΅ν΄λ³΄κ³ λ§λ€λ©΄ μλ‘μ΄ access ν ν°μ λ°κΈν΄μ£Όλ κ²μ΄λ€.
refresh ν ν°μ΄ μμ νκ² κ΄λ¦¬λλ€λ©΄ μ΄κ²μ μ ν¨κΈ°κ° λμμ λ‘κ·ΈμΈμ μλ‘νμ§ μκ³ λ access ν ν°μ λ°κΈλ°μ μ μλ κ²μ΄λ€.
μ΄ λ°©μμ access ν ν°μ΄ λκ΅°κ°μκ² νμ·¨λμ΄λ κ·Έκ²μ΄ κΈλ°© 무μ©μ§λ¬Όμ΄ λκ³
κ°μ λ‘κ·Έμμμ μν€κΈ° μν΄μ refreshν ν°μ dbμμ μμ νμ¬ accessν ν° κ°±μ μ΄ λμ΄μ λΆκ°νλλ‘ νλ©΄ λλ€.
λ¬Όλ‘ μ§§μ μκ° access ν ν°μ΄ μ μ§λλ λμ μ΄λ₯Ό λ§μ μ μλ λ°©λ²μ μλ€. κ·Έλ¬λ ν ν° νλλ‘ μ΄μνλ κ²λ³΄λ€ μ’μ
λκΈ