๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring Security

ํŒจ์ŠคํŠธ์บ ํผ์Šค ์ฑŒ๋ฆฐ์ง€ 17์ผ์ฐจ - Spring Security 6

๐Ÿ“Œ Spring security 6

โœ”๏ธ ConcurrentSessionFilter

  • ๋™์‹œ์ ‘์†์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ(์ œํ•œ)๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ๋งŒ๋ฃŒ๋œ ํ† ํฐ์ด ๋“ค์–ด์˜ค์ง€ ๋ชปํ•˜๋„๋ก ์ œ์–ดํ•œ๋‹ค.

 

โœ”๏ธ SessionManagementFilter

  • SessionAuthenticationStrategy ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค  ์ •์˜ํ•œ๋‹ค.
    • onAuthentication ๊ตฌํ˜„ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.
      ์ธ์ฆ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์„ธ์…˜์˜ ์ „๋žต์„ ๊ฒฐ์ •ํ•œ๋‹ค.

 

โœ”๏ธ ์Šคํ”„๋ง์ด ์ง€์›ํ•˜๋Š” Authentication strategy filter

  1. ์„ธ์…˜ ๊ณ ์ • ์ •์ฑ…
  2. ๋™์‹œ์ ‘์† ์ œ์–ด

 

โœ”๏ธ ConcurrentSessionControlAuthenticationStrategy

  • ์„ธ์…˜์— ๋Œ€ํ•œ ๋™์‹œ์ ‘์† ๋ฐœ์ƒ์‹œ ์„ค์ •๋œ ํ•œ๊ณ„๊ฐ’์„ ๋„˜์—ˆ์„ ๋•Œ ๊ธฐ์กด ์„ธ์…˜์„ ๋งŒ๋ฃŒ์‹œํ‚ฌ ๊ฒƒ์ธ์ง€, ์ƒˆ๋กœ์šด ์„ธ์…˜์„ ๊ฑฐ๋ถ€ํ•  ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.
http.sessionManagement(
    sm ->                    // allowedSessions
        sm.maximumSession(1) // ๋™์ผ username ์„ธ์…˜ ๋™์‹œ์ ‘์† ์ˆ˜ ์„ค์ •
          .maxSessionPreventsLogin(false) // ๊ธฐ์กด์„ธ์…˜๋งŒ๋ฃŒ (default)
          .expiredUrl("/session-expired") // ๋งŒ๋ฃŒ๋œ ์„ธ์…˜ redirect
)

 

โœ”๏ธ SessionRegistry

  • sessionInformation, principals์„ ๊ฐ€์ง„๋‹ค.
  • sessionInformation
    • Map<SessionId, SessionInformation>
    • principal, sessionId, expired
  • SessionRegistry์˜ principals์—์„œ ํ˜„์žฌ principal๋กœ sessionId๋ฅผ ์ถ”์ถœํ•œ๋‹ค.
    ์ถ”์ถœ๋œ sessionId๋กœ sessionInformation ์กฐํšŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

โœ”๏ธ Bean ๋“ฑ๋ก

@Bean
SessionRegistry sessionRegistry() {
    SessionRegistryImpl registry = new SessionRegistryImpl();
    return registry;
}

 

โœ”๏ธ ์„ธ์…˜ ID ๊ณ ์ •
Session-fixation

http.
    sessionManagement(
        sm -> sm.sessionFixation(seessionFixationConfigurer.none())
    )

 

sessionFixationConfigurer.changeSessionId() (default)

  • ๋กœ๊ทธ์ธํ•  ๋•Œ๋งˆ๋‹ค ์„ธ์…˜ID๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.
  • session-fixation attack ๋ฐฉ์ง€ํ•œ๋‹ค.

 

sessionFixationConfigurer.none()

  • ๋กœ๊ทธ์ธํ•  ๋•Œ๋งˆ๋‹ค ์„ธ์…˜ID๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋กœ๊ทธ์•„์›ƒ ํ›„ ์žฌ๋กœ๊ทธ์ธ ํ•ด๋„ ์„ธ์…˜ID๊ฐ€ ๊ทธ๋Œ€๋กœ์ด๋‹ค. (๋ณ€๊ฒฝ โŒ)

 

โœ”๏ธ ์„ธ์…˜ ์ƒ์„ฑ ์ •์ฑ…

http.
    sessionMangement
        .sessionCreationPolicy(SessionCreationPolicy.ALWAYS)

 

โœ”๏ธ SessionCreationPolicy

  • ALWAYS : ํ˜„์žฌ ์„ธ์…˜์ด ์—†๋‹ค๋ฉด ํ•ญ์ƒ ์ƒ์„ฑํ•œ๋‹ค. (์‚ฌ์šฉ)
  • IF_REQUIRED : ์„ธ์…˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ƒ์„ฑํ•œ๋‹ค.
  • NEVER : ํ˜„์žฌ ํ•„ํ„ฐ ๋‚ด์—์„œ๋Š” ์„ธ์…˜ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š”๋””. โŒ
  • STATELESS : ์„ธ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. โŒ 

๐Ÿ‘  ์ˆ˜๊ฐ•์ธ์ฆ

 

 

ํŒจ์ŠคํŠธ์บ ํผ์Šค [์ง์žฅ์ธ ์‹ค๋ฌด๊ต์œก]

ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์˜์ƒํŽธ์ง‘, UX/UI, ๋งˆ์ผ€ํŒ…, ๋ฐ์ดํ„ฐ ๋ถ„์„, ์—‘์…€๊ฐ•์˜, The RED, ๊ตญ๋น„์ง€์›, ๊ธฐ์—…๊ต์œก, ์„œ๋น„์Šค ์ œ๊ณต.

fastcampus.co.kr

๋ณธ ํฌ์ŠคํŒ…์€ ํŒจ์ŠคํŠธ์บ ํผ์Šค ํ™˜๊ธ‰ ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌ๋ฅผ ์œ„ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.