2021-03-15(Mon)
ํญ๋ชฉ | ๋ด์ฉ |
ํ์ต ๋ ์ง | 2021-03-15(์) |
ํ์ต ์๊ฐ | 11:00~24:00 |
ํ์ต ๋ฒ์ ๋ฐ ์ฃผ์ | OAuth |
ํ์ต ๋ชฉํ | ํธ๋ ์ผ๋์ค ์ ์ถ์ ๋ง์ง๋ง ์ฒดํฌ๋ฆฌ์คํธ๋ฅผ ๋ชจ๋ ํด๋ฆฌ์ดํ๋ค. |
๋๋ฃ ํ์ต ๋ฐฉ๋ฒ | eunhkim, sanam, jujeong, yohlee์ ํ์ด ํ๋ก๊ทธ๋๋ฐ |
์์ธ ํ์ต ๋ด์ฉ
OAuth๋ฅผ ๋ค์ ํ์ฑํ์์ผฐ๋๋ฐ ์ฐ๋ฆฌ ๋ฐ๋ชฉ์ ์ก๋๋ค. ๋ค์ ๊ฐ๋ ์ ๋์๊ฒจ๋ณด์.
OAuth2
์ค์ ๋น๋ฐ๋ฒํธ ๋์ AccessToken
์ด๋ผ๋ ์ผ์ข
์ ๋น๋ฐํค๋ฅผ ์ด์ฉํ๋ค.
AccessToken์ ์ฅ์
์ฌ์ฉ์์ ์ค์ ๋น๋ฐ๋ฒํธ๊ฐ ์๋๋ค.
์๋น์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์๋ ์ผ๋ถ ๊ธฐ๋ฅ๋ง ์ด์ฉ ๊ฐ๋ฅํ ํ ํฐ์ด๋ค.
OAuth๋ ๋ค๋ฅธ ์๋น์ค๋ก๋ถํฐ AccessToken์ ์ป์ด๋ด๋ ๊ธฐ์ ์ด๋ค.
OAuth ์ธ์ฆ์ ์ํด ํ์ํ ๊ฐ์ฒด
User(Resource Owner): ๋ฆฌ์์ค์ ์ฃผ์ธ(์ผ๋ฐ ์ฌ์ฉ์)
App(client): ์ 3์ ์ฑ. User๊ฐ ์ฌ์ฉํ๋ ์๋น์ค
Auth server / Resource server (ex. Google, 42api, github, facebook etc)
Resource server: ๋ฆฌ์์ค ์ ์ฅ ์๋ฒ. API๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ์ ๊ณต
Authorization server: ์ธ์ฆ ๋ด๋น ์๋ฒ: ์ธ์ฆ์ ์๋ฃํ๋ฉด access token์ client์๊ฒ ๋ณด๋ธ๋ค.
๋ฆฌ์์ค ์๋ฒ์ ์ธ์ฆ ์๋ฒ๋ ๊ฐ์ ์๋ฒ์ผ ์๋ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ตฌ๊ธ์ด๋ ํ์ด์ค๋ถ ๊ฐ์ ๋๊ท๋ชจ ์๋น์ค์์๋ ๋ฆฌ์์ค ์๋ฒ์ ์ธ์ฆ ์๋ฒ๋ฅผ ๋ถ๋ฆฌํ๋ค.
OAuth ๋ก๊ทธ์ธ์ ์ํด ํ์ํ ์์
OAuth ๋ก๊ทธ์ธ์ ํ๊ณ ์ ํ๋ ์๋น์ค์์ ์๋ ์ธ ๊ฐ์ง ์์๋ฅผ ๋ฐ์์ผ ํ๋ค.
Client ID: public key ์ด๋ค. ๊ณต๊ฐํด๋ ๋๋ค.
Client Secret: secret key์ด๋ค. ๊ณต๊ฐํ๋ฉด ์ ๋๋ค. ๋ณดํต ํ๊ฒฝ๋ณ์์ ๋ด์ ๋๋ค.
Redirect URL: Client ID์ Client Secret์ ํ์ธํ ํ redirectํ url ์ฃผ์์ด๋ค.
OAuth ์ธ์ฆ ๊ณผ์
์ ์
Client๊ฐ Auth Server๋ก๋ถํฐ Client ID, Client Secret, Redirect URL์ ๋ชจ๋ ๋ฑ๋ก/๋ฐ๊ธ ๋ฐ์ ์ํ์ฌ์ผ ํ๋ค.
Resource Owner์ ์น์ธ
Resource Owner๊ฐ Auth Server์๊ฒ ์น์ธ ์์ฒญ์ ๋ณด๋ธ๋ค.
Auth Server๊ฐ Resource Owner์๊ฒ
Authorization Code
๋ฅผ ๋ณด๋ธ๋ค.์ด์ Resource Owner๊ฐ Client์๊ฒ
Authorization Code
๋ฅผ ๋ณด๋ธ๋ค.Client๋
Client ID, Client Secret, Redirect URL, Authorization Code
๋ค ๊ฐ์ง๋ฅผ ๋ชจ๋ ๊ฐ๊ณ ์๋ ์ํ์ด๋ค.
Auth Server์ ์น์ธ
์ ๋ค ๊ฐ์ง ์ ๋ณด๋ฅผ Auth Server์ ๋ณด๋ธ๋ค. (Redirect URL์ optional)
redirect_url
์ ๋ณด๋ด๋ ๊ฑด ์ ํ์ด๋ค.ํ์ง๋ง
Client ID, Client Secret, Authorization Code ์ธ ๊ฐ์ง๋ ๊ผญ ๋ณด๋ด์ผ ํ๋ค.
Resource Server๋ ๋ค ๊ฐ์ง ์ ๋ณด๊ฐ ๋ชจ๋ ์ผ์นํ๋์ง ํ์ธํ๋ค.
ํ๋๋ผ๋ ๋ถ์ผ์น ํ ๊ฒฝ์ฐ OAuth ๋ก๊ทธ์ธ์ ์คํจํ๋ค.
๋ชจ๋ ์ผ์นํ๋ฉด
Access Token
์ ๋ฐ๊ธํ๋ค.Authorization Code
๊ฐ์ ๋ ์ด์ ํ์์๊ธฐ ๋๋ฌธ์ ์ญ์ ํ๋ค.
Access Token ๋ฐ๊ธ
๋ฐ๊ธ ๋ฐ์
Access Token
์ ํตํด์ Resource Server์ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๋ค.
Refresh Token
Access Token
์ cookie์ฒ๋ผ ๋ง๋ฃ ๊ธฐํ์ด ์๋ค.๋ฐ๋ผ์ ๋ง๋ฃ๊ฐ ๋๋ฉด ์ฌ๋ฐ๊ธ ๋ฐ์์ผํ๋ค.
์ด ๋ ์ฌ์ฉํ๋ ๊ฒ
Refresh Token
์ด๋ค.์๋น์ค๋ง๋ค
Refresh Token
์ ๋ฐ๊ธํ์ง ์๋ ๊ฒฝ์ฐ๋ ์๊ณ ์ฐ๋ ๋ฐฉ์๋ ๋ค๋ฅด๋ค.Access Token
์ ์ฃผ๋ก ์ธ์ ์ ์ ์ฅํ๋ค.๋ง๋ฃ ๊ธฐํ์ด ์งง๋ค.
Refresh Token
์ ์ค์ํ๊ธฐ ๋๋ฌธ์ DB์ ์ ์ฅํ๋ค.๋ง๋ฃ ๊ธฐํ์ด ๊ธธ๋ค.
์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ ์๋ ๊ด๊ณ์ด๋ค.
Resource owner: User
Resource server: 42 api server
Client: Rails server
์ฐธ๊ณ
https://ruby-doc.org/stdlib-2.7.2/libdoc/net/http/rdoc/Net/HTTP.html
https://api.intra.42.fr/apidoc/guides/web_application_flow
https://medium.com/@charmiigarg/apigee-introduction-to-oauth-2-0-grant-types-4352aa7aacf7
ํ์ต ๋ด์ฉ์ ๋ํ ๊ฐ์ธ์ ์ธ ์ดํ
Authorization code
๋ ์ ๋ฐ์๊ณ , 42api ์๋ฒ์ Authroization code
๋ฅผ ๋ณด๋๋๋ฐ Access Token
์ด ์ ๋๋ก ๋์์ค์ง ์์๋ค. ํ ์๊ณ ๋ณด๋ 42api ๋ฌธ์์ ์ ๋๋ก ๋ช
์๋์ง ์์ ์จ๊ฒจ์ง ๊ท์น๋ค์ด ์์ด์ ๊ทธ๋ฐ ๊ฒ์ด์๋ค. ๊ฐ๋ น required ๋ผ๊ณ ์ ํ์์ง ์์ key ๊ฐ์ด ์ฌ์ค์ required ๋ผ๋ ์ง.. api ๋ฌธ์๊ฐ ์ ๋๋ก ์ ํ์์ง ์์์ ์๊ธด ๋ฌธ์ ๋์ ์๊ฐ์ ๋ง์ด์ผ๋ค. ๋ฌธ์ ๊ด๋ฆฌ์ ์ค์์ฑ์ ๊นจ๋ฌ์ ์ ์์๋ค.
๋ค์ ํ์ต ๊ณํ
ํธ๋ ์ผ๋์ค ํ ์คํธ
Last updated