๊ฐ ์๋ค๊ณ ์๊ฐํด๋ณด์.
๐ฉโ๐ป๋ด๊ฐ ๋ง๋ ์๋น์ค๋ ๐จโ๐ฉโ๐ฆโ๐ฆ์ฌ์ฉ์๋ก๋ถํฐ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๐๊ทธ ์๋น์ค์ ์ ๊ทผํ ์ ์๋๋ก ํ๊ฐ๋ฅผ ๋ฐ์์ผํ๋ค.
๊ทธ๋ ๋ค๋ฉด ํ๊ฐ๋ฅผ ๋ฐ๋ ๋ฐฉ๋ฒ์๋ ๋ฌด์์ด ์์๊น?
๋จ์ํ๊ฒ ์๊ฐํด๋ณธ๋ค๋ฉด,
์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๊ทธ ์๋น์ค์ ์ฌ์ฉ์๋ค์ ID, PW๊ฐ ์๋ค.
๊ทธ๊ฒ์ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ฌ ๋ฐ์์ ๋์ ์๋น์ค๊ฐ ์ฌ์ฉ์์ ID, PW๋ฅผ ๊ธฐ์ตํ๊ณ ์๋ค๊ฐ ๊ทธ ์๋น์ค๋ฅผ ์ด์ฉํ ๋ ์ฌ์ฉ์์ ํด๋น ID, PW๋ฅผ ๊ทธ๋๋ก ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
๊ฐ๋จํ๋ฉด์๋ ๊ทธ ์๋น์ค๋ค์ ๋ชจ๋ ๋ค ์ฌ์ฉํ ์ ์๊ฒ๋๋ค.
ํ์ง๋ง, ์ด์ง ๊ฐ๋ ํด๋ณด๊ธฐ๋ง ํด๋ ๋ณด์์ ์ํ์ฑ์ด ๋๊ปด์ง๋ค.
๐จโ๐ฉโ๐ฆโ๐ฆ ์ฌ์ฉ์ ์
์ฅ
์ฒ์ ๋ณด๋ ์๋น์ค(๐ฉโ๐ป)์๊ฒ ์์ ์ ID์ PW๋ฅผ ๋งก๊ฒจ์ผ ํ๋ ๊ฒ์ด๋ฏ๋ก, ์์นซํ๋ฉด ํด๋น ์๋น์ค๊ฐ ์ฌ์ฉ์์ ๊ณ์ ์ ์
์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ์์ฒด๋ก๋ ์ํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ค์ ID,PW๋ฅผ ๋งค๋ฒ ๋ฐ๊ฟ์ ์ฌ์ฉํ์ง ์๊ณ ๋๋ถ๋ถ ๋ช๊ฐ๋ก ๋๋ ค ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋งก๊ธด ID, PW๊ฐ ์ ์ถ ๋๋ค๋ฉด ๋ณด์ ์ฌ๊ณ ๊ฐ ๋๊ฒ๋๋ฒ๋ฆฐ๋ค.
๐ฉโ๐ป ์๋น์ค๋ฅผ ๋ง๋๋ ์
์ฅ
์ฌ์ฉ์์ ID,PW๋ฅผ ๋งก๊ณ ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ ๋ณด๊ฐ ์ ์ค๋์์ ๋ ๊ฒช๊ฒ ๋ ์ฌ๋ฌ๊ฐ์ง ๊ณ ์ถฉ์ด ์์ ๊ฒ์ด๋ฏ๋ก ๋ฌ๊ฐ์ง ์์ ๊ฒ์ด๋ค.
๐ ๊ทธ ์๋น์ค ์
์ฅ
์์ ๋ค์ ์ฌ์ฉ์ ID,PW๋ฅผ ์ ๋ขฐํ ์ ์๋ ์๋น์ค๊ฐ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ๋ดํค์ง ์์ ๊ฒ์ด๋ค.
์ด๋ฌํ ์ํฉ..!์์ ๋์ ์๋น์ค(๐ฉโ๐ป)๋ฅผ ๊ตฌ์์์ผ์ค
OAuth๋ฅผ ์ด์ฉํ๋ฉด ํจ์ฌ ์์ ์ฑ์ ๋์ผ ์ ์๋ค.
์์ ๋ฐฉ๋ฒ์์๋ ๋์ ์๋น์ค๊ฐ ์ฌ์ฉ์๋ค์ด ์ด์ฉํ๋ ๊ทธ ์๋น์ค์ ID,PW๋ฅผ ๊ฐ์ง๊ณ ์์๋๋ฐ,
๊ทธ๋ฌ์ง ์๊ณ !!
์ฌ์ฉ์์ ์์ฒญ์ ์ํด์ ๊ทธ ์๋น์ค๊ฐ
ID, PW๋ฅผ ๋์ ํด์ accessToken์ด๋ผ๋ ์ผ์ข
์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ๊ธํด์ค๋ค.
๊ทธ๋์!
๋์ ์๋น์ค๊ฐ OAuth๋ฅผ ํตํด ๊ทธ ์๋น์ค์ accessToken์ ํ๋ํ ๋ค์,
ํด๋น accessToken์ ํตํด ๊ทธ ์๋น์ค์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ ๊ฒ ์ ๊ทผ์ ํด์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ์์ ํ๊ธฐ, ์์ฑํ๊ธฐ, ์ญ์ ํ๊ธฐ.. ์ ๊ฐ์ ์์ ์ ํ ์ ์๊ฒ ๋๋ค!
์๋จ์์ ์ดํด๋ฅผ ์ํด ํํํ๋ ์ฉ์ด๋ฅผ
์์ ๊ฐ์ด ์ ๋ฆฌํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ Resource Owner, Client, Resource Server์ ๊ด๊ณ๊ฐ OAuth์ ํต์ฌ์ด๋ผ๊ณ ํ ์ ์๋ค!
OAuth์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด Authorization Server๋ฅผ ๋ณผ ์ ์๋ค.
*ํด๋น ๊ฒ์๋ฌผ์์๋ Authrization Server๊น์ง Resource Server๋ก ๋ฌถ์๋ค.
Resource Server๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฒ์ด๊ณ ,
Authorization Server๋ ์ธ์ฆ ๊ด๋ จ ์ฒ๋ฆฌ๋ฅผ ์ ๋ดํ๋ ์๋ฒ์ด๋ค.
: Server, Owner, Client๊ฐ ์๋ ์ํฉ์์ Client๊ฐ Resource Server๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ์ฌ์ ์ Resource Server์๊ฒ ์น์ธ์ ๋ฐ์์ผ ํ๊ณ , ์ด๊ฒ์ ๋ฑ๋ก์ด๋ผ๊ณ ํ๋ค.
์๋น์ค๋ง๋ค ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๋ค ๋ค๋ฅด์ง๋ง,
Client ID, Client Secret, Authorized redirect URIs
์ด ์ธ๊ฐ์ง๋ฅผ ๋ฐ๋๋ค๋ ๊ณตํต์ ์ด ์๋ค.
OAuth ๋ฑ๋ก ์ ์ฐจ๋ฅผ ๊ฑธ์น๋ฉด
๊ฐ๊ฐ ์์ ๊ฐ์ ์ ๋ณด๋ฅผ ์๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ Client๋ redirect URL์ ํด๋นํ๋ ํ์ด์ง๋ฅผ ๊ตฌํํด๋์ ์ํ๋ก ์ค๋นํด ๋์์ผ ํ๋ค.
Resource Server๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ธฐ๋ฅ์ด A, B, C, D 4๊ฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ ๋, Client๊ฐ Resource Server์ ๋ชจ๋ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒ์ด ์๋๋ผ B, C 2๊ฐ์ ๊ธฐ๋ฅ๋ง ํ์ํ๋ค๋ฉด ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ํด ์ธ์ฆ์ ๋ฐ๋ ๊ฒ์ด ์๋๋ผ, ์ต์ํ์ ๊ธฐ๋ฅ(B, C)์ ๋ํด์๋ง ์ธ์ฆ์ ๋ฐ๋ ๊ฒ์ด ์๋ก ์ข์ ๊ฒ์ด๋ค.
Resource Owner(user)๊ฐ ๋ด๊ฐ ๋ง๋ ์ดํ๋ฆฌ์ผ์ด์
(Client)์ ์ ์ ํ๋ ๊ณผ์ ์์ Resource Server๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด, Resource Owner์๊ฒ Social Login์ ํ๋ UI(ํน์ ์ธ์ฆ์ ๊ฑฐ์ณ์ผ ํ๋ค๋ ๋ฉ์์ง)๋ฅผ ์ ๊ณตํ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์๊ฐ ๋์๋ฅผ ํด์ผ ๋ค์ ๋จ๊ณ๋ก ์งํํ ์ ์๋ค.
Social Login๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ client id, scope(์ํ๋ ๊ธฐ๋ฅ), redirect_url์ด ํฌํจ๋ ์ฃผ์ ๋งํฌ๋ก ์ ๊ณตํ๋ฉด ๋๋ค.
Resource Owner๊ฐ Resource Server๋ก ์ ์์ client id, scope(์ํ๋ ๊ธฐ๋ฅ), redirect_url์ด ํฌํจ๋ ์ฃผ์๋ก ํ๊ฒ ๋๋ฉด, Resource Server๊ฐ Resource Owner์ ๋ก๊ทธ์ธ ์ฌ๋ถ๋ฅผ ๋ณด๊ณ ๋ก๊ทธ์ธ์ด ์๋์ด ์์ผ๋ฉด ๋ก๊ทธ์ธ ํ๋ผ๋ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
Resource Owner๊ฐ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ค๋ฉด Resource Server๋ ๊ทธ๋์์ผ client id๊ฐ ๊ฐ์ ๊ฐ์ด ์๋์ง๋ฅผ ํ์ธ ํ๊ณ , Resource Server๊ฐ ๊ฐ์ง๊ณ ์๋ client id์ redirect URL๊ณผ ์ ์์ ์๋ํ๋ ์์ฒญ์ redirect URL๊ฐ์ ๋น๊ตํ๋ค.
Resource Owner์ ํ๋ฝ์ ํ๋ํ๋ค๋ฉด, Resource Server๊ฐ ์น์ธ์ ํด์ค์ผ ํ๋ค.
๊ทธ๋ฌ๊ธฐ ์ํด์๋ ๋ฐ๋ก accessToken์ ๋ฐ๊ธํ์ง ์๊ณ , ๊ทธ ์ ์ ์ ์ฐจ๊ฐ ๋ ์กด์ฌํ๋ค. (...๋ณต์ก ใ
ใ
...)
์ด ๋ ์ฌ์ฉํ๋ ์์ ๋น๋ฐ๋ฒํธ๊ฐ Authorization code์ด๋ค.
Resource Server๋ Authorization code๋ฅผ header๊ฐ์ผ๋ก Location๊ฐ์ ์ฃผ์ด Resource Owner์๊ฒ ์ ์กํ๋ค.
๊ทธ๋ฌ๋ฉด Resource Owner์ ์น ๋ธ๋ผ์ฐ์ ๋ Location header๊ฐ์ ์ํด์ ์ฌ์ฉ์๊ฐ ์ธ์ํ์ง ๋ชปํ๊ฒ ์๋ฐํ Authorization code๊ฐ ๋ด๊ธด ์ฃผ์๋ก ์ด๋ํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฉด Client๋ Authorization code๊ฐ์ ๊ฐ๊ฒ ๋๋ค.
์ฌ๊ธฐ๊น์ง๋ Client๊ฐ Resource Server์๊ฒ Authorization code ์ ๋ณด๋ฅผ ์ ์กํด์ accessToken์ ๋ฐ๊ธํ๊ธฐ ์ ๋จ๊ณ์ด๋ค.
Client๋ Resource Owner๋ฅผ ํตํ์ง ์๊ณ Resource Server์๊ฒ ์ง์ ์ ์ํ๋ค. ์ด๋ ์ ์ ์ฃผ์์๋ Authorization code, redirect_url, Client ID, Client Secret์ด ํฌํจ๋๋๋ฐ, Authorization code์ Client Secret ๋๊ฐ์ ๋น๋ฐ ์ ๋ณด๋ฅผ ๊ฒฐํฉํด์ Resource Server์๊ฒ ์ ์กํ๊ฒ ๋๋ค. Resource Server๋ Authorization code๊ฐ์ ๋ณด๊ณ ์์ ์ด ๊ฐ์ง๊ณ ์๋ Authorization code๊ฐ์ด ์ผ์นํ๋์ง๋ฅผ ํ์ธํ๋ค. ํด๋น Authorization code๊ฐ์ ๋ฐ๊ธํ Client ID์ Client Sceret๊ฐ์ ๋ณธ๋ค. ๊ทธ๋ฆฌ๊ณ Resource Server๋ Client๊ฐ ์ ์กํ Authorization code, redirect_url, Client ID, Client Secret์ด ์์ ํ ์ผ์นํ๋์ง๋ฅผ ํ์ธํ๊ณ , ๋ชจ๋ ์ผ์นํ๋ค๋ฉด ๊ทธ๋ ๋ค์ ๋จ๊ณ๋ก ์งํํ๊ฒ ๋๋ค. ๊ทธ ๋ค์๋จ๊ณ๋ ๋ฐ๋ก~ ~ ~ ~
Resource Server๊ฐ Client๋ฅผ ์น์ธํ๋ ๊ณผ์ ์
1) Client๊ฐ Resource Owner๋ฅผ ํตํด์ Authorization code๊ฐ์ ๋ฐ์๋ค๋ฉด
2) ๊ทธ ๋ค์ ๋จ๊ณ๋ก Client๋ Resource Server์๊ฒ ์ง์ ์ ๋ณด๋ฅผ ์ ์กํ๊ณ
3) ๊ทธ ์ ๋ณด ์ค์์ ์์ฃผ ์ค์ํ! ์ธ๋ถ์ ์ ๋ ๋
ธ์ถ๋์ด์๋ ์๋๋! Client Secret๋ฅผ Authorization code๊ฐ๊ณผ ํจ๊ป ์ง์ Resource Server์๊ฒ ์ ์ก
์ด๋ ๊ฒ ์ ๋ฆฌํด๋ณผ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด ๋ค์ ๋จ๊ณ๋ accessToken์ ๋ฐ๊ธ์ด๋ค.
OAuth์ ๋ชฉ์ ์??? accessToken์ ๋ฐ๊ธํ๋ ๊ฒ!!
Resource Server๋ Authorization code๊ฐ์ ํตํด์ ์ด๋ฏธ ์ธ์ฆ์ ํ๊ธฐ์, Authorization code๊ฐ์ ์ง์ด๋ค.(Client์์๋!)
-> ์ฌ์ธ์ฆ์ ํ์ง ์๊ธฐ ์ํจ!
๊ทธ๋ฆฌ๊ณ ๋๋์ด! Resource Server๋ accessToken์ ๋ฐ๊ธํ๋ค. ๊ทธ๋ฆฌ๊ณ accessToken์ Client์๊ฒ ์๋ตํด์ค๋ค. ๊ทธ๋ผ Client๋ accessToken๊ฐ์ ๋ด๋ถ์ (DB, file...)์ผ๋ก ์ ์ฅํ๋ค.
accessToken๋ Client๊ฐ ๋ฐ์ accessToken์ผ๋ก ์ ๊ทผ์ ํ๊ฒ ๋๋ฉด, Resource Server๋ ๊ทธ accessToken๊ฐ์ ๋ณด๊ณ
ํด๋น ๊ฐ์ user id ~~์ ํด๋น๋๋ ์ฌ์ฉ์์ ์ ํจํ ๊ธฐ๋ฅ(scope)์ ๋ํด ๊ถํ์ด ์ด๋ ค ์๋ access key ์ด๋ฏ๋ก
์ ํจํ ๊ธฐ๋ฅ(scope)๊ณผ user id ~~์ ํด๋นํ๋ ์ฌ์ฉ์์ ์ ๋ณด์ ๋ํด์ ํด๋น accessToken๊ฐ์ ๊ฐ์ง ์ฌ๋์๊ฒ ํ์ฉํ๊ฒ ๋ค๊ณ ๋์ํ๋ค.
accessToken์ ํ์ฉํด์ Resource Server๋ฅผ ํธ๋ค๋งํด์ผํ๋ค! ๊ทธ๋ฌ๊ธฐ ์ํด์๋ Resource Server๊ฐ Client๋ค์๊ฒ ์๋ ค์ฃผ๋ ์ฌ์ฉ ๋ฐฉ์๋๋ก ์กฐ์ํด์ผ ํ๋ค.
=> ๊ทธ ๋ฐฉ์์ด ๋ฐ๋ก API(Application Programming Interface)
accessToken์ ์๋ช
์ด ์๋ค.
์๋ช
์ด ๋๋๋ค๋ฉด, API์ ์ ์ํ์ ๋ ๋์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ง ์๋๋ค. ๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ํ๋..? accessToken์ ๋ค์ ๋ฐ๊ธ ๋ฐ์์ผ ํ๋ค..!๊ทผ๋ฐ ๊ทธ๋ด๋๋ง๋ค ์ฌ์ฉ์์๊ฒ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ํ๋ ๊ฒ์ ๋นํจ์จ์ ์ด๊ณ ํ๋ ์ผ์ด๋ค.
์ด๋ด ๊ฒฝ์ฐ ์์ฝ๊ฒ accessToken์ ๋ฐ๊ธ ๋ฐ์ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก refresh token์ด๋ค.
RFC 6749 - The OAuth 2.0 Authorization Framework (Refresh Token)
์์ ์ด๋ฏธ์ง์์ (F)๋ฅผ ๋ณด๋ฉด
accessToken์ ์๋ช
์ด ๋๋ ๊ฒ์ ์ ์ ์๋ค.
๊ทธ๋ฌ๋ฉด Client๋ refresh token์ Authorization Server์๊ฒ ์ ๋ฌํ๋ฉด์ accessToken์ ๋ค์ ๋ฐ๊ธ ๋ฐ๋๋ค.
(H) The authorization server authenticates the client and validates the refresh token, and if valid, issues a new access token (and, optionally, a new refresh token).
-> (H) ๊ตฌ๋ฌธ์ ๋ณด๋ฉด ๊ฒฝ์ฐ์ ๋ฐ๋ผ refresh token์ด ์๋ก ๋ฐ๊ธ๋๋ ๊ฒฝ์ฐ๋ ์๊ณ , refresh token์ ๋ฐ๊ธ๋์ง ์๊ณ accessToken๋ง ๊ณ์ ๋ฐ๊ธ ๋ฐ๋ ๋ฐฉ์๋ ์๋ค
์ฌ์ฉํ๋ ์๋ฒ๋ง๋ค Refreshingํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฉ๋ด์ผ์ ์ฐธ๊ณ ํด์ผ ํจ!
ํ์ต - oAuth