OAuth - 3sam5oh/webtoon-search-service GitHub Wiki
์ธํฐ๋ท ์ฌ์ฉ์๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๊ณตํ์ง ์๊ณ ๋ค๋ฅธ ์น์ฌ์ดํธ ์์ ์์ ๋ค์ ์ ๋ณด์ ๋ํด ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ ์ ์๋ ๊ณตํต์ ์ธ ์๋จ์ผ๋ก์ ์ฌ์ฉ๋๋, > ์ ๊ทผ ์์์ ์ํ ๊ฐ๋ฐฉํ ํ์ค์ด๋ค.
์ํค๋ฐฑ๊ณผ ์ฐธ์กฐ
-
Resource Owner
- ๋ณดํธ๋ ๋ฆฌ์์ค(์ฌ์ฉ์์ ๊ณ์ ์ ๋ณด)๋ฅผ ์์ ํ ์ฌ์ฉ์
- ex) ์น ์๋น์ค ์ฌ์ฉ์
-
Client
- ๋ฆฌ์์ค ์์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผํ๋ ค๋ ์ ํ๋ฆฌ์ผ์ด์
- ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์์ค ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๊ถํ ๋ถ์ฌ๋ฅผ ๋ฐ์ผ์ํจ.
- ex) ์น/๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
-
Authorization Server
- ๋ฆฌ์์ค ์์ ์๊ฐ ์ธ์ฆ๋ ํ ํด๋ผ์ด์ธํธ์๊ฒ ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธํ๋ ์๋ฒ
- ํด๋ผ์ด์ธํธ์ ์๊ฒฉ ์ฆ๋ช ๋ฐ ๊ถํ ๋ถ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํจ.
- ex) OAuth ์ ๊ณต์ ์ฒด(naver ..)์ ์ธ์ฆ์๋ฒ
-
Resource Server
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ ๋ณดํธ๋ ๋ฆฌ์์ค๋ฅผ ์ค์ ๋ก ์ ์ฅํ๊ณ ์๋ ์๋ฒ
- ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ณตํ๋ ์ก์ธ์ค ํ ํฐ์ ํ์ธํ ํ ๋ฆฌ์์ค๋ฅผ ๋ฐํํจ.
- ex) api์๋ฒ
-
- ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค ์๋ฒ์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ์ธ์ฆ ํ ํฐ
- ๊ถํ ์๋ฒ์ ์ํด ๋ฐ๊ธ๋๋ฉฐ, ์ ํ๋ ๊ธฐ๊ฐ ๋์ ์ ํจ
- ex) JWT
-
- ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋์์ ๋, ํด๋ผ์ด์ธํธ๊ฐ ์๋ก์ด ์ก์ธ์ค ํ ํฐ์ ์์ฒญํ ์ ์๋๋ก ํ๋ ํ ํฐ
- ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋์์ ๋, ํด๋ผ์ด์ธํธ๊ฐ ์๋ก์ด ์ก์ธ์ค ํ ํฐ์ ์์ฒญํ ์ ์๋๋ก ํ๋ ํ ํฐ
- ๋ค์ด๋ฒ๋ OAuth2.0 ๊ณต์ ์ง์๋์์ด ์๋๋ผ์ ๋ณ๋๋ก "naver"๋ผ๋ provider๋ฅผ ๋ฑ๋กํด์ค์ผํจ
- ๋ค์ด๋ฒ๊ฐ๋ฐ์์ผํฐ์ callback ์ฃผ์์ yml์ redirect์ ์ฃผ์๋ ๊ฐ์์ผํจ
>
- Resource Owner(์ฌ์ฉ์)๊ฐ client ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ทผ
์ฌ์ฉ์๊ฐ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ค์ด๋ฒ๋ก ๋ก๊ทธ์ธํ๊ธฐ ์ํด ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํจ.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ด๋ฒ ๊ถํ ์๋ฒ์ ์ธ์ฆ ์์ฒญ
ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ด๋ฒ์ ๊ถํ ์๋ฒ๋ก ์ธ์ฆ ์์ฒญ์ ๋ณด๋
์ด ์์ฒญ์๋ ํด๋ผ์ด์ธํธ ID, ๋ฆฌ๋๋ ์ URI, ์๋ต ์ ํ(code), ๊ทธ๋ฆฌ๊ณ ์์ฒญ๋ ๊ถํ ๋ฒ์(scope)๊ฐ ํฌํจ.
ex) https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id={CLIENT_ID}&redirect_uri=REDIRECT_URI&state=STATE
response_type=code: ์ธ์ฆ ์ฝ๋๋ฅผ ์์ฒญํ๋ ๊ฒ์ ์๋ฏธ
client_id: ๋ค์ด๋ฒ ๊ฐ๋ฐ์ ์ผํฐ์์ ๋ฐ๊ธ๋ฐ์ ํด๋ผ์ด์ธํธ ID
redirect_uri: ์ธ์ฆ ํ ๋ฆฌ๋๋ ์ ๋ ํด๋ผ์ด์ธํธ์ URI
state: CSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ณ ์ ํ ์ํ ๊ฐ
- ์ฌ์ฉ์๊ฐ ๋ค์ด๋ฒ ๊ถํ ์๋ฒ์ ๋ก๊ทธ์ธ ๋ฐ ๊ถํ ๋ถ์ฌ
์ฌ์ฉ์๋ ๋ค์ด๋ฒ ๋ก๊ทธ์ธ ํ๋ฉด์์ ์์ ์ ๋ค์ด๋ฒ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ๋ก๊ทธ์ธ ํ, ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ฒญํ ๊ถํ(์: ํ๋กํ ์ ๋ณด ์ ๊ทผ ๋ฑ)์ ๋ํด ํ์ฉํ ๊ฒ์ธ์ง ๋ฌป๋ ํ๋ฉด์ด ํ์.
์ฌ์ฉ์๊ฐ ๊ถํ์ ๋ถ์ฌํ๋ฉด, ๋ค์ด๋ฒ ๊ถํ ์๋ฒ๋ ์ธ์ฆ ์ฝ๋๋ฅผ ์์ฑ
- ๋ค์ด๋ฒ ๊ถํ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ก ์ธ์ฆ ์ฝ๋ ์ ๋ฌ
์ฌ์ฉ์๊ฐ ๊ถํ์ ๋ถ์ฌํ๋ฉด, ๋ค์ด๋ฒ ๊ถํ ์๋ฒ๋ ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ธ์ฆ ์ฝ๋๋ฅผ ์ ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๋ค์ด๋ฒ์ ๋ฆฌ์์ค ์๋ฒ์ ์ก์ธ์ค ํ ํฐ์ ์ป๊ธฐ ์ํด ์ฌ์ฉ
- ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ ์ฝ๋๋ฅผ ์ฌ์ฉํด ๋ค์ด๋ฒ ๊ถํ ์๋ฒ์ ํ ํฐ ์์ฒญ
์ธ์ฆ ์ฝ๋, ํด๋ผ์ด์ธํธ ID ๋ฐ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ(๋น๋ฐํค), ๊ทธ๋ฆฌ๊ณ ๋ฆฌ๋๋ ์ URI๊ฐ ํฌํจ
- ๋ค์ด๋ฒ ๊ถํ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์ ์ก์ธ์ค ํ ํฐ ์ ๋ฌ
- ํด๋ผ์ด์ธํธ๊ฐ ์ก์ธ์ค ํ ํฐ์ ์ฌ์ฉํด ๋ค์ด๋ฒ API์ ์์ฒญ
ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ๊ธ๋ฐ์ ์ก์ธ์ค ํ ํฐ์ ์ฌ์ฉํด ๋ค์ด๋ฒ API์ ์์ฒญ ์ด๋ฒ์ ๋ฆฌ์์ค ์๋ฒ๋ ์ก์ธ์ค ํ ํฐ์ ๊ฒ์ฆํ ํ ์์ฒญ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ