D+132
- Final Project : 12μΌμ°¨ -
( multer, social login, jwt νμ΅ )
μ€λμ λ΄μΌλΆν° 본격μ μΌλ‘ μ§ννκ² λ
μμ λ‘κ·ΈμΈκ³Ό multer, κ·Έλ¦¬κ³ ν ν°μ λν΄μ κ°λ¨νκ² νμ΅μ νλ μκ°μ κ°μ‘λ€.
μμ λ‘κ·ΈμΈμ First νλ‘μ νΈ λ κΉνλΈλ₯Ό ꡬνν΄ λ³΄μκΈ°λ νκ³ ,
κ°μ΄ μ§ννλ νμ΄λΆκ»μ First νλ‘μ νΈλ μμ λ‘κ·ΈμΈννΈλ‘ μΉ΄μΉ΄μ€λ₯Ό μ΄λ―Έ μ§νν΄ λ³΄μ ¨λ€κ³ νμ μ
ν° κ±±μ μ μμ§λ§...(?)
μ΄λ―Έμ§λ₯Ό μ λ‘λνλ multerμ μΈμ¦μ μ¬μ©νλ JWTν ν°μ λν΄μλ
νΌμ μ λλ‘ ν΄λ³Έ μ μ΄ μμ΄μ μ½κ° κΈ΄μ₯μνλ€.
multerλ λ¨μν λ΄κ° λ§λ μλ²μμ μ§μ ν ν΄λμ μ΄λ―Έμ§λ₯Ό μ λ‘λνλ λ°©λ²λ μμ§λ§
μ΄ λ°©λ²μ μλ²κ° 무거μμ§λ©΄μ λΆλ΄μ κ°μ§κ² λκΈ° λλ¬Έμ
λ³΄ν΅ λ°°ν¬μμ λ§λλ S3 λ²ν·μμ μ μ₯λ μ μλλ‘ κ΅¬ννλ€κ³ νλλ°
λμ μ²μ λ€μ΄λ³΄λκ±°λΌ μμ μ λ‘λ² μ΄μ€λΌμ μ½κ° κ±±μ μ΄ λλκ² κ°λ€.
κ·Έλ¦¬κ³ JWTλ μ΄μ μ μμ μμλ λ°°μ°κΈ°λ νκ³ , First νλ‘μ νΈμμλ μ¬μ©ν΄ λ³Έ μ μ΄ μμ§λ§
μμ μμλ κ°λ μ μμ£Όλ‘ μ΄ν΄νλ €κ³ νλ€λ³΄λ μ€μ΅μ μ λλ‘ μ΄ν΄νμ§ λͺ»ν μ± λμ΄κ°μκ³ ,
νλ‘μ νΈλμλ νμ₯λμ΄ μΈμ¦κ΅¬νμ 맑μΌμκ³ λλ κ±°μ κ΄λκ° μμ€μ΄μμ΄μ λ§μ΄ λ―Έμνλ€.
κ³Όμ° λ¬΄ννκ² μ ν μ μμμ§ κ±±μ μ΄ λμ§λ§.... λ―Έλμ λμΌ μν΄μ€...π π π
β οΈ multerμ social loginμ λ°λ‘ μμ±ν΄ λ³Ό μμ μ λλ€ β οΈ
JWT (jsonwebtoken)
μΈμ (session) μ리
JWTλ₯Ό μκΈ°μ μ sessionμ΄ μ΄λ€ μλ¦¬λ‘ μλνλ μ§μ λν΄ μ κΉ μ΄ν΄λ³΄μλ©΄,
β λ¨Όμ νμμ΄ λ‘κ·ΈμΈμ μλνλ€.
β‘ μ μ κ° μλ²λ‘ λΆν° λ‘κ·ΈμΈμ μμ²νλ©΄ μλ²λ κ·Έ μκ° μΈμ μ μμ±νκ³ μ μ μκ² sessionIDλ₯Ό λΆμ¬νλ€.
β’ μ΄ μ΄νλΆν° μ μ λ λ‘κ·ΈμΈμ ν νμλ§ μ κ·Ό ν μ μλ μμ²μ ν κ²½μ°μ,
μλ²μκ² λ‘κ·ΈμΈμμ²μ νμ λ λ°μλ sessionIDλ₯Ό μμ²κ³Ό ν¨κ» 보λ΄μ€κ² λλ€.
β£μ΄λ μλ²λ μ μ μκ² λ°μ sessionIDλ₯Ό ν΅ν΄μ μ°λ¦¬ νμμ΄ λ§λμ§ νμΈνκ³ ,
μΌμΉν κ²½μ° μμ²μ λ°λ₯Έ μλ΅μ 보λ΄μ£Όκ² λλ€.
μ΄λ° μλ¦¬λ‘ μλνκ² λλλ° μΈμ λλ¦μ μ₯μ λ μκ² μ§λ§ μ΄λ κ² λ κ²½μ°μ
μλ²μμ μΈμ μ λ§λ€κΈ° λλ¬Έμ νμμ΄ λ§μμ§μλ‘ μλ²μμ μ°¨μ§νλ λ°μ΄ν°μ μμ΄ λ§μμ Έ
μλ²μ λΆλ΄μ΄ μκΈΈ κ²μ΄λ€.
JWT(jsonwebtoken) μ리
μΈμ μ μ΄λ¬ν λ¨μ μΌλ‘ 보μλ κ²μ΄ λ°λ‘ ν ν°μ΄λ€.
JWTλ λ§μ ν ν°λ€ μ€μ νλλ‘ κ°μ₯ 보νΈμ μΌλ‘ μ¬μ©λκ³ μλ μμ΄μ΄λ€.
β νμμ΄ λ‘κ·ΈμΈμ νλ€.
β‘ μλ²λ JWTλ₯Ό ν΅ν΄μ ν ν°μ μμ±νκ³ μμ±λ ν ν°μ νμμκ² μ μ‘ν΄μ€λ€,
β’ μλ²λ‘λΆν° λ°μ ν ν°μ ν΄λΌμ΄μΈνΈλ 보κ΄νκ² λλ€.
(μ΄λ μ μ₯λ°©μμ Local Storage, cookie λ± λ€μνλ€)
β£ μ΄ μ΄νμ νμμ λ‘κ·ΈμΈμ ν νμλ§ μ κ·Όν μ μλμμ²μ ν κ²½μ°μ,
μλ²μκ² λ‘κ·ΈμΈμμ²μ νμλ λ°μλ ν ν°μ Headerμ μ μ₯ν΄ ν ν°μ μ λ¬νλ€.
β€ μλ²λ νμμΌλ‘λΆν° λ°μ ν ν°μ ν΅ν΄ μ§μ λ§λ ν ν°μ΄ λ§λ μ§ νμΈμ ν νμ,
νμΈλμμ κ²½μ° μμ²μ λ°λ₯Έ μλ΅μ μ μ‘ν΄ μ€λ€.
μΈμ¦λ°©μμμ μΈμ κ³Ό ν ν°μ κ°μ₯ ν° μ°¨μ΄μ μ
μΈμ μ μλ²κ° μΈμ μ κ°μ§κ³ μκ³ ν΄λΌμ΄μΈνΈμκ² IDλ₯Ό λΆμ¬νλ€λ©΄,
ν ν°μ ν΄λΌμ΄μΈνΈμ체μ ν ν°μ λΆμ¬νλ λ°©μμΌλ‘ μλ²μ μ©λλΆλ΄μ΄ ν¨μ¬ μ λ€.
JWT(jsonwebtoken)μ ꡬ쑰
βπ» ν€λ (header)
• alg : μ΄λ€ μκ³ λ¦¬μ¦μΌλ‘ μνΈν ν κ±°μΌ?
• typ : μ΄λ€ νμ μ ν ν°μ΄μΌ?
βπ» λ΄μ© (payload)
•ν ν°μμ μ¬μ©ν μ 보μ μ‘°κ°μ΄ λ΄κ²¨μλ€.
• λ΄κ° μ λ³Όλ₯΄ μΆκ°ν μλ μλ€.
• νμ΄λ‘λμ κ°μ΄ λ§μ΄ λ€μ΄κ°μλ‘ λ°μ΄ν°μ μμ΄ μ¦κ°νκΈ° λλ¬Έμ μ΅μνμ κ°μ λ£μ΄μ£Όλ κ²μ΄ μ’λ€.
• μ€νλ ꡬμμΌλ‘ 곡κ°λλ©΄ μλλ μ 보λ₯Ό λ£μ΄μλ μλλ€.
•id(id μ 보), name(name μ 보), exp(κΈ°ν) λ± λ€μν μ 보λ€μ΄ λ€μ΄κ° μ μλ€.
π€π» μλͺ (signature)
• ν€λμ λ΄μ©μ μνΈν κ°μΌλ‘ secrete keyκ° μΆκ°λμ΄ μνΈνκ° λμλ€κ³ 보면 λλ€.
Access token / Refresh token
• Access token : μ¬μ©μμ κΆνμ μ»μ λ μ¬μ©λλ©°, μΈμ¦νλ μ μ°¨μμ ν΅μ¬μ μ¬μ©λλ ν ν°μ΄λ€.
• Refresh token : Access tokenμ΄ μμ±λ λ λμμ μμ±λλ©°, Access tokenλ³΄λ€ κΈ΄ μ ν¨κΈ°κ°μ μ£Όκ³ μμ±λλ©°,
Access tokenμ΄ λ§λ£λ κ²½μ°μ κ°±μ μ νκΈ° μν λͺ©μ μΌλ‘ μ¬μ©λλ©°, Refresh tokenμ νμλ‘ λ§λ€μ΄μΌ λλ κ²μ μλλ€.
λ©μλ
• sign : ν ν° μμ±νκΈ°
sign( ) { _____ , _____ , _____ , _____ }
1st μΈμ - νμ΄λ‘λ
2nd μΈμ - λΉλ°ν€ (λΉλ°ν€λ λꡬμκ²λ 보μ¬μ Έμλ μλλ€)
3rd μΈμ - ν ν° μ 보 (ex. μ ν¨κΈ°κ°)
4th μΈμ - μ½λ°±ν¨μ (μλ΅κ°λ₯νλ©°, μμ μμ λκΈ°μ²λ¦¬)
• verify : κΆν νμΈνκΈ°
- jsonwebtoken λͺ¨λ κΆνμ νμΈνλ λ©μλ
- λ°λ³΅μ μΌλ‘ μμ±νλκ²μ νΌνκΈ° μν΄ λ³΄ν΅ λ―Έλ€μ¨μ΄λ‘ μ μ¬μ©λλ€.
verify( ) { _____ , _____ }
1st μΈμ - token (μΈμ¦μ΄ λ ν ν°μΈμ§ νμΈνλ μ©λ)
2nd μΈμ - secret key (μνΈν λκ²μ λμ½λ© νλ μ©λ)
'μλ > Code-States' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[D+134] Final Project : 14μΌμ°¨ JWT(JSON Web Token) (0) | 2021.03.03 |
---|---|
[D+133] Final Project : 13μΌμ°¨ multer μ μ©νκΈ° (0) | 2021.03.01 |
[D+131] Final Project : 11μΌμ°¨ νμνν΄, λ‘κ·Έμμ API (0) | 2021.02.27 |
[D+130] Final Project : 10μΌμ°¨ mongoose '$' update operator (0) | 2021.02.26 |
[D+129] Final Project : 9μΌμ°¨ 본격 API ꡬν μμ (2) | 2021.02.26 |
λκΈ