μ κ° λ°°μΈ μ μλ μ§λ¬Έμ νκΈ°μ μ μ ν μ₯μμμΌλ©΄ μ’κ² μ΅λλ€! μ λ ν μ€νΈλ₯Ό μ²μ μ νκ³ ν μ€νΈ μ νκ΅°μ΄ μ 곡νλ λͺ¨λ μ΄μ μ λ§€μ° κ΄μ¬μ΄ μμ΅λλ€. μ΄λμλΆν° μμν΄μΌ ν μ§ λ§λ§ν μ μμ΅λλ€.
μΈμ¦μ JWTλ₯Ό μ¬μ©νλ APIκ° μμ΅λλ€. κ·Έλ¬ν νκ²½μμ ν μ€νΈλ₯Ό μ€μ νλ λ°©λ²μ λν λμ μμ€μ μ€λͺ μ κ΄μ¬μ΄ μμ΅λλ€. 컨νΈλ‘€λ¬λ₯Ό λ¨μ ν μ€νΈν λ λμμ μΈμ¦μ ν μ€νΈνκ³ μΆμ§ μλ€κ³ κ°μ ν©λλ€. 401μ μ»μ§ μκ³ λ΄ μλν¬μΈνΈλ₯Ό ν μ€νΈν μ μλλ‘ μΈμ¦μ μ‘°λ‘±νλ λ°©λ²μ΄ νΌλμ€λ½μ΅λλ€.
κΈμ, λλ ν¨κ³Όκ° μμ μ μλ λͺ κ°μ§ μ μμ΄ μμ΅λλ€:
μ λ (1)μ μ νν μΌλΆ μμ€ν μμ μμ νκ³ μμ΅λλ€. κ·Έλ° λ€μ ν μ€νΈλ μ€νμ ν΅ν΄ μ€νλκΈ° λλ¬Έμ λ¨μ ν μ€νΈκ° μλλΌ ν΅ν© ν μ€νΈμ²λΌ 보μ λλ€. λ°λ©΄ ν μ€νΈ νκ²½κ³Ό νλ‘λμ νκ²½ μ¬μ΄μλ μ°¨μ΄κ° μμ΅λλ€.
μ½λμμ νκ²½μ νμΈνλ €λ κ²½μ° ν
μ€νΈ(fx. -e
맀κ°λ³μ in lab )λ₯Ό μ€νν λ NODE_ENV=test
μ€μ ν μ μμ΅λλ€. κ·Έλ¬λ ν
μ€νΈ νκ²½κ³Ό νλ‘λμ
νκ²½μ΄ ν¬κ² λ€λ₯΄μ§ μλ€λ μ μ μμμΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ μ€μ λ‘ νλ‘λμ
νκ²½μ ν
μ€νΈνλ κ²μ΄ μλλλ€.
@rhewitt22 μ°λ¦¬λ @wallingμ΄ μ€λͺ
ν μ κ·Ό λ°©μμ μ νΈν©λλ€.
(μ¬κΈ°μ ν
μ€νΈλ "λ¨μ" ν
μ€νΈ λμ "ν΅ν©"κ³Ό λ μ μ¬ν¨)
_μ νν_ κ·Έλ° μ΄μ λ‘. λΉμ μ΄ μ‘°λ‘±νλ λͺ¨λ κ²μ "_fake_"μ΄λ―λ‘ "_real_"μ΄ μλνλμ§ μ¬λΆλ₯Ό μ μ μμ΅λλ€(_κ·Έλμ λ²κ·Έκ° λ κ°λ₯μ±μ΄ λμ΅λλ€_).
μ°λ¦¬λ μ¬λλ€μ΄ λ©μλλ₯Ό λ³κ²½ν λ λͺ¨μ μ λ°μ΄νΈλ₯Ό _μμ΄λ²λ¦¬κ³ κ²°κ³Όμ μΌλ‘ ν μ€νΈκ° _νμ€_μ λ°μνμ§ μλ (_large_) νλ‘μ νΈλ₯Ό μμλ°μμ΅λλ€. _ λλ²κΉ νλ μ λͺ½ _!
νμ μ€μ€λ‘μκ² λ¬Όμ΄λ³΄μμμ€. "_( μ ) μ°λ¦¬ κ° μ΄κ²μ μ‘°λ‘±ν΄μΌ ν©λκΉ?_"
μ 3μ μλΉμ€λ λ€νΈμν¬ μ₯μΉμ κ°μ΄ ν΅μ ν μ μκΈ° λλ¬Έμ μ‘°λ‘±νλ κ²½μ°,
λ§μ΄ λλκ΅°μ. νμ§λ§ μμ μ _μμ μ μ€νμ _μ‘°λ‘±νκ³ μλ€λ©΄ μΌμ΄ λ무 볡μ‘ν μ μλ€λ μ μ κ³ λ €ν΄μΌ ν©λλ€...
κ·νμ _question_μ λ¨μλ " _API _"λΌλ μ©μ΄μ μμ΅λλ€. μ΄κ²μ "λ¨μ"κ° μλλΌ (API) "_ endpoint _"λ₯Ό ν μ€νΈνκ³ μμμ λνλ λλ€.
λμ μ λλ¬νλ©΄ 401μ΄ νμλλ©΄ _μΈμ¦_ν΄μΌ ν©λλ€! (_μ’μ μμ! μ±μ΄ μμλλ‘ μλν©λλ€!_)
λ€μμ _ λΉμ μ΄ νμλ‘ νλ κ²μ _ νλ ν
μ€νΈμ _ μ€μ μ μΈ μ μ
λλ€.
https://github.com/dwyl/hapi-auth-jwt2/blob/f17bac65d40b2a9154da84390b874cae4e1de192/test/test.js#L119 -L135
κ·Έλ λ€λ©΄ λ€μμ μ½λ κ²μ΄ μ’μ΅λλ€.
_μμ μ_ μ½λκ° λ무 볡μ‘νκ³ κ·Έκ²μ μ‘°λ‘±ν _νμ_λ₯Ό λλλ€λ©΄ _λ¨Όμ μ½λλ₯Ό λ¨μν _!!
λν λ€λ₯Έ μ¬λλ€μ΄ μ°λ¦¬μ ν μ€νΈμ μμ‘΄ν μ μλλ‘ hapi-auth-jwt2 νλ¬κ·ΈμΈ μ μμ±νμ΅λλ€. κ·Έλ¦¬κ³ _linear νμ₯ κ°λ₯_ Redis μ§μ μμ λ₯Ό μΆμνμ΅λλ€: https://github.com/dwyl/hapi-auth-jwt2-example κ·Έλμ μ¬λλ€μ΄ μ½λλ₯Ό 볡μ¬νμ¬ λΆμ¬λ£μ μ μμ΅λλ€(_tested_)! :λμ§:
_We_λ μ‘°λ‘± ν λ μ°λ¦¬μ μν "λ무 λλ¦° _feel _"κ·Έλ μ§ μμΌλ©΄ μ°λ¦¬ κ° ν μ€νΈ ν΅κ³Όμ _possible_λ‘ μ€νλ§νΌ _ALWAYS_ μ΄λ (λ¨μ§ _essential_μ λν μμ‘΄μ±μ μ ννλ©΄μ).
μ± κΈ°λ₯μ μμμ μΈμ¦μ΄ νμν κ²½μ° μΈμ¦/νμΈ λ°©λ²μ _μ€ν_ν _κΈ°ν_λ‘ μ΄λ₯Ό μ¬μ©νμ§ μμΌμκ² μ΅λκΉ? κΆκ·Ήμ μΌλ‘ μΈμ¦/κ²μ¦μ΄ μ€νμμ κ°μ₯ ν° λ³λͺ© νμ μ€ νλμ΄κΈ° λλ¬Έμ μΈμ¦μ΄ μΌλ§λ _μ±λ₯μ΄ μ’μ__ μλ©΄ μ±μ _μ’μ_ κ²μ λλ€! (μ¦ _λͺ¨λ _ GET/POST/PUT/DELETE _request_λ μΈμ¦/κ²μ¦μ κ±°μ³μΌ νλ―λ‘ λͺ λ°λ¦¬μ΄ μ΄μ κ±Έλ¦¬μ§ μμμΌ ν©λλ€... κ·Έ μ΄μμ μ±μ΄ _νμ₯λμ§ μμ΅λλ€_!)
κΈ°μ΅νμμμ€ : _ μ무κ²λ κ°μ νμ§ λ§μμμ€_. μ ν리μΌμ΄μ μ ν μ€νΈνλ κ²μ΄ μ΄λ»κ² μλ―Έκ° μλμ§ μ€μ€λ‘ κ²°μ νμμμ€. ν μ€νΈλ₯Ό μννλ "μ¬λ°λ₯Έ λ°©λ²"μ΄ μλ€λ©΄ λͺ¨λ λνμμ κ·Έκ²μ κ°λ₯΄μΉ κ²μ λλ€. "κ°μ₯ μ’μ λ°©λ²"μ "_pragmatic_" μ κ·Ό λ°©μμ λλ€. _your_ νλ‘μ νΈμ μλ―Έκ° μλ μΌμ νμΈμ.
λμμ΄ λκΈ°λ₯Ό λ°λλλ€. κ·Έλ μ§ μμ κ²½μ° μ΄λμμ λ§νλμ§ μλ €μ£Όμμμ€! :+1:
λ λ€ κ°μ¬ν©λλ€! μ΄κ²μ λ§€μ° μ μ©ν©λλ€. κ·νμ μ μμ λ°λ₯΄λ©΄ μ΄ μ€μ μ΄ ν΅ν© ν μ€νΈμ μ ν©νλ€κ³ μκ°ν©λλ€. μ΄λ¬ν λΆλΆμ΄ ν¨κ» μλνλμ§ νμ€ν μκ³ μΆμ΅λλ€.
μΈμ¦ λ°©λ²μΌλ‘ oAuthλ§ μ¬μ©νκ³ μμ΅λλ€(μ¬μ©μ μ΄λ¦/λΉλ°λ²νΈ μμ). ν μ€νΈ ν΄λΌμ΄μΈνΈλ₯Ό λ§λλ λ°©λ²μ λν΄ μμΈν μκ³ μΆμ΅λλ€. μ 체 oAuth νλ¦μ μ§ννκ³ μΆμ§λ μμ§λ§ ν μ€νΈμ μ¬μ©ν μ μλ ν ν°μ νλμ½λ©νλλ‘ μ μνμ ¨μ΅λλ€. ν μ€νΈ ν΄λΌμ΄μΈνΈλ₯Ό λ§λλ λ° λμμ΄ λ λ§ν 리μμ€λ₯Ό μΆμ²ν΄ μ£Όμκ² μ΅λκΉ?
νμ¬ νλ‘μ νΈμμ SailsJS v11.0μ μ¬μ©νλ λ° λμμ΄ λλ€λ©΄. λ΄ μλ²λ₯Ό μμνκ³ κ³ μ μ₯μΉλ‘ λ©λͺ¨λ¦¬ λ΄ λ°μ΄ν°λ² μ΄μ€λ₯Ό μμ±/μ±μ°λ λΆνΈμ€νΈλ© ν μ€νΈ νμΌ μ΄ μμ΅λλ€. ν μ€νΈ ν΄λΌμ΄μΈνΈλ₯Ό μμ±νκΈ°μ μ μ ν μ₯μκ° μλκΉμ?
λ€μ ν λ² κ°μ¬ν©λλ€. μ§μμ κΈ°κΊΌμ΄ κ³΅μ ν μ μλ μ¬λλ€μ μ°Ύλ κ²μ μ λ§ λ©μ§ μΌμ λλ€.
@rhewitt22 , μ κ²½μ° ν μ€νΈ ν΄λΌμ΄μΈνΈλ μ¬λ°λ₯Έ νμ΄λ‘λμ λΉλ° ν€λ‘ μλͺ λ λ§λ£λμ§ μλ JWT ν ν°μ λ§λλ κ²λ§νΌ κ°λ¨νμ΅λλ€. λμμ΄ λ μλ μμ΅λλ€.
OAuthμμλ μΈμ¦ νλ¦μ λ°λΌ λ€λ₯΄λ€κ³ μκ°ν©λλ€. νΉμ κΆνμ΄ μκ³ λ§λ£λμ§ μλ μ΅μ’ μ‘μΈμ€ ν ν°μ μμ±ν μλ μμΌλ―λ‘ λ§€λ² νλ¦μ κ±°μΉ νμκ° μμ΅λλ€.
ν΄λΉ ν ν°μ΄ νλ‘λμ μμ€ν μμ λ§μ κΆνμ λΆμ¬νλ κ²½μ° ν μ€νΈμμ λ§λ£λμ§ μλ ν ν°μ νλμ½λ©νλ κ²μ λν 보μ λ¬Έμ μ μ£Όμνμμμ€. κ·Έλ¬λ©΄ μ μ¬μ μΈ κ³΅κ²©μλ μ‘μΈμ€ κΆνμ μ»κΈ° μν΄ μ΄ ν ν°λ§ νμν©λλ€. νΉμ ν΄λΌμ΄μΈνΈμ λν μ‘μΈμ€ κΆνμ λΆμ¬νλ λ°©λ²μ΄ νμν μ μμΌλ©° ν μ€νΈλ₯Ό μ€νν λ ν μ€νΈ ν΄λΌμ΄μΈνΈ λλ ν ν°μ λν μ‘μΈμ€ κΆνμ λΆμ¬ν μ μμ΅λλ€. λͺ¨λ κ²μ΄ μλ―Έκ° μκΈ°λ₯Ό λ°λλλ€.
@μλ§
μ‘°μΈ ν΄μ£Όμ μ κ°μ¬ν©λλ€!
ν μ€νΈμμ oAuth νλ¦μ 건λλ°κ³ κ°μ§ μ¬μ©μλ₯Ό λ§λ€κ³ νλ‘λμ μμ μ¬μ©νλ κ²κ³Ό λμΌν JWT(λ§λ£ ν¬ν¨)λ₯Ό λΆμ¬νμ΅λλ€. λͺ¨λ ν μ€νΈλ₯Ό ν΅κ³Όνκ³ μ λ λ§€μ° ν볡ν μΊ νΌμ λλ€.
:μ€λ§μΌ: :μ€λ§μΌ: :μ€λ§μΌ:
λ΄ μ±μμ μμ νκ³ κ°λ° μλ²λ₯Ό 보면μ oAuth λΆλΆμ΄ μμλλ‘ μλνλμ§ νμΈν κ²μ λλ€.
κ°μ₯ μ μ©ν λκΈ
@rhewitt22 μ°λ¦¬λ @wallingμ΄ μ€λͺ ν μ κ·Ό λ°©μμ μ νΈν©λλ€.
(μ¬κΈ°μ ν μ€νΈλ "λ¨μ" ν μ€νΈ λμ "ν΅ν©"κ³Ό λ μ μ¬ν¨)
_μ νν_ κ·Έλ° μ΄μ λ‘. λΉμ μ΄ μ‘°λ‘±νλ λͺ¨λ κ²μ "_fake_"μ΄λ―λ‘ "_real_"μ΄ μλνλμ§ μ¬λΆλ₯Ό μ μ μμ΅λλ€(_κ·Έλμ λ²κ·Έκ° λ κ°λ₯μ±μ΄ λμ΅λλ€_).
μ°λ¦¬λ μ¬λλ€μ΄ λ©μλλ₯Ό λ³κ²½ν λ λͺ¨μ μ λ°μ΄νΈλ₯Ό _μμ΄λ²λ¦¬κ³ κ²°κ³Όμ μΌλ‘ ν μ€νΈκ° _νμ€_μ λ°μνμ§ μλ (_large_) νλ‘μ νΈλ₯Ό μμλ°μμ΅λλ€. _ λλ²κΉ νλ μ λͺ½ _!
νμ μ€μ€λ‘μκ² λ¬Όμ΄λ³΄μμμ€. "_( μ ) μ°λ¦¬ κ° μ΄κ²μ μ‘°λ‘±ν΄μΌ ν©λκΉ?_"
μ 3μ μλΉμ€λ λ€νΈμν¬ μ₯μΉμ κ°μ΄ ν΅μ ν μ μκΈ° λλ¬Έμ μ‘°λ‘±νλ κ²½μ°,
λ§μ΄ λλκ΅°μ. νμ§λ§ μμ μ _μμ μ μ€νμ _μ‘°λ‘±νκ³ μλ€λ©΄ μΌμ΄ λ무 볡μ‘ν μ μλ€λ μ μ κ³ λ €ν΄μΌ ν©λλ€...
κ·νμ _question_μ λ¨μλ " _API _"λΌλ μ©μ΄μ μμ΅λλ€. μ΄κ²μ "λ¨μ"κ° μλλΌ (API) "_ endpoint _"λ₯Ό ν μ€νΈνκ³ μμμ λνλ λλ€.
λμ μ λλ¬νλ©΄ 401μ΄ νμλλ©΄ _μΈμ¦_ν΄μΌ ν©λλ€! (_μ’μ μμ! μ±μ΄ μμλλ‘ μλν©λλ€!_)
λ€μμ _ λΉμ μ΄ νμλ‘ νλ κ²μ _ νλ ν μ€νΈμ _ μ€μ μ μΈ μ μ λλ€.
https://github.com/dwyl/hapi-auth-jwt2/blob/f17bac65d40b2a9154da84390b874cae4e1de192/test/test.js#L119 -L135
κ·Έλ λ€λ©΄ λ€μμ μ½λ κ²μ΄ μ’μ΅λλ€.
ν λ°μ¬
_μμ μ_ μ½λκ° λ무 볡μ‘νκ³ κ·Έκ²μ μ‘°λ‘±ν _νμ_λ₯Ό λλλ€λ©΄ _λ¨Όμ μ½λλ₯Ό λ¨μν _!!
λν λ€λ₯Έ μ¬λλ€μ΄ μ°λ¦¬μ ν μ€νΈμ μμ‘΄ν μ μλλ‘ hapi-auth-jwt2 νλ¬κ·ΈμΈ μ μμ±νμ΅λλ€. κ·Έλ¦¬κ³ _linear νμ₯ κ°λ₯_ Redis μ§μ μμ λ₯Ό μΆμνμ΅λλ€: https://github.com/dwyl/hapi-auth-jwt2-example κ·Έλμ μ¬λλ€μ΄ μ½λλ₯Ό 볡μ¬νμ¬ λΆμ¬λ£μ μ μμ΅λλ€(_tested_)! :λμ§:
_We_λ μ‘°λ‘± ν λ μ°λ¦¬μ μν "λ무 λλ¦° _feel _"κ·Έλ μ§ μμΌλ©΄ μ°λ¦¬ κ° ν μ€νΈ ν΅κ³Όμ _possible_λ‘ μ€νλ§νΌ _ALWAYS_ μ΄λ (λ¨μ§ _essential_μ λν μμ‘΄μ±μ μ ννλ©΄μ).
μ± κΈ°λ₯μ μμμ μΈμ¦μ΄ νμν κ²½μ° μΈμ¦/νμΈ λ°©λ²μ _μ€ν_ν _κΈ°ν_λ‘ μ΄λ₯Ό μ¬μ©νμ§ μμΌμκ² μ΅λκΉ? κΆκ·Ήμ μΌλ‘ μΈμ¦/κ²μ¦μ΄ μ€νμμ κ°μ₯ ν° λ³λͺ© νμ μ€ νλμ΄κΈ° λλ¬Έμ μΈμ¦μ΄ μΌλ§λ _μ±λ₯μ΄ μ’μ__ μλ©΄ μ±μ _μ’μ_ κ²μ λλ€! (μ¦ _λͺ¨λ _ GET/POST/PUT/DELETE _request_λ μΈμ¦/κ²μ¦μ κ±°μ³μΌ νλ―λ‘ λͺ λ°λ¦¬μ΄ μ΄μ κ±Έλ¦¬μ§ μμμΌ ν©λλ€... κ·Έ μ΄μμ μ±μ΄ _νμ₯λμ§ μμ΅λλ€_!)
λμμ΄ λκΈ°λ₯Ό λ°λλλ€. κ·Έλ μ§ μμ κ²½μ° μ΄λμμ λ§νλμ§ μλ €μ£Όμμμ€! :+1: