ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๊ตฌํ˜„] Spring Security ์™œ ์“ฐ๋Š”๋ฐ?
    SPRING/PROJECT 2024. 5. 2. 01:58

     Spring Security๋ž€?

    ์ •์˜ by ๊ณต์‹๋ฌธ์„œ

    ๊ฐ•๋ ฅํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ธ์ฆ ๋ฐ ์•ก์„ธ์Šค ์ œ์–ด ํ”„๋ ˆ์ž„์›Œํฌ Spring ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ์˜ (์‚ฌ์‹ค์ƒ์˜) ํ‘œ์ค€

     

    ํŠน์ง•

    • ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ง€์›
    • session fixation(์œ ํšจํ•œ ์š”์ฒญ ํ•˜์ด์žฌํ‚น), clickjacking(์›น์‚ฌ์ดํŠธ ์‚ฌ์šฉ์ž๋ฅผ ์†์—ฌ ์ž์‹ ๋„ ๋ชจ๋ฅด๊ฒŒ ์•…์„ฑ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋„๋ก ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋ฐ˜ ๊ณต๊ฒฉ), CSRF(์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ๋“ค์ด ํ˜„์žฌ ์ธ์ฆ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์š”์ฒญ์„ ๋ณด๋‚ด๋„๋ก ๊ฐ•์š”ํ•˜๋Š” ๊ณต๊ฒฉ) ๋“ฑ๊ณผ ๊ฐ™์€ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ
    • ์„œ๋ธ”๋ฆฟ API ํ†ตํ•ฉ

     

    ๐Ÿ’ก ํ™•์žฅ์„ฑ์ด ํŠน์ง•์ธ ํ”„๋ ˆ์ž„์›Œํฌ์ธ๋งŒํผ, ์‚ฌ์šฉ ๋ฒ•์— ์ •๋‹ต์ด ์—†์Šต๋‹ˆ๋‹ค!!

     

    Spring Security Architecture

    Spring Security๋Š” Servlet Filter๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

     

    Servlet Filter๋ž€?

    1. client๊ฐ€ application์— request๋ฅผ ๋ณด๋‚ธ๋‹ค
    2. container๊ฐ€ FilterChain ์„ ๋งŒ๋“ ๋‹ค
      → request URI ๊ฒฝ๋กœ์— ๊ธฐ๋ฐ˜ํ•œ HttpServletRequest ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” Filter instance๋“ค๊ณผ  Servlet(Spring์—์„œ๋Š” DispatcherServlet์˜ instance์ž„) ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ

    ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—์„œ ์„œ๋ธ”๋ฆฟ์€ ํ•˜๋‚˜์˜ HttpServeltRequest๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ•„ํ„ฐ๋Š” ์š”์ฒญ์ด ์ค‘๊ฐ„์˜ ์–ด๋А ํ•„ํ„ฐ์—์„œ ๊ฑธ๋Ÿฌ์กŒ์„ ๋•Œ,

    • ํ•˜์œ„ Filter ํ˜น์€ Servlet์ด ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ → ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ์ค„์ž„, ๋ณด์•ˆ ๊ฐ•ํ™”
    • ์š”์ฒญ์ด๋‚˜ ์‘๋‹ต์„ ์ˆ˜์ •ํ•ด์„œ ๋„˜๊ธธ ์ˆ˜ ์žˆ์Œ → ๋ณด์•ˆ ๊ฐ•ํ™”

    Filter๋Š” ์ผ๋ฐ˜ ์Œฉ ์ž๋ฐ” ์›น ์„œ๋ฒ„์—์„œ๋„ ์ง€์›๋˜์ง€๋งŒ,

    Spring Framework๋Š”

    • Filter๋ฅผ Bean์œผ๋กœ ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.(DelegatingFilterProxy)
    • FilterChain์„ Bean์œผ๋กœ ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.(FilterChainProxy)

    ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋Š” ๊ฒŒ ์™œ ์ข‹์€๋ฐ? (์ถœ์ฒ˜ : Chat GPT)

    ๋”๋ณด๊ธฐ
    1. ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์™€ ํ†ตํ•ฉ:
      • ํ•„ํ„ฐ๋„ ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์˜ ๊ด€๋ฆฌ๋ฅผ ๋ฐ›๊ฒŒ ๋˜์–ด ์˜์กด์„ฑ ์ฃผ์ž… ๋“ฑ์˜ ์Šคํ”„๋ง ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    2. Lazy Loading ์ง€์›:
      • Proxy๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•„ํ„ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•„ํ„ฐ์˜ ๋นˆ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”๋ฅผ ์ง€์—ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
        → ๋ชจ๋“  ๋นˆ์ด ๋กœ๋”ฉ ๋œ ๋‹ค์Œ์— ํ•„ํ„ฐ๋ฅผ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ์–ด์„œ, ํ•„ํ„ฐ์—์„œ ๋กœ๋”ฉ ๋˜์ง€ ์•Š์€ ๋นˆ์„ ํ˜ธ์ถœํ•  ์œ„ํ—˜์„ ์ค„์ธ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    3. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ํ•„ํ„ฐ ๋“ฑ๋ก:
      • Java Config๋‚˜ ์Šคํ”„๋ง ๋นˆ ์„ค์ • ํŒŒ์ผ์—์„œ ํ•„ํ„ฐ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•„ํ„ฐ์˜ ๋“ฑ๋ก๊ณผ ๊ด€๋ฆฌ๋ฅผ ์ฝ”๋“œ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    4. ์Šคํ”„๋ง ํŠน์ง•๊ณผ์˜ ํ†ตํ•ฉ:
      • ์Šคํ”„๋ง์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ์˜ ํ†ตํ•ฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•„ํ„ฐ ๋‚ด์—์„œ ์Šคํ”„๋ง ๋นˆ์— ์ ‘๊ทผํ•˜์—ฌ ์Šคํ”„๋ง ์ปจํ…์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    5. ํ™•์žฅ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ:
      • ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ํ•„ํ„ฐ์˜ ์ˆ˜์ •์ด๋‚˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ ์Šคํ”„๋ง ๋นˆ ์„ค์ • ํŒŒ์ผ์—์„œ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ•„ํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๋นˆ์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    SecurityFilterChain์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

    SecurityFilterChaind์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ Spring Security๋ฅผ ์ ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

    ๋” ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด…

    Architecture :: Spring Security

     

    Spring Security์—์„œ ์ง€์›ํ•ด์ฃผ๋Š” ์„ค์ •

    • ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ(Boot์˜ /error ์—”๋“œํฌ์ธํŠธ ํฌํ•จ)์— ๋Œ€ํ•ด ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. (Authorize HttpServletRequests)
    • ์‹œ์ž‘ํ•  ๋•Œ ์ƒ์„ฑ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค (UserDetailsService)
    • BCrypt ๋ฐ ๊ธฐํƒ€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ์„ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. (PasswordEncoder)
    • ํผ ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ ๋ฐ ๋กœ๊ทธ์•„์›ƒ ํ๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (Form Login, Handling Logouts)
      ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ธ๊ฐ€๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์ธ ๊ฒฝ์šฐ /login์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜์–ด์žˆ์œผ๋ฉฐ, login form์ด ์ œ๊ณต๋จ
    • ํผ ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ ๋ฐ HTTP ๊ธฐ๋ณธ ์ธ์ฆ์„ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. (Basic Authentication)
    • ๋‚ด์šฉ ํ˜‘์ƒ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค; ์›น ์š”์ฒญ์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ redirectํ•˜๊ณ , ์„œ๋น„์Šค ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์ธ์ฆ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” 401 Unauthorized์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ธ๊ฐ€๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” 403 Forbidden์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.(๊ธฐ๋ณธ๊ฐ’)
    • CSRF ๊ณต๊ฒฉ์„ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค.(์ตœ๋Œ€ํ•œ ๋ง‰์œผ๋ ค๊ณ  ํ•œ๋‹ค์˜ ์™„ํ™”)
      ๋”๋ณด๊ธฐ
      CSRF๋ž€?
      Cross Site Request Forgery์˜ ์•ฝ์ž๋กœ, ํ•œ๊ธ€ ๋œป์œผ๋กœ๋Š” ์‚ฌ์ดํŠธ๊ฐ„ ์š”์ฒญ ์œ„์กฐ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์•ˆ์ด ์ทจ์•ฝํ•œ ์„œ๋น„์Šค์— ๋กœ๊ทธ์ธ ํ–ˆ์„ ๋•Œ ์ฟ ํ‚ค์— ์„ธ์…˜ ์•„์ด๋””๊ฐ€ ์ €์žฅ๋˜๋ฉด,ํ•ด๋‹น ์„ธ์…˜ ์•„์ด๋””๋กœ ๋“ค์–ด์˜จ ์š”์ฒญ์€ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ธ ์ค„ ์•Œ๊ณ  ์ฒ˜๋ฆฌ๋˜๊ฒŒ ๋จ-> ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ ํŽ˜์ด์ง€๋ฅผ ๋ˆ„๋ฅด๋„๋ก ์œ ๋„ํ•˜์—ฌ ์„ธ์…˜ ์•„์ด๋”” ํƒˆ์ทจ
    • Session Fixation ๊ณต๊ฒฉ์„ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • HTTPS ๋ณด์žฅ์„ ์œ„ํ•œ HTTP Strict Transport Security (HSTS)
    • ์Šค๋‹ˆํ•‘ ๊ณต๊ฒฉ์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด X-Content-Type-Options๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ธ์ฆ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด Cache Control headers๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ํด๋ฆญ์žฌํ‚น์„ ์™„ํ™”ํ•˜๊ธฐ ์œ„ํ•ด X-Frame-Options๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • HttpServletRequest์˜ ์ธ์ฆ ๋ฉ”์„œ๋“œ์™€ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.
    • authentication success์™€ failure events๋ฅผ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์ ์šฉ ๋ฐ ๊ตฌํ˜„์€ ์•„๋ž˜์—์„œ ์ด์–ด์„œ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

     

    [๊ตฌํ˜„] Spring Security 6.1 ์ด์ƒ ๋ฒ„์ „ ์ ์šฉ, ์„ค์ •ํ•˜๊ธฐ

    ์ด์ „ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์†Œ๊ฐœ ๊ธ€์—์„œ ์ด์–ด์„œ ๊ฐ‘๋‹ˆ๋‹ค [๊ตฌํ˜„] Spring Security ์™œ ์“ฐ๋Š”๋ฐ?Srping Security๋ž€?์ •์˜ by ๊ณต์‹๋ฌธ์„œ๊ฐ•๋ ฅํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ธ์ฆ ๋ฐ ์•ก์„ธ์Šค ์ œ์–ด ํ”„๋ ˆ์ž„์›Œํฌ Spring ๊ธฐ๋ฐ˜ ์• ํ”Œ

    dowlsovo.tistory.com

     

Designed by Tistory.