๐ Project
[CORS] CORS๋? CORS ์๋ฌ ํด๊ฒฐ!
sun_young
2024. 6. 30. 21:39
๐ CORS๋?
Cross-Origin Resource Sharing, ์ฆ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ์ ์ฑ ์ผ๋ก ์๊ฐ๋ฆฐ ๋ค๋ฅธ ์ถ์ฒ๋ฅผ ์๋ฏธํ๋ค
- ์ถ์ฒ(Origin)๋?
- ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์ฌ์ดํธ๋ฅผ ์ ์ํ ๋ ์ธํฐ๋ท ์ฃผ์์ฐฝ์ URL์ ํตํด ์ ๊ทผํ๊ฒ ๋๋ค. URL์ ์ฌ๋ฌ ๊ฐ์ ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ ์ถ์ฒ๋ ํ๋กํ ์ฝ๊ณผ ํธ์คํธ, ํฌํธ๊น์ง ๋ชจ๋ ํฉ์น URL์ ์๋ฏธํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค
- ๋์ผ ์ถ์ฒ ์ ์ฑ
(Same-Origin Policy)
- ๋์ผํ ์ถ์ฒ์ ๋ํด์๋ง ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ ์ ์๋ค๋ ์ ์ฑ ์ ๊ฐ์ง๊ณ ์๋ค → ๋ค๋ฅธ ์ถ์ฒ ์๋ฒ์ ์๋ ๋ฆฌ์์ค๋ ์ํธ์์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค (์ ์์ ์ธ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด)
- ๊ฐ์ ์ถ์ฒ์ ๋ค๋ฅธ ์ถ์ฒ ๊ตฌ๋ถ์ ์ด๋ป๊ฒ?
- URL์ ๊ตฌ์ฑ ์์ ์ค ํ๋กํ ์ฝ, ํธ์คํธ, ํฌํธ ์ด 3๊ฐ์ง๋ง ๋์ผํ๋ค๋ฉด ๋์ผ ์ถ์ฒ๋ก ํ๋จ!
๐ ์ค๋ฅ ํด๊ฒฐ ๋ฐฉ์
์ฐ๋ฆฌ ํ๋ก์ ํธ๋ MSA ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ดํธ์จ์ด ์๋น์ค์ application.yml ํ์ผ์ cors ์ค์ ์ ์ถ๊ฐํ์๋ค
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins:
- "http://localhost:3000"
allow-credentials: true
allowedHeaders:
- x-requested-with
- authorization
- content-type
- credential
- X-AUTH-TOKEN
- X-CSRF-TOKEN
allowedMethods:
- POST
- GET
- PUT
- PATCH
- OPTIONS
- DELETE
exposed-headers:
- Authorization
๐ข allow-credentials๋ฅผ true๋ก ์ค์ ํ๋ฉด allowedOrigins๋ "*"๋ก ์ค์ ๋ ์ ์๋ค
- allowedHeaders : ํด๋ผ์ด์ธํธ ์ธก์ CORS ์์ฒญ์ ํ์ฉ๋๋ ํค๋ ์ง์
- ํ์ฌ ์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ JWT ํ ํฐ์ header์ ๋ด์์ ํด๋ผ์ด์ธํธ ์ธก์ผ๋ก ๋ณด๋ด๊ณ ์๋ค. ๋ฐ๋ผ์ allowedHeaders ์ค์ ๋ ์ถ๊ฐํด์ผ 403 ์ค๋ฅ๊ฐ ์ ๋ฌ๋ค
- exposed-headers : ํด๋ผ์ด์ธํธ๊ฐ ์๋ต์ ์ ๊ทผํ ์ ์๋ ํค๋ ์ง์
- ๊ฐ๋ฐ์ ๋๊ตฌ - ๋คํธ์ํฌ ํญ์ ์๋ ๋ฐ์ดํฐ๋ ์ ๋ณด๋ฅผ ์ฝ์ ์๋ง ์๋ค. ํด๋ผ์ด์ธํธ์์ ์๋ฒ์์ ๋์ด์จ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ exposed-headers ์ค์ ์ ์ถ๊ฐํด์ผ ํ๋ค.