Bibi's DevLog ๐Ÿค“๐ŸŽ

[OAuth] ์ƒํ™œ์ฝ”๋”ฉ - OAuth 2.0 ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ

[OAuth] ์ƒํ™œ์ฝ”๋”ฉ - OAuth 2.0

๋น„๋น„ bibi 2021. 6. 1. 14:12

[210515]

์ƒํ™œ์ฝ”๋”ฉ - OAuth 2.0

1. ์ˆ˜์—… ์†Œ๊ฐœ

์ˆ˜์—… ์†Œ๊ฐœ

์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์ž…๋œ ์„œ๋น„์Šค์˜ API์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๊ถŒํ•œ์„ ์œ„์ž„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉ์ž์˜ ํŒจ์Šค์›Œ๋“œ ์—†์ด๋„ ๊ถŒํ•œ์„ ์œ„์ž„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ ๊ณ ์•ˆ๋œ ๊ธฐ์ˆ ์ด OAuth์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  ๋งŽ์€ API๋“ค์ด OAuth๋ฅผ ํ†ตํ•ด์„œ ์ƒํ˜ธ ์—ฐ๋™์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์—… ๋Œ€์ƒ

๊ตฌ๊ธ€, ํŽ˜์ด์Šค๋ถ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค์˜ API์— ์‚ฌ์šฉ์ž ๋Œ€์‹ ์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์„ ์œ„ํ•œ ์ˆ˜์—…์ž…๋‹ˆ๋‹ค. ๋˜ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ๋กœ๊ทธ์ธ ํ•˜๊ธฐ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ๋„ ํ•„์ˆ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

OAuth๋ž€?

  • Mine : ๋‚˜์˜ ์„œ๋น„์Šค

  • User : ์‚ฌ์šฉ์ž (๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค)

  • Their : ๊ทธ๋“ค์˜ ์„œ๋น„์Šค (๊ตฌ๊ธ€, ํŽ˜์ด์Šค๋ถ, ํŠธ์œ„ํ„ฐ ... )

์‚ฌ์šฉ์ž๊ฐ€ ๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ๊ทธ๋“ค์˜ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ .

(ex ์‚ฌ์šฉ์ž๊ฐ€ ๋‚ด ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ๊ตฌ๊ธ€ ์บ˜๋ฆฐ๋”์— ์ผ์ •์„ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ)

๊ทธ๋Ÿฌ๋ ค๋ฉด ๊ทธ๋“ค์˜ ์„œ๋น„์Šค์˜ ์‚ฌ์šฉ์ž ID, PW๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. - ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•.

ํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ์œ„ํ—˜ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

์‚ฌ์šฉ์ž, ๊ทธ๋“ค์˜ ์„œ๋น„์Šค - ์–ด๋–ป๊ฒŒ ๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ๋ฏฟ๊ณ  ๊ทธ๋“ค์˜ ์„œ๋น„์Šค์˜ ID,PW๋ฅผ ์ค„ ๊ฒƒ์ธ๊ฐ€?

โ†’ OAuth๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ์ค€๋‹ค.

  • Their ๊ทธ๋“ค์˜ ์„œ๋น„์Šค : ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ์˜ํ•ด accessTocken์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.

    • ์‚ฌ์šฉ์ž์˜ ID, PW๋ฅผ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
    • ๊ทธ๋“ค์˜ ์„œ๋น„์Šค์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์•„๋‹Œ, ๋‚˜์˜ ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ํ•„์ˆ˜์ ์ธ ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Mine ๋‚˜์˜ ์„œ๋น„์Šค : ๊ทธ๋“ค์˜ ์„œ๋น„์Šค๊ฐ€ ๋ฐœ๊ธ‰ํ•œ accessTocken์„ ํš๋“ํ•œ ๋‹ค์Œ, ๊ทธ accessTocken์„ ํ†ตํ•ด ๊ทธ๋“ค์˜ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ๊ทธ๋“ค์˜ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•ด CRUD๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    • ์‚ฌ์šฉ์ž์˜ ID,PW ๊ด€๋ฆฌ ๋ถ€๋‹ด์ด ์—†๋‹ค.

    • ๋‚˜์˜ ์„œ๋น„์Šค์— ๋กœ๊ทธ์ธ ํ•  ๋•Œ์—๋„ ID, PW๋ฅผ ๋ณด๊ด€ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋“ค์˜ ์„œ๋น„์Šค์˜ accessTocken์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

      • Login with Google (๊ตฌ๊ธ€ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ) ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ฐ€๋Šฅ.

2. ์—ญํ•  (Role)

OAuth์— ๋“ฑ์žฅํ•˜๋Š” 3์ž์— ๋Œ€ํ•œ ์—ญํ• ๊ณผ ์šฉ์–ด๋ฅผ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

OAuth ์˜ ์„ธ ์ฃผ์ฒด

  • Resource Owner (= User)

    • ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ์ž
    • ์ž์›์˜ ์†Œ์œ ์ž
  • Client (= Mine)

    • ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์„œ๋น„์Šค (ex. opentutorials.org)
    • Resource Server๋กœ๋ถ€ํ„ฐ ์ž์›์„ ์š”์ฒญํ•˜๋Š” ์ž…์žฅ์ด๊ธฐ ๋•Œ๋ฌธ์— Client๋ผ๊ณ  ํ•œ๋‹ค.
  • Resource Server (= Their)

    • User๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์„œ๋น„์Šค
    • User๋Š” Their์— ํšŒ์›๊ฐ€์ž…์ด ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ (ex. Google, Facebook, Twitter)
    • '์šฐ๋ฆฌ๊ฐ€ ์ œ์–ดํ•˜๊ณ  ์‹ถ์€ ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋ฒ„'๋ผ๋Š” ์˜๋ฏธ์—์„œ Resource Server๋ผ๊ณ  ํ•œ๋‹ค.
      • Resource ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ๋งํ•จ
  • Authorization Server (=Their)

    • Their์˜ ์„œ๋ฒ„ ์ค‘ ์ธ์ฆ๊ณผ ๊ด€๋ จ ์ฒ˜๋ฆฌ๋ฅผ ์ „๋‹ดํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๋งํ•จ.

์ด ๊ฐ•์˜์—์„œ๋Š” ์‰ฌ์šด ์„ค๋ช…์„ ์œ„ํ•ด Authorization Server๊นŒ์ง€ ํ•ฉ์ณ์„œ Resource Server๋กœ ์„ค๋ช…ํ•œ๋‹ค.

3. ๋“ฑ๋ก register

OAuth๋ฅผ ์ด์šฉํ•ด์„œ Resource Server์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  Resource Server์— ๋“ฑ๋กํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

Resource Server์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, Resource Server์— ์Šน์ธ์„ ๋จผ์ € ๋ฐ›์•„ ๋‘์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ '๋“ฑ๋ก'์ด๋ผ๊ณ  ํ•œ๋‹ค.

(Resource Server๋งˆ๋‹ค ๊ตฌ์ฒด์ ์ธ ๋ฐฉ์‹์€ ๋‹ค๋ฅด๋‹ค)

๋“ฑ๋ก์˜ 3์š”์†Œ

  • Client ID
    • ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹๋ณ„์ž(id)
  • Client Secret
    • Client ID์— ๋Œ€ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ.
    • ์ ˆ๋Œ€๋กœ ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค!!
  • Authorized redirect URIs (redirect URL)
    • Resource Server๊ฐ€ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์šฐ๋ฆฌ๊ฐ€ Authorize Code๋ฅผ ์ „๋‹ฌํ•ด ์ค€๋‹ค.
    • ์ด Authorize Code๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” URI๊ฐ€ Authorized redirect URIs์ด๋‹ค.
    • Client๊ฐ€ Authorized redirect URIs ์™ธ์˜ ์ฃผ์†Œ๋กœ ์š”์ฒญํ•˜๋ฉด Resource Server๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ๋ฌด์‹œํ•œ๋‹ค.
    • โ— Client๋Š” Authorized redirect URIs๋กœ ๋“ฑ๋กํ•  ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๊ตฌํ˜„ํ•ด ๋‘์–ด์•ผ ํ•œ๋‹ค.

๋“ฑ๋ก ์ ˆ์ฐจ ํ›„์˜ ์ƒํƒœ

  • Resource Server(their)๋Š” Client์˜ Client ID, Client Secret, redirect URL์„ ์•Œ๊ฒŒ ๋œ๋‹ค.
  • Client(Mine)์€ Client ID, Client Secret ์„ ๋ถ€์—ฌ๋ฐ›๊ฒŒ ๋œ๋‹ค.

4. Resource Owner์˜ ์Šน์ธ

OAuth์˜ ์ฒซ๋ฒˆ์งธ ์ ˆ์ฐจ๋Š” Resource Owner๊ฐ€ Resource Server์—๊ฒŒ Client์˜ ์ ‘๊ทผ์„ ์Šน์ธํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋“ฑ๋ก ํ›„์˜ ์ƒํƒœ

  • Resource Server(their)๋Š” Client์˜ Client ID, Client Secret, redirect URL์„ ์•Œ๊ฒŒ ๋œ๋‹ค.
  • Client(Mine)์€ Client ID, Client Secret ์„ ๋ถ€์—ฌ๋ฐ›๊ฒŒ ๋œ๋‹ค.

๋“ฑ๋ก ํ›„์—๋Š” ์ธ์ฆ์„ ๋ฐ›๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

์šฐ๋ฆฌ๋Š” Resource Server๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค(A,B,C,D) ์ค‘ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ(B,C)๋งŒ์„ ์Šน์ธ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

Resource Owner(User)๊ฐ€ "Login with Google"๊ณผ ๊ฐ™์€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋Š” ๊ฒƒ์€ ๊ณง, Resource Owner๊ฐ€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋™์˜ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

"Login with Google"๊ณผ ๊ฐ™์€ ๋ฒ„ํŠผ์€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ฃผ์†Œ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.

https://resource.server/?client_id=1&scope=B,C&redirect_url=https://client/callback
  • Client ID
  • scope
    • ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค
  • Redirect URL

์‹ค์ œ ๋ฒ„ํŠผ์˜ URL์€ "URLDECODE.ORG"์™€ ๊ฐ™์€ ์‚ฌ์ดํŠธ์—์„œ ํ•ด๋…ํ•ด ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šน์ธ ์ ˆ์ฐจ

  1. Resource Owner๊ฐ€ Resource Server๋กœ ์ ‘์†ํ•œ๋‹ค

  2. Resource Server๋Š” Resource Owner๊ฐ€ ๋กœ๊ทธ์ธ ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

    1. ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์œผ๋ฉด
    2. ๋กœ๊ทธ์ธ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ๋กœ๊ทธ์ธ์„ ์š”์ฒญํ•œ๋‹ค.
  3. ์œ„์™€ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด Resource Owner๊ฐ€ ๋กœ๊ทธ์ธํ•œ๋‹ค

  4. Resource Server๋Š” ์š”์ฒญ๋ฐ›์€ ์ฃผ์†Œ์— ํฌํ•จ๋œ Client ID๊ฐ’์ด ์žˆ๋Š”์ง€, Client ID์— ๋“ฑ๋ก๋œ Redirect URL๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

    • ๋งŒ์•ฝ ๋‹ค๋ฅด๋ฉด ํ•ด๋‹น ์š”์ฒญ์„ ๋ฌด์‹œํ•œ๋‹ค (์ž‘์—… ๋)
  5. Resource Server๊ฐ€ scope์— ํ•ด๋‹นํ•˜๋Š” ๊ถŒํ•œ๋“ค์„ Client์—๊ฒŒ ๋ถ€์—ฌํ•  ๊ฒƒ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.

    • ์–ด๋– ํ•œ ์ •๋ณด๋“ค์„ Client๊ฐ€ ์š”์ฒญํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ ‘๊ทผํ•˜๋„๋ก ํ—ˆ์šฉํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๋ฌป๋Š” ์ฐฝ์ด ๋œฌ๋‹ค.
  6. Resource Owner๊ฐ€ ํ—ˆ์šฉ ์‹œ, Resource Server๋Š”

    • ์–ด๋–ค Resource Owner(=User)๊ฐ€
    • ์–ด๋–ค Client์—๊ฒŒ
    • ์–ด๋–ค scope์— ๋Œ€ํ•œ ์ž‘์—…์„ ํ—ˆ์šฉํ–ˆ๋Š”์ง€

    ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

5. Resource Server์˜ ์Šน์ธ

Resource Server๋Š” Client๊ฐ€ ๋“ฑ๋ก๋œ Client๊ฐ€ ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ Resource Owner์„ ํ†ตํ•ด์„œ Client์—๊ฒŒ Authorization code๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์„ ๋ฐ›์€ Client๋Š” ์ด ๊ฐ’๊ณผ Client secret์˜ ๊ฐ’์„ Resource Server๋กœ ์ „์†กํ•ด์„œ Client์˜ ์‹ ์›์„ Resource Owner์—๊ฒŒ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ด ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

Resource Owner๊ฐ€ ์Šน์ธํ–ˆ๋‹ค๊ณ  ํ•ด์„œ Resource Server๊ฐ€ ๋ฐ”๋กœ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด ์ฃผ์ง€๋Š” ์•Š๋Š”๋‹ค.

  • Authorization Code๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ 
  • Resource Owner์—๊ฒŒ Authorization Code๋ฅผ ์ „์†กํ•œ๋‹ค
    • HTTP header : Location : https://client/callback?code=3
    • ๋ฆฌ๋‹ค์ด๋ ‰์…˜. ์ฆ‰ Resource Server๊ฐ€ Client์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ https://client/callback?code=3์ด๋ผ๋Š” ์ฃผ์†Œ๋กœ ์ด๋™ํ•˜๋„๋ก ๋ช…๋ นํ•˜๋Š” ๊ฒƒ

์ด ๊ณผ์ •์—์„œ Client๋Š” ์ž๊ธฐ๋„ ๋ชจ๋ฅด๊ฒŒ code=3์ด๋ผ๋Š”, Client์˜ Authorization Code๊ฐ’์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค.


์ด์ œ Client๋Š” Resource Owner๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ , Resource Server๋กœ ์ง์ ‘ ์š”์ฒญํ•œ๋‹ค - ์•„๋ž˜์™€ ๊ฐ™์€ ์ฃผ์†Œ๋กœ

https://resource.server/token?grant_type_authorization_code&code=3&redirect_url=https://client/callback&client_id=1&client_secret=2
  • grant_type_authorization_code : Authorization Code๋ฐฉ์‹์„ ํ†ตํ•ด ์ ‘์†ํ•˜๊ฒ ๋‹ค.
    • 4๊ฐ€์ง€ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜์˜ ๋ฐฉ์‹์ด๋‹ค.
  • code : Authorization Code
  • Redirect URL
  • Client ID
  • Client Secret

์ฆ‰ Authorization Code์™€ Client Secret๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋น„๋ฐ€ ์ •๋ณด๋ฅผ ์ œ์ถœํ•˜๋ฉฐ ์ ‘์†ํ•˜๋Š” ๊ฒƒ


Resource Server๋Š”

  • ์š”์ฒญํ•œ ์ •๋ณด๊ฐ€ Authorization Code์— ํ•ด๋‹นํ•˜๋Š” ์ •๋ณด์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
    • Client ID, Client Secret, Redirect URL ์ด ๋ชจ๋‘ ์™„์ „ํžˆ ์ผ์น˜ํ•  ๋•Œ๋งŒ ๊ทธ ๋‹ค์Œ ๋‹จ๊ณ„(์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰)๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

6. Access Token

OAuth์˜ ํ•ต์‹ฌ์ธ access token์˜ ๊ฐ’์„ ๋ฐœ๊ธ‰ ๋ฐ›๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

5.์—์„œ Client์— ๋Œ€ํ•œ ๋ชจ๋“  ํ™•์ธ์ด ๋๋‚˜๋ฉด ๋“œ๋””์–ด Access Token์„ ๋ฐœ๊ธ‰ํ•ด ์ค€๋‹ค. (=OAuth์˜ ๋ชฉ์ )

์ด๋Š” Resource Server์˜ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ๊ถŒํ•œ์„ ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.


Client์— ๋Œ€ํ•œ ๋ชจ๋“  ํ™•์ธ์ด ๋๋‚˜๋ฉด, Resource Server๋Š” ์ด์ œ Authorization Code๊ฐ’์„ ์ง€์šด๋‹ค. (๊ฐ™์€ ์ธ์ฆ ์ž‘์—…์„ ๋˜ ํ•˜์ง€ ์•Š๋„๋ก)

๊ทธ ๋‹ค์Œ Access Token์„ ๋ฐœ๊ธ‰ํ•ด Client์—๊ฒŒ ์‘๋‹ตํ•ด ์ค€๋‹ค.

Client๋Š” Access Token ์ •๋ณด๋ฅผ ์ €์žฅํ•ด ๋‘๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

Resource Server๋Š” ํ•ด๋‹น Access Token์„ ๋ณด๊ณ 

  • ์–ด๋–ค Resource Owner(User)์— ๋Œ€ํ•œ
  • ์–ด๋–ค ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ์ •๋ณด(scope)๋“ค์„

์ฃผ๋ฉด ๋˜๋Š”์ง€ ํ™•์ธํ•œ ๋‹ค์Œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด ์ค€๋‹ค.

7. API ํ˜ธ์ถœ

API๊ฐ€ ๋ฌด์—‡์ธ์ง€, Access Token์„ ์ด์šฉํ•ด์„œ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ์‚ดํŽด๋ด…๋‹ˆ๋‹ค.

์ด์ œ Client๋Š” Access Token์„ ๊ฐ€์ง€๊ณ  Resource Server์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

์–ด๋–ป๊ฒŒ? Resource Server๊ฐ€ Client์— ๋Œ€ํ•ด ์ •ํ•ด ์ค€ ๋ฐฉ์‹๋Œ€๋กœ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ด ๋ฐฉ์‹์„ API(Application Programming Interface)๋ผ๊ณ  ํ•œ๋‹ค.

API

API๋Š” Client๊ฐ€ Resource Server๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์ ‘์ ์— ์žˆ๋Š” ์กฐ์ž‘์žฅ์น˜์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Google Calendar๋ฅผ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด 'Google Calendar API'๋ผ๊ณ  ๊ตฌ๊ธ€๋ง ํ•ด ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉฐ ๋”ฐ๋ผํ•œ๋‹ค.

์ œ์‹œ๋œ API๋“ค ์ค‘ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์˜ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ, ํ•ด๋‹น API๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Access Token์ด ํ•„์š”ํ•˜๋‹ค.

๊ฐ ์–ธ์–ด/ํ”„๋ ˆ์ž„์›Œํฌ๋งˆ๋‹ค Access Token์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ˆ ์ฐพ์•„์„œ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค.

OAuth Access Token ๊ฐ’์„ ์ง์ ‘ URL์— ๋„ฃ์–ด ์š”์ฒญํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, HTTP Header์— ๋„ฃ์–ด ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹์ด ๋” ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

curl ์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•˜๋ฉด ๋” ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

8. refresh token

Access token์€ ์ˆ˜๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค. Access token์˜ ์ˆ˜๋ช…์ด ๋‹คํ–ˆ์„ ๋•Œ ์ƒˆ๋กœ์šด access token์„ ๋ฐœ๊ธ‰ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์ด refresh token์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Access Token์€ ์ˆ˜๋ช…์ด ์žˆ๋‹ค. ์งง๊ฒŒ๋Š” 1~2์‹œ๊ฐ„, ๊ธธ๊ฒŒ๋Š” 60์ผ ๋“ฑ

Access Token์˜ ์ˆ˜๋ช…์ด ๋๋‚˜๋ฉด Access Token์„ ์žฌ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ,

๊ทธ ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ์ธ์ฆ ๊ณผ์ •์„ ๋‹ค์‹œ ๊ฑฐ์น˜๋ฉด ํž˜๋“  ์ผ์ด๋‹ค (๊ทธ๋ž˜๋„ ํ•„์ˆ˜๋กœ ํ•˜๊ฒŒ ํ•˜๋Š” ์‹œ์Šคํ…œ๋„ ์žˆ๋‹ค)

๋” ์‰ฝ๊ฒŒ Access Token์„ ์žฌ๋ฐœ๊ธ‰๋ฐ›๋Š” ๊ฒƒ์ด refresh token์ด๋‹ค.

๊ฒ€์ƒ‰ํ‚ค์›Œ๋“œ : OAuth 2.0 RFC

(RFC : ์ธํ„ฐ๋„ท ๊ด€๋ จ ๊ธฐ์ˆ ๋“ค์˜ ํ‘œ์ค€์•ˆ)

๋ณดํ†ต์€ 6.์—์„œ Access Token์„ ๋ฐœ๊ธ‰ํ•  ๋•Œ, Refresh Token์„ ํ•จ๊ป˜ ๋ฐœ๊ธ‰ํ•ด ์ค€๋‹ค.

image-20210516004024189

์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ Access Token์˜ ์ˆ˜๋ช…์ด ๋๋‚˜๋ฉด,

ํ•จ๊ป˜ ๋ฐœ๊ธ‰๋ฐ›์€ Refresh Token์„ Authorization Server์— ์ œ์ถœํ•จ์œผ๋กœ์จ Access Token์„ ์žฌ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค.

(๊ฒฝ์šฐ์— ๋”ฐ๋ผ Access Token๊ณผ Refresh Token์„ ๋‘˜ ๋‹ค ์žฌ๋ฐœ๊ธ‰ํ•ด ์ฃผ๊ธฐ๋„ ํ•œ๋‹ค)

9. ์ˆ˜์—…์„ ๋งˆ์น˜๋ฉฐ

์—ฌ๊ธฐ๊นŒ์ง€ ์˜ค์‹œ๋Š๋ผ ๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์•ž์œผ๋กœ ๊ณต๋ถ€ํ• ๋งŒํ•œ ์ฃผ์ œ๋ฅผ ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค!

์ธ์ฆ์ฒด๊ณ„

Federated Identity

: ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€์˜ ์—ฐํ•ฉ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ธ์ฆ์ฒด๊ณ„

(Login with Google ๊ณผ ๊ฐ™์€ ์„œ๋น„์Šค๋“ค)

API ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ง€์‹๋“ค

API๋ฅผ ์ž˜ ๋‹ค๋ฃจ๋Š” ๋ฐ ์ค‘์š”ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹๋“ค

  • Restful API

  • JSON

  • XML