Info

  • spring-security ์‚ฌ์šฉ.
  • JWT ์‚ฌ์šฉ.
    • Authorization: Bearer ~
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”๋Š” BCryptPasswordEncoder ์‚ฌ์šฉ.
  • formLogin disable.
  • security logout disable.

JWT Provider

Token ์ •๋ณด๋Š” user์˜ SEQ ๊ฐ’์„ ๋‹ด๊ณ  ์žˆ์Œ.

AccessToken

  • ๋งŒ๋ฃŒ ์‹œ๊ฐ„: 15์ผ (ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ž„์‹œ ์„ธํŒ…)
  • AccessToken์€ ๋งŒ๋ฃŒ๋˜์ง€ ์•Š๋Š” ํ•œ BE์—์„œ ๋ฐ”๋กœ ํ•ด๋…ํ•˜์—ฌ ์‚ฌ์šฉ.
  • responseHeader์˜ token_status์— ๋”ฐ๋ผ ํ˜„์žฌ AccessToken์˜ ์ƒํƒœ ํ™•์ธ ๊ฐ€๋Šฅ.
statusdescription
ALLOWํ—ˆ์šฉ
NOT_ALLOW๋น„ํ—ˆ์šฉ
EXPIRED๋งŒ๋ฃŒ(ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ token์ด์ง€๋งŒ ์œ ํšจ ์‹œ๊ฐ„์ด ์ง€๋‚˜, ์žฌ๋ฐœ๊ธ‰ ํ•„์š”)

RefreshToken

  • ๋งŒ๋ฃŒ ์‹œ๊ฐ„: 30์ผ
  • RefreshToken์€ Redis์— ์ €์žฅ/์‚ญ์ œ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋ฉฐ, ์œ ํšจ ์‹œ๊ฐ„๋„ Redis ์ •์ฑ…์„ ๋”ฐ๋ฆ„ (life cycle์„ BE์—์„œ ์˜จ์ „ํžˆ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ.)

Process

  1. AccessToken โ†’ SEQ ํ•ด๋….
  2. ๋กœ๊น… ์ถ”์ ์„ ์œ„ํ•ด SEQ๋ฅผ MDC์— ์ €์žฅ.
  3. SEQ๋กœ ์œ ์ € ์ •๋ณด ์กฐํšŒ. (redis or DB)
  4. SecurityContextHolder.Context.authentication.details์— user ์ •๋ณด ์ €์žฅ.

Code

private fun allow(accessToken: String) {  
    val id = jwtTokenProvider.parseIdFromJWT(accessToken)  
    MDC.put("userId", id.toString())  
    setUser(id)  
}

Authorization Usage

  • ์ธ์ฆ๋œ user ์ •๋ณด๋ฅผ ๊บผ๋‚ด๋ ค๋ฉด, SecurityContextHolder.getContext().authentication.details as User์„ ์‚ฌ์šฉ.

  • Service Layer์—์„œ ํ•„์š” ์‹œ, TopLevelFunction.kt์— ๋“ฑ๋ก๋œ fun user() = userMapper.toMember(SecurityContextHolder.getContext().authentication.details as User) function์„ ์‚ฌ์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ.