[MEMO APP] Back-end/ Session&Token-Register (1)
π¨π» Session&Token (1)
μ§λ ν¬μ€ν μ μ ν¬λ μ€μ λ‘ DBμ λ°μ΄ν°λ€μ΄ μ μ₯λλκ²κΉμ§ ꡬνμ μλ£νμ΅λλ€.
μ΄μ νμκ°μ μ νμμ λ³΄κ° μ μ§λλλ‘ νλ κΈ°λ₯μ ꡬνν΄ λ³΄λλ‘ ν κ»λ°μ, μ΄λ₯Ό μν ν ν°μ μμ±νλ μμ μ λ¨Όμ μ΄λ² ν¬μ€ν μμ λ€λ€λ³΄λλ‘ νκ² μ΅λλ€.
π Web token
보μ λ° μΈμ¦μ μν΄ μ¬μ©νλ μΌμ’ μ μ΄μ κ°μ λ¬Έμμ΄λ©μ΄λ¦¬ μ λλ€.
μ£Όλ‘ μλ―Έκ° μλ λ¬Έμμ΄(λλ€ν λ¬Έμμ΄) κΈ°λ°μΌλ‘ ꡬμ±λμ΄μκ³ νΉμ ν μ 보λ₯Ό μνΈνν΄μ λ¬Έμμ΄νμμΌ μ¬μ©μμκ² λ°κΈνλ λ°©μμ λλ€.
κ·Έλ¦¬κ³ μ¬μ©μλ μΈμ¦μ μν΄μ μλ²μ ν΄λΉ ν ν°μ λ€κ³ μ λ°λ©νκ³ μ΄κ²μ μ°λ¦¬κ° μ½μ΄μ μΈμ¦λ μ μ μΈμ§ μλ³νλκ²μ λλ€.
μ°λ¦¬λ μΉν ν°μ€μμλ ν΄λμ(Claim)κΈ°λ° ν ν°μ μ¬μ©νκ² μ΅λλ€.
Claimν ν ν°μ΄λ μΌλ°μ μΈ ν ν°μλ λ¨μν λ¬Έμμ΄λ©μ΄λ¦¬κΈ° λλ¬Έμ νΉμ ν μ 보λ₯Ό λ΄κΈ°κ° μ΄λ ΅λ€λ λ¨μ μ΄ μμ΅λλ€.
νμ§λ§, μ°λ¦¬κ° μ¬μ©ν ClaimκΈ°λ° ν ν°μ μ 보λ₯Ό λ΄μ μ μλλ° μ΄λ Claimμ μ¬μ©μ μ 보λ λ°μ΄ν° μμ±λ±μ μλ―Έν©λλ€.
μ§μ ꡬνν΄μ μ¬μ©νκΈ°μλ μ μ λ΄κ³΅μ΄ λΆμ‘±ν¨μΌλ‘ μ΄λ―Έ μ λ§λ€μ΄μ Έμλ λͺ¨λμ κ°μ Έλ€κ° μ¬μ©νλλ‘ ν ν λ°μ, μ°λ¦¬κ° μ¬μ©ν λͺ¨λμ λ°λ‘ Json Web Token μ λλ€.
κ·ΈλΌ μ°λ¦¬μ νλ‘μ νΈμ install ν΄λ³΄λλ‘ν κ²μ.
( yarn add jsonwebtoken )
/* Json Web Tokenμ λν ꡬ체μ μΈ μ€λͺ μ μ‘΄κ²½νλ velopertλμ κΈμ λ°μ·ν΄μμ΅λλ€. */
Json Web Tokenμ μ΄ 3κ°μ§μ μ 보λ₯Ό κ°μ§κ³ μμ΅λλ€.
-
Header (ν€λ)
-
Payload (λ΄μ©)
-
Signature (μλͺ )
Headerλ λκ°μ§μ μ 보λ₯Ό κ°μ§κ³ μμ΅λλ€.
-
type : ν ν°μ νμ μ μ§μ ν©λλ€.
-
alg : ν΄μ± μκ³ λ¦¬μ¦μ μ§μ ν©λλ€.
Payloadλ ν ν°μ λ΄μ λ΄μ©λ€μ΄ ν¬ν¨λμ΄ μμ΅λλ€. μ¬κΈ°μ λ΄λ μ 보μ ν μ‘°κ°μ ν΄λ μ(Claim)μ΄λΌκ³ λΆλ₯΄κ³ , μ΄λ name/value νμμ κ°μ§κ³ μμ΅λλ€. κ·Έλ¦¬κ³ λ³΅μκ°μ ν΄λ μμ ν ν°μ λ΄λκ²λ κ°λ₯ν©λλ€.
κ·Έλ¦¬κ³ μ΄ ν΄λ μμ μ’ λ₯λ μ΄ 3κ°μ§κ° μμΌλ©° κ°κ° μλμκ°μ΄ ꡬλΆλμ΄ μ§λλ€.
- (λ±λ‘λ) registered claim
- (곡κ°) public claim
- (λΉκ³΅κ°) private claim
μ΄μ€μ registered claimμ μλΉμ€μ νμν μ 보λ€μ΄ μλ, ν ν°μ λν μ 보λ€μ λ΄κΈ°μνμ¬ μ΄λ¦μ΄ μ΄λ―Έ μ ν΄μ§ ν΄λ μλ€μ λλ€.
μ΄ ν΄λ μμ ν¬ν¨λ ν΄λ μλ€μ μ΄λ¦λ€μ μλμ κ°μ΄ μμ΅λλ€.
|
Public claimμ μΆ©λμ΄ λ°©μ§λ μ΄λ¦μ κ°μ§κ³ μμ΄μΌ ν©λλ€. μΆ©λμ λ°©μ§νκΈ° μν΄μλ, ν΄λ μ μ΄λ¦μ URIνμμΌλ‘ μ§μ΅λλ€.
{
"https://localhost.com/4000/jwt_claims/is_admin": true
}
Private claimμ λ±λ‘λ ν΄λμλ κ³΅κ° ν΄λμλ μλκ³ μμΈ‘(μλ²μ ν΄λΌμ΄μΈνΈ)κ°μ νμνμ μ¬μ©νλ ν΄λ μ μ΄λ¦μ λλ€.
Example ( velopert λΈλ‘κ·Έ μμλ΄μ© λ°μ· )
{
"iss": "gorillaKim.com",
"exp": "1485270000000",
"https://gorillaKim.com/jwt_claims/is_admin": true,
"userId": "11028373727107",
"username": "gorillaKim"
}
Signatureλ ν€λμ μΈμ½λ©κ°κ³Ό, μ 보μ μΈμ½λ©κ°μ ν©μΉν μ£Όμ΄μ§ λΉλ°ν€λ‘ ν΄μ¬νμ¬ μμ±ν©λλ€.
μμ λ΄μ©μ ν λλ‘ μ°λ¦¬κ° μ¬μ©ν ν ν° μμ±ν¨μμ κ·Έ ν ν°μ ν΄λ μμΌμ£Όλ ν¨μλ₯Ό λ§λ€μ΄ 보λλ‘ νκ² μ΅λλ€.
token.js νμΌμ λ§λ€κ»λ° μ΄λ κ² λ³΄μ‘°λ‘ λμμ£Όλ νμΌλ€μ src ν΄λμμ libλΌλ ν΄λλ₯Ό λ§λ€μ΄μ λ°λ‘ κ΄λ¦¬νλλ‘ νκ² μ΅λλ€.
λ€μμ κ·Έλ¦Όμ²λΌ ν΄λμ νμΌμ ꡬμ±ν΄μ£ΌμΈμ.
κ·Έλ¦¬κ³ token.jsμ λκ°μ ν¨μλ₯Ό λ§μ μμ±ν΄λ³΄λλ‘ ν κ²μ.
μ²μμΌλ‘ ν ν° μμ±ν¨μμ λλ€.
- payloadλ μΈλΆμμ μμ±νμ¬ λ°μ jsonwebtokenμΌλ‘ λ겨μ€λλ€.
- κ·Έλ¦¬κ³ secretμ μ°λ¦¬κ° λ§λ€ ν ν°μ ν΄μ¬ν νκΈ°μν΄ μ¬μ©νλ saltλΌ λΆλ¦¬λ μΌμ’ μ λ¬Έμμ΄μ λλ€.
μ¬κΈ°μ secretκ°μ 보μμμ μ΄μ λ‘ μμ€μ½λμμμ κ°μΆ°μ£Όλκ²μ΄ μ’μμΌλ‘ .env νμΌμ λ§λ€μ΄μ λΆλ¬μ μ¬μ©ν΄μ€λλ€.
κ·Έλ¦¬κ³ ν ν°μ μμ±νμΌλ μ΄ ν ν°μ ν΄λ ν΄μ£Όλ decodeν¨μλ λ§λ€μ΄μ£Όκ² μ΅λλ€.
κ·Έλ¦¬κ³ λ§μ§λ§μΌλ‘ λ ν¨μλ₯Ό μΈλΆλ‘ 보λ΄μ£Όλ exportμμ λ ν΄μ£Όκ² μ΅λλ€.
μ¬κΈ°κΉμ§ μ€λμ ν ν°μ μ½κ³ ν΄μνλ ν¨μλ₯Ό λ§λ€μ΄ 보μμ΅λλ€. λ€μ ν¬μ€ν μμλ μ΄ ν ν°ν¨μλ€μ νμ©ν΄μ νμκ°μ μ μ°¨ μ±κ³΅μ ν ν°μ λ°κΈνλ λΆλΆμ μμ±μμΌμ£Όλλ‘ νκ² μ΅λλ€.