2021-03-15(Mon)

ํ•ญ๋ชฉ

๋‚ด์šฉ

ํ•™์Šต ๋‚ ์งœ

2021-03-15(์›”)

ํ•™์Šต ์‹œ๊ฐ„

11:00~24:00

ํ•™์Šต ๋ฒ”์œ„ ๋ฐ ์ฃผ์ œ

OAuth

ํ•™์Šต ๋ชฉํ‘œ

ํŠธ๋ Œ์„ผ๋”์Šค ์ œ์ถœ์ „ ๋งˆ์ง€๋ง‰ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ํด๋ฆฌ์–ดํ•œ๋‹ค.

๋™๋ฃŒ ํ•™์Šต ๋ฐฉ๋ฒ•

eunhkim, sanam, jujeong, yohlee์™€ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ƒ์„ธ ํ•™์Šต ๋‚ด์šฉ

OAuth๋ฅผ ๋‹ค์‹œ ํ™œ์„ฑํ™”์‹œ์ผฐ๋Š”๋ฐ ์šฐ๋ฆฌ ๋ฐœ๋ชฉ์„ ์žก๋Š”๋‹ค. ๋‹ค์‹œ ๊ฐœ๋…์„ ๋˜์ƒˆ๊ฒจ๋ณด์ž.

OAuth2

์‹ค์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋Œ€์‹  AccessToken์ด๋ผ๋Š” ์ผ์ข…์˜ ๋น„๋ฐ€ํ‚ค๋ฅผ ์ด์šฉํ•œ๋‹ค.

  • AccessToken์˜ ์žฅ์ 

    • ์‚ฌ์šฉ์ž์˜ ์‹ค์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹ˆ๋‹ค.

    • ์„œ๋น„์Šค์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ์ผ๋ถ€ ๊ธฐ๋Šฅ๋งŒ ์ด์šฉ ๊ฐ€๋Šฅํ•œ ํ† ํฐ์ด๋‹ค.

OAuth๋Š” ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ๋ถ€ํ„ฐ AccessToken์„ ์–ป์–ด๋‚ด๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

OAuth ์ธ์ฆ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฐ์ฒด

  1. User(Resource Owner): ๋ฆฌ์†Œ์Šค์˜ ์ฃผ์ธ(์ผ๋ฐ˜ ์‚ฌ์šฉ์ž)

  2. App(client): ์ œ 3์ž ์•ฑ. User๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค

  3. Auth server / Resource server (ex. Google, 42api, github, facebook etc)

    • Resource server: ๋ฆฌ์†Œ์Šค ์ €์žฅ ์„œ๋ฒ„. API๋ฅผ ํ†ตํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณต

    • Authorization server: ์ธ์ฆ ๋‹ด๋‹น ์„œ๋ฒ„: ์ธ์ฆ์„ ์™„๋ฃŒํ•˜๋ฉด access token์„ client์—๊ฒŒ ๋ณด๋‚ธ๋‹ค.

      • ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์™€ ์ธ์ฆ ์„œ๋ฒ„๋Š” ๊ฐ™์€ ์„œ๋ฒ„์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

      • ์ผ๋ฐ˜์ ์œผ๋กœ ๊ตฌ๊ธ€์ด๋‚˜ ํŽ˜์ด์Šค๋ถ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ์„œ๋น„์Šค์—์„œ๋Š” ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์™€ ์ธ์ฆ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.

OAuth ๋กœ๊ทธ์ธ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ์š”์†Œ

OAuth ๋กœ๊ทธ์ธ์„ ํ•˜๊ณ ์ž ํ•˜๋Š” ์„œ๋น„์Šค์—์„œ ์•„๋ž˜ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.

  1. Client ID: public key ์ด๋‹ค. ๊ณต๊ฐœํ•ด๋„ ๋œ๋‹ค.

  2. Client Secret: secret key์ด๋‹ค. ๊ณต๊ฐœํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ๋ณดํ†ต ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ๋‹ด์•„ ๋‘”๋‹ค.

  3. 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

์ฐธ๊ณ 

Velog ์ฐธ๊ณ 

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