๐ Description
์ด๋ค ์ด์ ์์ ์ธ์ง.. ํ๋ก๋์
์๋ฒ์์ ์์
๋ก๊ทธ์ธ์ด ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๐ฅฒ
์ ํํ ์ด์ ๋ฅผ ๋ฐ๊ฒฌํ์ง ๋ชปํ์ง๋ง ์๋ฌด๋๋
์์
๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ(FE ์๋ฒ) โ FE์์ BE๋ก ๊นํ๋ธ URL ์์ฒญ(FE โ BE) โ ๊นํ๋ธ ๋งํฌ๋ก ๋ฆฌ๋ค์ด๋ ํธ ์๋ต(BE โ FE) โ
๊นํ๋ธ ๋ก๊ทธ์ธ ์ฑ๊ณต ํ Code๋ฅผ ๋ฐ์(๊นํ๋ธ โ FE) โ FE์์ BE๋ก Code ์ ๋ฌ(FE โ BE) โ ์๋ฒ์์ ๊นํ๋ธ๋ก Code๋ฅผ ๋ณด๋ธ ํ Access Token ๋ฐ์(BE โ ๊นํ๋ธ) โ ํ์๊ฐ์
๋ฑ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ํ ๋ก๊ทธ์ธ ์๋ต(BE โ FE)
์๋ OAuth๋ ๋ก๊ทธ์ธ ํ Code๋ฅผ ๋ฐ๊ณ Code๋ฅผ ํตํด Token์ ๋ฐ๋ ๋ก์ง์ด ๋ชจ๋ ํ๋๋ก ๋ฌถ์ฌ์์! ํ์ง๋ง ์ฐ๋ฆฌ๋ ํ์ฌ Code๋ฅผ ๋ฐ๋ ๊ฒ๊ณผ Token์ ๋ฐ๋ ๊ณผ์ ์ด ๋ถ๋ฆฌ๋์ด ์์.. ์๋ฌด๋๋ก ์ด๊ฒ์ด ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค..
๐ฏ ๊ฒฐ๋ก
Spring Security OAuth2 Client๋ ํ์ฌ ์ฐ๋ฆฌ์ ์ํฉ์ ์ ํฉํ์ง ์์์ผ๋ก.. ์ง์ ๊ตฌํํ์!!
๊ตฌ์ฒด์ ์ธ OAuth ํ๋ฆ
1๏ธโฃ ์ฌ์ฉ์๊ฐ ์ฌ์ด๋ํฝ ๋ก๊ทธ์ธ ํ์ด์ง์์ ๊นํ๋ธ ๋ก๊ทธ์ธ์ ๋๋ฅด๋ฉด
GET https://github.com/login/oauth/authorize?client_id={client-id}
๋ก ์์ฒญํ๋ค! (๊ทธ๋ผ ๊นํ๋ธ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋จ!)
โ๏ธ ๊ธฐ์กด ๋ฐฉ์: ํ๋ก ํธ์์ ๋ฐฑ์๋ ์๋ฒ๋ก ๊นํ๋ธ ๋ก๊ทธ์ธ ํ์ด์ง URI ์์ฒญ
โ๏ธ {client-id}์ ๋ค์ด๊ฐ๋ client-id๋ ๊ฐ๋ฐ ํ๊ฒฝ๋ณ๋ก ๋ค๋ฆ
๋๋ค!
- ๊ฐ๋ฐ(dev) ํ๊ฒฝ: 5560e1043cdd91659b3e
- ํ๋ก๋์
(prod) ํ๊ฒฝ: 09fbda0af1883456f365
2๏ธโฃ ์ฌ์ฉ์๊ฐ ๊นํ๋ธ ๋ก๊ทธ์ธ์ ์๋ฃํ๋ฉด, ๊ธฐ์กด๊ณผ ๊ฐ์ด ์ธ๊ฐ ์ฝ๋(code)๋ฅผ ๋ณด๋ด์ค
https://sidepeek.site/login/validation?code={code}
โ ๊ธฐ์กด๊ณผ ๋ค๋ฅธ ์ ์ status๋ ํจ๊ป ์ค์ง ์์ต๋๋ค!
3๏ธโฃ ์ธ๊ฐ ์ฝ๋(code)์ ํจ๊ป ๋ฐฑ์๋ ์๋ฒ๋ก ๋ก๊ทธ์ธ ์์ฒญ
POST /api/v1/auth/login/github?code={code}
โ๏ธ ๊ธฐ์กด ๋ฐฉ์
GET /api/v1/login/oauth2/code/github?code={code}&status={status}
โ๊ธฐ์กด๊ณผ HTTP METHOD, PATH, PARAMETER๊ฐ ๋ชจ๋ ๋ฐ๋์์ต๋๋คใ
ใ
โ์๋ก์ด ๋ฒ์ ์ API ๋ฌธ์๋ฅผ ์
๋ก๋ ํด๋จ์ต๋๋ค! ์ฐธ๊ณ ํด์ฃผ์ธ์:)
4๏ธโฃ ๋ฐฑ์๋์์ ๋ก๊ทธ์ธ ์๋ต
(์ฐธ๊ณ ์๋ฃ: ๊นํ๋ธ ์์
๋ก๊ทธ์ธ ๊ณต์ ๋ฌธ์)
๐ Description
์ด๋ค ์ด์ ์์ ์ธ์ง.. ํ๋ก๋์ ์๋ฒ์์ ์์ ๋ก๊ทธ์ธ์ด ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๐ฅฒ
์ ํํ ์ด์ ๋ฅผ ๋ฐ๊ฒฌํ์ง ๋ชปํ์ง๋ง ์๋ฌด๋๋
์์ ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ(FE ์๋ฒ)โ FE์์ BE๋ก ๊นํ๋ธ URL ์์ฒญ(FE โ BE) โ๊นํ๋ธ ๋งํฌ๋ก ๋ฆฌ๋ค์ด๋ ํธ ์๋ต(BE โ FE)โ๊นํ๋ธ ๋ก๊ทธ์ธ ์ฑ๊ณต ํ Code๋ฅผ ๋ฐ์(๊นํ๋ธ โ FE)โ FE์์ BE๋ก Code ์ ๋ฌ(FE โ BE) โ์๋ฒ์์ ๊นํ๋ธ๋ก Code๋ฅผ ๋ณด๋ธ ํ Access Token ๋ฐ์(BE โ ๊นํ๋ธ)โ ํ์๊ฐ์ ๋ฑ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ํ ๋ก๊ทธ์ธ ์๋ต(BE โ FE)์๋ OAuth๋ ๋ก๊ทธ์ธ ํ Code๋ฅผ ๋ฐ๊ณ Code๋ฅผ ํตํด Token์ ๋ฐ๋ ๋ก์ง์ด ๋ชจ๋ ํ๋๋ก ๋ฌถ์ฌ์์! ํ์ง๋ง ์ฐ๋ฆฌ๋ ํ์ฌ Code๋ฅผ ๋ฐ๋ ๊ฒ๊ณผ Token์ ๋ฐ๋ ๊ณผ์ ์ด ๋ถ๋ฆฌ๋์ด ์์.. ์๋ฌด๋๋ก ์ด๊ฒ์ด ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค..
๐ฏ ๊ฒฐ๋ก
Spring Security OAuth2 Client๋ ํ์ฌ ์ฐ๋ฆฌ์ ์ํฉ์ ์ ํฉํ์ง ์์์ผ๋ก.. ์ง์ ๊ตฌํํ์!!
๊ตฌ์ฒด์ ์ธ OAuth ํ๋ฆ
1๏ธโฃ ์ฌ์ฉ์๊ฐ ์ฌ์ด๋ํฝ ๋ก๊ทธ์ธ ํ์ด์ง์์ ๊นํ๋ธ ๋ก๊ทธ์ธ์ ๋๋ฅด๋ฉด
๋ก ์์ฒญํ๋ค! (๊ทธ๋ผ ๊นํ๋ธ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ํธ ๋จ!)
โ๏ธ ๊ธฐ์กด ๋ฐฉ์: ํ๋ก ํธ์์ ๋ฐฑ์๋ ์๋ฒ๋ก ๊นํ๋ธ ๋ก๊ทธ์ธ ํ์ด์ง URI ์์ฒญ
โ๏ธ {client-id}์ ๋ค์ด๊ฐ๋ client-id๋ ๊ฐ๋ฐ ํ๊ฒฝ๋ณ๋ก ๋ค๋ฆ ๋๋ค!
- ๊ฐ๋ฐ(dev) ํ๊ฒฝ: 5560e1043cdd91659b3e
- ํ๋ก๋์ (prod) ํ๊ฒฝ: 09fbda0af1883456f365
2๏ธโฃ ์ฌ์ฉ์๊ฐ ๊นํ๋ธ ๋ก๊ทธ์ธ์ ์๋ฃํ๋ฉด, ๊ธฐ์กด๊ณผ ๊ฐ์ด ์ธ๊ฐ ์ฝ๋(code)๋ฅผ ๋ณด๋ด์ค
โ ๊ธฐ์กด๊ณผ ๋ค๋ฅธ ์ ์ status๋ ํจ๊ป ์ค์ง ์์ต๋๋ค!
3๏ธโฃ ์ธ๊ฐ ์ฝ๋(code)์ ํจ๊ป ๋ฐฑ์๋ ์๋ฒ๋ก ๋ก๊ทธ์ธ ์์ฒญ
POST /api/v1/auth/login/github?code={code}
โ๏ธ ๊ธฐ์กด ๋ฐฉ์
GET /api/v1/login/oauth2/code/github?code={code}&status={status}
โ๊ธฐ์กด๊ณผ HTTP METHOD, PATH, PARAMETER๊ฐ ๋ชจ๋ ๋ฐ๋์์ต๋๋คใ ใ
โ์๋ก์ด ๋ฒ์ ์ API ๋ฌธ์๋ฅผ ์ ๋ก๋ ํด๋จ์ต๋๋ค! ์ฐธ๊ณ ํด์ฃผ์ธ์:)
4๏ธโฃ ๋ฐฑ์๋์์ ๋ก๊ทธ์ธ ์๋ต
(์ฐธ๊ณ ์๋ฃ: ๊นํ๋ธ ์์ ๋ก๊ทธ์ธ ๊ณต์ ๋ฌธ์)