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

Spring

[Spring Boot] Spring Security

๐Ÿ“Œ ์ธ์ฆ Authentication

  • ์‚ฌ์ดํŠธ์— ์ ‘๊ทผํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋ˆ„๊ตฌ์ธ์ง€ ์‹œ์Šคํ…œ์ด ์•Œ๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹. ์ต๋ช… ์‚ฌ์šฉ์ž anonymous user ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๊ฐœ์ธํ™”๋œ ์‚ฌ์šฉ์„ฑ์„ ๋ณด์žฅ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. 
  • ๋กœ๊ทธ์ธ์€ ๋ณดํ†ต username/ password๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ฒฝ์šฐ์™€ sns ์‚ฌ์ดํŠธ๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„ ๋Œ€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

 

 

๐Ÿ“Œ ์ธ๊ฐ€ ํ˜น์€ ๊ถŒํ•œ  Autnorization

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ์•Œ์•˜๋‹ค๋ฉด ์‚ฌ์ดํŠธ ๊ด€๋ฆฌ์ž ํ˜น์€ ์‹œ์Šคํ…œ์€ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถŒํ•œ์„ ์„ค์ •ํ•œ๋‹ค. ๊ถŒํ•œ์€ ํŠน์ • ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. 
  • ๊ฐœ๋ฐœ์ž๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ํŽ˜์ด์ง€๋‚˜ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋„๋ก ์ฝ”๋”ฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ์กฑํ•˜๋Š” ๊ฒƒ์ด Spring Security Framework๋‹ค. 

 

  • ํ•ด๋‹น ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๊ถŒํ•œ์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ,

@GetMapping("/auth")
public Authentication auth( ){
     return SecurityContextHolder.getContext( ).getAuthentication( );

}

 

 

  • ์›น์‚ฌ์ดํŠธ์˜ ๊ฐœ์ธ ์ •๋ณด์— ๋Œ€ํ•ด ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•ด๋ณด๋ฉด, ์šฐ์„  controller ์™€ SecurityMessage๋ฅผ ๋„์›Œ์ค„ ํด๋ž˜์Šค

์‹œ๋ฎฌ๋ ˆ์ด์…˜

  • SecurityMessage์—์„œ auth์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ Authentication ํ˜•์œผ๋กœ ์ง€์ •ํ•œ๋‹ค. 
  • @PreAuthorize๋กœ hasAnyAuthority 'ROLE_UESR' , 'ROLE_ADMIN'์„ ๋‚˜๋ˆ„์—ˆ๋‹ค. 
  • ํ•˜์ง€๋งŒ, ์ด ๋ฐฉ์‹์ด๋ผ๋ฉด user1์ด admin์—๋„ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑธ security์—์„œ ์–ด๋–ป๊ฒŒ ์ฐจ๋‹จํ•˜๋Š๋ƒ..                Configurer๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

inMemoryAuthentication์„ ์ด์šฉํ•œ Configurer 

 

  • WebSecurityConfigurerAdepter ๋ฅผ ์ƒ์†๋ฐ›์•„ Config ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. 
  • ๊ธฐ์กด์— application.properties์— ์‚ฌ์šฉ์ž ํ•œ๋ช…์„ ์ถ”๊ฐ€ํ–ˆ๊ธฐ์— ๋” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค.
  • ํ•ด๋‹น SecurityConfig ์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ๋” ์ถ”๊ฐ€ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด  application.properties์— ์ถ”๊ฐ€ํ–ˆ๋˜ ์‚ฌ์šฉ์ž๋Š” ์ฐจ๋‹จ๋œ๋‹ค.
  • ์‚ฌ์šฉ์ž์˜ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ธ์ฝ”๋”ฉํ•ด์•ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  • HOME Page ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ชจ๋‘์—๊ฒŒ publicํ•˜๊ฒŒ ์ ‘๊ทผ๊ถŒํ•œ์„ ์ฃผ๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— request.antMatchers๋กœ ("/") ํ™ˆํŽ˜์ด์ง€์— ๋Œ€ํ•ด permitAll()์„ ์ง€์ •ํ•ด์ค€๋‹ค.