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

Spring๐Ÿƒ/Spring Security๐Ÿ›ก๏ธ

์ •์ˆ˜์›์˜ Spring Security Oauth2 (5) : CORS

728x90

CORS

- Http ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•ด ํ•œ ์ถœ์ฒ˜์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ

- ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž์‹ ์˜ ์ถœ์ฒ˜์™€ ๋‹ค๋ฅผ ๋•Œ ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ ํ—ค๋”์— Origin ํ•„๋“œ์— ์š”์ฒญ ์ถœ์ฒ˜๋ฅผ ํ•จ๊ป˜ ๋‹ด์•„ ๊ต์ฐจ ์ถœ์ฒ˜ Http ์š”์ฒญ์„ ์‹คํ–‰ํ•œ๋‹ค

- ์ถœ์ฒ˜ ๋น„๊ต ๋กœ์ง์€ ์„œ๋ฒ„ ๊ตฌํ˜„ ์ŠคํŽ™์ด ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ €์— ๊ตฌํ˜„๋œ ์ŠคํŽ™ ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ํด๋ผ์ด๋˜ํŠธ์˜ ์š”์ฒญ ํ—ค๋”์™€ ์„œ๋ฒ„์˜ ์‘๋‹ต ํ—ค๋”๋ฅผ ๋น„๊ตํ•ด ์ตœ์ข… ์‘๋‹ต์„ ๊ฒฐ์ •ํ•œ๋‹ค

- ๋‘ ๊ฐœ์˜ ์ถœ์ฒ˜๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ URL์˜ ๊ตฌ์„ฑ์š”์†Œ ์ค‘ Protocol, Host, Port ์„ธ ๊ฐ€์ง€๊ฐ€ ๋™์ผํ•œ์ง€๋ฅผ ํ™•์ธํ•จ์œผ๋กœ ๋น„๊ต

 

ex) http://abc.com ์—์„œ XMLHttpRequst, ajax(๋˜๋Š” FetchAPI) ์š”์ฒญ์„ http://bcd.com ์˜  ๋ฐ์ดํ„ฐ json์„ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์š”์ฒญ์€ ์ œํ•œ๋œ๋‹ค

 

CORS์˜ ์ข…๋ฅ˜

1. Simple Request

Preflight(์˜ˆ๋น„ ์š”์ฒญ) ์—†์ด ์„œ๋ฒ„์— ๋ณธ ์š”์ฒญ์„ ํ•˜๊ณ , ์‘๋‹ต ํ—ค๋”์— Acces-Control-Allow-Origin๊ฐ€ ๋‹ด๊ฒจ์˜ฌ ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ด๋ฅผ ๋น„๊ตํ•œ ํ›„ CORS ์œ„๋ฐ˜ ์—ฌ๋ถ€๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹

 

2. Preflight Request

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ณธ ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „ ์˜ˆ๋น„ ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ด CORS ์œ„๋ฐ˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. OPTIONS ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค

 

CORS ์„œ๋ฒ„ ์„ค์ •

1) Access-Control-Allow-Origin : ํ—ค๋”์— ์ž‘์„ฑ๋œ ์ถœ์ฒ˜์—๋งŒ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค

2) Access-Control-Allow-Methods : ์˜ˆ๋น„ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์‹ค ์š”์ฒญ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค

3) Access-Control-Allow-Headers : ์˜ˆ๋น„ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์‹ค ์š”์ฒญ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ—ค๋” ํ•„๋“œ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค

4) Access-Control-Allow-Credentials : ์‹ค์ œ ์š”์ฒญ์— ์ฟ ํ‚ค๋‚˜ ์ธ์ฆ ๋“ฑ์˜ ์‚ฌ์šฉ์ž ์ž๊ฒฉ ์ฆ๋ช…์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค

5) Access-Control-Allow-Max-Age : ์˜ˆ๋น„ ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค

 

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ

1. CorsConfigurer

1) ํ•„ํ„ฐ ์ฒด์ธ์— CorsFilter๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ์‚ฌ์šฉํ•œ๋‹ค

2) ๋งŒ์•ฝ corsFilter ๋นˆ์ด ์ œ๊ณต๋˜๋ฉด ํ•ด๋‹น ๋นˆ์„ ์šฐ์„  ์‚ฌ์šฉํ•œ๋‹ค

3) corsFilter ๋นˆ์ด ์—†์ด, CorsConfigurationSource ๋นˆ์ด ์ •์˜๋œ ๊ฒฝ์šฐ์—” ํ•ด๋‹น ์„ค์ •์„ ์‚ฌ์šฉํ•œ๋‹ค

4) CorsConfigurationSource๊ฐ€ ์—†๊ณ  SpringMVC๊ฐ€ ํด๋ž˜์Šค ๊ฒฝ๋กœ์— ์žˆ๋Š” ๊ฒฝ์šฐ HandlerMappingIntrospector๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค

 

2. CorsFilter

- CORS ์˜ˆ๋น„์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  Simple ๋˜๋Š” ๋ณธ ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑˆ๋‹ค. ์ œ๊ณต๋œ CorsConfigurationSouce๋ฅผ ํ†ตํ•ด ์ผ์น˜๋œ ์ •์ฑ…์— ๋”ฐ๋ฅธ ์‘๋‹ต์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ํ•„ํ„ฐ

 

cf) Spring MVC Java ๊ตฌ์„ฑ๊ณผ Spring MVC XML ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ CORS๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋Œ€์•ˆ. ์Šคํ”„๋ง ์›น์— ์˜์กดํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ javax.servlet์—์„œ CORS ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ๋ณด์•ˆ ์ œ์•ฝ์กฐ๊ฑด์— ์œ ์šฉํ•˜๋‹ค

728x90