MITM(Man-in-the-MiddleAttack)μ λν μΉμ μλ "μΌνμ±(μΌνμ©) ν ν°(λ§ν¬λ₯Ό ν΄λ¦ν ν λ§λ£λ¨) μ¬μ©"μ΄ MITMμ μ루μ μ΄λΌκ³ λμ μμ΅λλ€.
λ΄ μ§λ¬Έμ ν ν°μ ν λ²λ§ μ¬μ©νλ©΄ μμ²μ λ³΄λΌ λλ§λ€ μ¬μ©μκ° λ€μ λ‘κ·ΈμΈν΄μΌ νλ€λ κ²μ λλ€. λ°λ©΄μ μλ²κ° ν ν°μ νκ΄΄νκ³ λ§€λ² μ ν ν°μ λ°ννλ©΄ μ ν ν°μ΄ μ¬μ ν μ€κ°μΈμ΄ κ°λ‘μ± μ μμ΅λλ€.
λ΄κ° νλ Έλ€λ©΄ μλ €μ£ΌμΈμ, κ°μ¬ν©λλ€!
@NE-SmallTown μ’μ μ§λ¬Έμ
λλ€.
μΌνμ© ν ν°μ μ¬μ©νλ κ²μ μ ν리μΌμ΄μ
보μμ μν μ’μ λ°©λ²μ
λλ€.
μ΄ ν¨ν΄μ μ¬μ©νλ €λ©΄ κ° μλ΅μ λν΄ JWTλ₯Ό μλμΌλ‘ μ
λ°μ΄νΈνλ onPreResponse
νν¬λ₯Ό μ€μ ν μ μμ΅λλ€.
λλ΅ν΄μΌ νλ μ§λ¬Έμ λ€μκ³Ό κ°μ΅λλ€. ν ν°μ΄ μ¬μ¬μ©λμ§ _μλλ‘ νλ €λ©΄ μ΄λ»κ² κ³ννκ³ μμ΅λκΉ?
μλ³μλ₯Ό μΌμ’
μ λ°μ΄ν°λ² μ΄μ€μ μ μ₯νκ³ (_μ°λ¦¬λ μΌλ°μ μΌλ‘ μ±μμ μ΄λ₯Ό μν΄ redis
λ₯Ό μ¬μ©ν©λλ€_) ν ν°μ΄ μ΄λ―Έ μ¬μ©λμλμ§ νμΈν΄μΌ ν©λλ€.
@nelsonic λ΅λ³ κ°μ¬ν©λλ€. μ‘°κΈ νΌλμ€λ½μ΅λλ€.
μ§λ¬Έμ΄ μμ΅λλ€.
λΉμ μ΄ λ§νλ―μ΄ νλ‘μΈμ€λ λ€μκ³Ό κ°μ΅λλ€.
μ¬μ©μκ° ν νμ΄μ§μ μ‘μΈμ€νκ³ ν€λμ ν ν°μ 보λ λλ€(λ‘κ·ΈμΈνλ€κ³ κ°μ ).
|
|
β
μλ²λ ν ν°μ λ°μ λ€μ ν ν°μ λμ½λ©νμ¬ userId
λ₯Ό μ»μ λ€μ λ°μ΄ν°λ² μ΄μ€λ‘ μ΄λνμ¬( redis
λμ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νλ€κ³ κ°μ ) userId
μ ν΄λΉ ν ν°μ κ°μ Έμ΅λλ€. ==
μ°μ°μλ₯Ό μ¬μ©νμ¬ λμΌνμ§ νμΈν©λλ€. κ·Έλ λ€λ©΄ ν ν°μ μμ νκ³ μ ν ν°μ μμ±νμ¬ λ°μ΄ν°λ² μ΄μ€μ νΈμνκ³ ν΄λΌμ΄μΈνΈμ λ°μ΄ν°μ μλ΅ν©λλ€.
μ§λ¬Έμ΄ μμ΅λλ€. νμΈνκΈ° μν΄ ==
μ°μ°μλ₯Ό μ¬μ©ν©λλ€. κ·Έλ¬λ ν ν° μ체μ vertify λ©μ»€λμ¦μ΄ μλ€λ κ²μ μκ³
JWT.require(Algorithm.RSA256((RSAKey) publicKey))
.withIssuer("auth")
.withSubject("ne-smalltown")
.withAudience(userId)
.withArrayClaim("jwt-role", userRole)
.build()
λ΄κ° νλ Έλ€λ©΄ μμ κ°μ ν ν° μ체 κ²μ¦ λ©μ»€λμ¦μ μ¬μ©νλ λ°©λ²κ³Ό μμΉλ₯Ό μλ €μ£Όμκ² μ΅λκΉ?
IMO, ν ν° μ체 κ²μ¦ λ©μ»€λμ¦μ μ¬μ©ν μ μλ μ μΌν μ₯μλ μ΄μ ν ν°μ exp 맀κ°λ³μλ₯Ό κ°μ Έμμ μ ν ν°μ λ£μ΄ μ¬μ©μκ° λ€μ λ‘κ·ΈμΈν μ μλλ‘ ν ν°μ΄ λ§λ£λμλμ§ μ¬λΆλ₯Ό νμΈν μ μλ κ³³μ λλ€.
|
|
β
ν΄λΌμ΄μΈνΈλ μ ν ν°μ μμ νκ³ μ΄λ₯Ό localstorage
λ‘ νΈμνμ¬ μ΄μ ν ν°μ κ΅μ²΄ν©λλ€. κ·Έλ¦¬κ³ λ€μ μμ²μμ μ΄λ₯Ό μ¬μ©ν©λλ€.
@nelsonic μλ νμΈμ?
@NE-SmallTown μ¦μ λ΅μ₯μ 보λ΄μ§ λͺ»ν΄ μ£μ‘ν©λλ€.
JWT μ¬μμλ μΌνμ© λ¬΄ν¨νμ λν ν΄λ μ/λ©μ»€λμ¦μ΄ μμ΅λλ€.
μ°Έμ‘°: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName
@jbspeakr μλ
μ°Έμ‘°: https://www.jbspeakr.cc/howto-single-use-jwt/
@nelsonic κ²μλ¬Όμ 곡μ ν΄ μ£Όμ μ κ°μ¬ν©λλ€.
κ²μλ¬Όμ λ€μκ³Ό κ°μ΄ λ§ν©λλ€.
μ΄λ‘ μ μΌλ‘ μ΄κ²μ μ΄λ©μΌ νμ±ν, κ³μ νμΈκ³Ό κ°μ λΉλ°λ²νΈ μ¬μ€μ ν ν° μ΄μΈμ μ¬μ© μ¬λ‘μμλ μλν©λλ€.
λλ μ΄λ¬ν κ²½μ°κ° μΌνμ© jwtμ μ ν©νλ€λ λ° λμνμ§λ§ μ κ²½μ°λ jwtμ μ¬μ©μ μν μ λ³΄κ° ν¬ν¨ λκ³ μν μ΄ μΌμ νλ©° λΉλ°λ²νΈ μ¬μ€μ , μ΄λ©μΌ νμ±ν, κ³μ νμΈ λ±μ μ’μνμ§ μμ΅λλ€.
λ°λΌμ μ§λ¬ΈμΌλ‘ λμκ°μ μ κ²½μ°μλ μ΄μ ν ν°μ νμΈν νμκ° μλ€κ³ μκ°ν©λλ€. λ°μ΄ν°λ² μ΄μ€μ ν ν°κ³Ό ν¨κ» == μ°μ°μλ₯Ό μ¬μ©νλ©΄ λ©λλ€.
κ°μ₯ μ μ©ν λκΈ
@NE-SmallTown μ¦μ λ΅μ₯μ 보λ΄μ§ λͺ»ν΄ μ£μ‘ν©λλ€.
JWT μ¬μμλ μΌνμ© λ¬΄ν¨νμ λν ν΄λ μ/λ©μ»€λμ¦μ΄ μμ΅λλ€.
μ°Έμ‘°: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName
@jbspeakr μλ
μ°Έμ‘°: https://www.jbspeakr.cc/howto-single-use-jwt/