Learn-json-web-tokens: "일회용"이 MITM을 ν•΄κ²°ν•  수 μžˆλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

에 λ§Œλ“  2017λ…„ 03μ›” 12일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: dwyl/learn-json-web-tokens

MITM(Man-in-the-MiddleAttack)에 λŒ€ν•œ μ„Ήμ…˜μ—λŠ” "μΌνšŒμ„±(일회용) 토큰(링크λ₯Ό ν΄λ¦­ν•œ ν›„ 만료됨) μ‚¬μš©"이 MITM의 μ†”λ£¨μ…˜μ΄λΌκ³  λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄ μ§ˆλ¬Έμ€ 토큰을 ν•œ 번만 μ‚¬μš©ν•˜λ©΄ μš”μ²­μ„ 보낼 λ•Œλ§ˆλ‹€ μ‚¬μš©μžκ°€ λ‹€μ‹œ λ‘œκ·ΈμΈν•΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ°˜λ©΄μ— μ„œλ²„κ°€ 토큰을 νŒŒκ΄΄ν•˜κ³  맀번 μƒˆ 토큰을 λ°˜ν™˜ν•˜λ©΄ μƒˆ 토큰이 μ—¬μ „νžˆ μ€‘κ°œμΈμ΄ κ°€λ‘œμ±Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ ν‹€λ Έλ‹€λ©΄ μ•Œλ €μ£Όμ„Έμš”, κ°μ‚¬ν•©λ‹ˆλ‹€!

question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@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/

λͺ¨λ“  5 λŒ“κΈ€

@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에 μ‚¬μš©μž μ—­ν•  정보가 포함 되고 역할이 일정 ν•˜λ©° λΉ„λ°€λ²ˆν˜Έ μž¬μ„€μ •, 이메일 ν™œμ„±ν™”, 계정 확인 등을 μ’‹μ•„ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ 질문으둜 λŒμ•„κ°€μ„œ 제 κ²½μš°μ—λŠ” 이제 토큰을 확인할 ν•„μš”κ°€ μ—†λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€μ˜ 토큰과 ν•¨κ»˜ == μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰

κ΄€λ ¨ 문제

nelsonic picture nelsonic  Β·  4μ½”λ©˜νŠΈ

sarneeh picture sarneeh  Β·  3μ½”λ©˜νŠΈ

rjmk picture rjmk  Β·  9μ½”λ©˜νŠΈ

joepie91 picture joepie91  Β·  18μ½”λ©˜νŠΈ

rhewitt22 picture rhewitt22  Β·  5μ½”λ©˜νŠΈ