๊ฐœ๋ฐœ ์ง€์‹/WEB ์ง€์‹

๐ŸŒ OAuth 2.0 ๊ฐœ๋… - ๊ทธ๋ฆผ์œผ๋กœ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์„ค๋ช…

์ธํŒŒ_ 2021. 12. 5. 20:13

OAuth-2.0-๊ฐœ๋…

OAuth๋ž€?

OAuth-2.0-๊ฐœ๋…

์›น ์„œํ•‘์„ ํ•˜๋‹ค ๋ณด๋ฉด Google๊ณผ Facebook ๋“ฑ์˜ ์™ธ๋ถ€ ์†Œ์…œ ๊ณ„์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ„ํŽธํžˆ ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ,

์—ฐ๋™๋˜๋Š” ์™ธ๋ถ€ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ Facebook ๋ฐ Twitter ๋“ฑ์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, Google๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด API๋ฅผ ํ†ตํ•ด ์—ฐ๋™๋œ ๊ณ„์ •์˜ Google Calendar ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

์ด ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์ด ๋ฐ”๋กœ OAuth๋‹ค.

OAuth์— ๋Œ€ํ•œ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

OAuth 2.0์€ 1.0์—์„œ ์•Œ๋ ค์ง„ ๋ณด์•ˆ ๋ฌธ์ œ ๋“ฑ์„ ๊ฐœ์„ ํ•œ ๋ฒ„์ ผ์ด๋‹ค.

OAuth ๊ตฌ์„ฑ ์š”์†Œ

๊ตฌ๋ถ„ ์„ค๋ช…
Resource Owner ์›น ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋ ค๋Š” ์œ ์ €, ์ž์›(๊ฐœ์ธ์ •๋ณด)์„ ์†Œ์œ ํ•˜๋Š” ์ž, ์‚ฌ์šฉ์ž

'Resource' ๋Š” ๊ฐœ์ธ์ •๋ณด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
Client ์ž์‚ฌ ๋˜๋Š” ๊ฐœ์ธ์ด ๋งŒ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„

ํด๋ผ์ด์–ธํŠธ ๋ผ๋Š” ์ด๋ฆ„์€ client๊ฐ€ Resource server์—๊ฒŒ ํ•„์š”ํ•œ ์ž์›์„ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ตํ•˜๋Š” ๊ด€๊ณ„์—ฌ์„œ ๊ทธ๋ ‡๋‹ค.
Authorization Server ๊ถŒํ•œ์„ ๋ถ€์—ฌ(์ธ์ฆ์— ์‚ฌ์šฉํ•  ์•„์ดํ…œ์„ ์ œ๊ณต์ฃผ๋Š”)ํ•ด์ฃผ๋Š” ์„œ๋ฒ„๋‹ค.

์‚ฌ์šฉ์ž๋Š” ์ด ์„œ๋ฒ„๋กœ ID, PW๋ฅผ ๋„˜๊ฒจ Authorization Code๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
Client๋Š” ์ด ์„œ๋ฒ„๋กœ Authorization Code์„ ๋„˜๊ฒจ Token์„ ๋ฐ›๊ธ‰ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
Resource Server ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (Google, Facebook, Kakao ๋“ฑ) ํšŒ์‚ฌ ์„œ๋ฒ„  

Client๋Š” Token์„ ์ด ์„œ๋ฒ„๋กœ ๋„˜๊ฒจ ๊ฐœ์ธ์ •๋ณด๋ฅผ ์‘๋‹ต ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
Access Token ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์„ Resource Owner๊ฐ€ ์ธ๊ฐ€ํ•˜์˜€์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ž๊ฒฉ์ฆ๋ช…
Refresh Token Client๋Š” Authorization Server๋กœ ๋ถ€ํ„ฐ access token(๋น„๊ต์  ์งง์€ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ๊ฐ€์ง) ๊ณผ refresh token(๋น„๊ต์  ๊ธด ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ๊ฐ€์ง)์„ ํ•จ๊ป˜ ๋ถ€์—ฌ ๋ฐ›๋Š”๋‹ค.

access token์€ ๋ณด์•ˆ์ƒ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์ด ์งง๊ธฐ ๋•Œ๋ฌธ์— ์–ผ๋งˆ ์ง€๋‚˜์ง€ ์•Š์•„ ๋งŒ๋ฃŒ๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธ์„ ๋‹ค์‹œ ์‹œ๋„ํ•ด์•ผํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ refresh token์ด ์žˆ๋‹ค๋ฉด access token์ด ๋งŒ๋ฃŒ๋  ๋•Œ refresh token์„ ํ†ตํ•ด access token์„ ์žฌ๋ฐœ๊ธ‰ ๋ฐ›์•„ ์žฌ ๋กœ๊ทธ์ธ ํ•  ํ•„์š”์—†๊ฒŒ๋” ํ•œ๋‹ค.

OAuth-2.0-๊ฐœ๋…

์ง์ ‘ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ, ์†Œ์…œ ๋ฏธ๋””์–ด๋กœ ๋กœ๊ทธ์ธ์„ ํ•  ๊ฒฝ์šฐ,

client(๊ฐœ์ธ ์„œ๋น„์Šค)๋Š” Resource Owner(์‚ฌ์šฉ์ž)๋ฅผ ๋Œ€์‹ ํ•ด ๋กœ๊ทธ์ธ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ Resource Server(kakao, naver, ...)์—์„œ ์–ป์–ด ์„œ๋กœ ๋น„๊ตํ•ด ์œ ํšจ์„ฑ์„ ํŒ๋‹จํ•œ๋‹ค.

client๊ฐ€ ์œ ์ €์˜ (๋กœ๊ทธ์ธ)์ •๋ณด/์ž์›(resource)์„ Resource Server์— ์š”์ฒญํ•ด ๋Œ€์‹  ๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋ฅผ ์œ„ํ•ด์„œ client๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋“ค์„ ๊ฐ€์ง„๋‹ค.

  1. Resource Owner๋กœ ๋ถ€ํ„ฐ ๋™์˜(ํ—ˆ์šฉ)
  2. Resource Server๋กœ ๋ถ€ํ„ฐ client ์‹ ์›ํ™•์ธ

์™œ ๊ทธ๋ž˜์•ผ ํ• ๊นŒ?
๊ฐ๊ฐ์˜ ์ž…์žฅ์—์„œ ์ƒ๊ฐํ•ด๋ณด์ž.

 

Resource Owner(์œ ์ €) ์ž…์žฅ

์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— client๊ฐ€ ์–ด๋–ค ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜๋Š”์ง€, ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค.

๋‚˜์œ ๋งˆ์Œ์„ ๊ฐ€์ง€๋ฉด ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋งˆ๊ตฌ์žก์ด๋กœ ์•…์šฉํ• ์ˆ˜ ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ client๋Š” Resource Owner์˜ ๋™์˜๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

 

Resource Server(kakao) ์ž…์žฅ

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ผ์„ ๋Œ€์‹  ํ•ด์ฃผ๋Š” ์‚ฌ๋žŒ์ด ์ •๋ง ๊ทธ ์‚ฌ๋žŒ์ผ์ง€ ๊ถ๊ธˆํ•  ์ˆ˜ ์žˆ๋‹ค.
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Resource Owner์˜ ์ผ์„ ์ˆ˜ํ–‰ ํ•ด์ฃผ๋Š” client๊ฐ€ ์ •๋ง ๊ทธ client์ผ๊นŒ ํ•˜๋Š” ๋ฌผ์Œ์ด ์žˆ๋‹ค.

์ด๋Ÿฐ ์˜๋ฏธ์—์„œ Resource Server๋Š” Resource Owner์˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด client๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐ’(code)๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.


OAuth ์„œ๋น„์Šค ๋“ฑ๋กํ•ด๋ณด๊ธฐ (๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ)

OAuth-2.0-๊ฐœ๋…

 

callbackURL ๋ฐ ๋„ค์ด๋ฒ„๋กœ ์š”์ฒญํ•  ์ •๋ณด(scope) ์„ค์ •ํ•˜๊ธฐ

OAuth-2.0-๊ฐœ๋…
OAuth-2.0-๊ฐœ๋…

 

๋“ฑ๋ก์„ ์™„๋ฃŒํ•˜๋ฉด ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ ์•„์ด๋””์™€ ๋น„๋ฒˆ ์ •๋ณด๊ฐ€ ๋‚˜์˜จ๋‹ค.

OAuth-2.0-๊ฐœ๋…

 

Client ID, Client Secret , Authorized redirect URIs๋Š” ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ๋ฐ›๊ฒŒ ๋˜๋Š” ํ•„์ˆ˜ ์š”์†Œ๋กœ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

OAuth-2.0-๊ฐœ๋…

Client ID

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(์„œ๋น„์Šค)์„ ์‹๋ณ„ํ•˜๋Š” ์‹๋ณ„์žID๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, Resource Server ์ž…์žฅ์—์„œ ์–ด๋–ค ์„œ๋น„์Šค์—๊ฒŒ ์ œ๊ณตํ•  ๊ฒƒ ์ธ์ง€ ๊ตฌ๋ถ„ํ•˜๋Š” ID๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Client Secret

  • Client ID์— ๋Œ€ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋ฉด ์•ˆ๋œ๋‹ค.
  • ID์˜ PASSWORD๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

Authorized redirect URIs

  • Resource Server๋งŒ ๊ฐ–๋Š” ์ •๋ณด๋กœ, client์— ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋‚˜์ค‘์— Authorized code๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํ†ต๋กœ๋‹ค.
  • ๋‚˜์ค‘์— client <-> Resource Server ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์—์„œ ์ด redirect URIs๋„ ์ฒดํฌ๋˜๋ฉฐ ํ•ด๋‹น์ฃผ์†Œ๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ Resource Server๋Š” ํ•ด๋‹น client๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ•œ๋‹ค.
  • ์ฆ‰, ์˜ˆ๋ฅผ๋“ค์–ด ๋„ค์ด๋ฒ„ ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ์ •๋ณด๋ฅผ ์ฝœ๋ฐฑํ•  ์ฃผ์†Œ๋ฅผ ์ ๋Š” ๊ณณ์ด๋‹ค.

scope

  • Resource Server์—์„œ ์‚ฌ์ „์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ฏธ๋ฆฌ ์ •์˜ํ•œ ๊ธฐ๋Šฅ
  • ๊ธ€ ์ž‘์„ฑํ•˜๊ธฐ, ID์•Œ๊ธฐ, Email ์•Œ๊ธฐ, ์บ˜๋ฆฐ๋” ์ผ์ • ์ž…๋ ฅํ•˜๊ธฐ ๋“ฑ๋“ฑ
  • ํŽ˜์ด์Šค๋ถ์ด๋“  ๊ตฌ๊ธ€์ด๋“  ๋กœ๊ทธ์ธ ๋˜์—ˆ๋‹ค๋ฉด, ๊ทธ ์„œ๋น„์Šค ์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ

scope


Resource owner ์Šน์ธ๊ณผ์ •

๊ฐ•์˜์—์„  ์ดํ•ด๋ฅผ ์ข€๋” ์‰ฝ๊ฒŒ ๋•๊ธฐ ์œ„ํ•ด Resource Server์™€ Authorization Server์„ ํ•ฉ์ณ์„œ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.

 

1. ์‚ฌ์šฉ์ž(Resource Owner)๋Š” ์„œ๋น„์Šค(client)๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•œ๋‹ค.

2. ๊ทธ๋Ÿผ ์„œ๋น„์Šค(client)๋Š” ์‚ฌ์šฉ์ž(Resource Owner)์—๊ฒŒ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•˜๊ฒŒ ๋œ๋‹ค. ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž๋Š” "ํŽ˜์ด์Šค๋ถ/๊ตฌ๊ธ€ ์œผ๋กœ ๋กœ๊ทธ์ธ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค.

OAuth-2.0-๊ฐœ๋…

 

 

3. ๋งŒ์ผ ์‚ฌ์šฉ์ž๊ฐ€ Login with Facebook ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฒŒ ๋˜๋ฉด, ํŠน์ •ํ•œ url ์ด ํŽ˜์ด์Šค๋ถ ์„œ๋ฒ„์ชฝ์œผ๋กœ ๋ณด๋‚ด์ง€๊ฒŒ ๋œ๋‹ค.

OAuth-2.0-๊ฐœ๋…
OAuth-2.0-๊ฐœ๋…

 

๋ธŒ๋ผ์šฐ์ € ์‘๋‹ต(response) ํ—ค๋”๋ฅผ ํ™•์ธํ•˜๋ฉด ๋‹ค์Œ url๋‚ด์šฉ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

OAuth-2.0-๊ฐœ๋…

https://resource.server/?client_id=1&scope=B,C&redirect_uri=https://client/callback

์ด๋Š”, ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ํŽ˜์ด์Šค๋ถ์œผ๋กœ ์ด๋™ํ•ด์„œ ๋กœ๊ทธ์ธ์„ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š”๋ฐ,

์ € ๋งํฌ๊ฐ€ ๋Œ€์‹  ๋กœ๊ทธ์ธ์œผ๋กœ ์ด๋™ ํ•˜๊ฒŒ๋” ๋„์™€์ค€๋‹ค.

 

๊ตฌ์ฒด์ ์œผ๋กœ ์œ„์˜ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž

์ฝ”๋“œ๋ฅผ ๋‚˜๋ˆ„์–ด ์„ค๋ช…ํ•ด๋ณด์ž๋ฉด,

https://resource.server/? # ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„(๋„ค์ด๋ฒ„, ์นด์นด์˜ค ์‚ฌ์ดํŠธ url)
client_id=1 # ์–ด๋–ค client์ธ์ง€๋ฅผ id๋ฅผ ํ†ตํ•ด Resouce Owner์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๋ถ€๋ถ„
&scope=B,C # Resource Owner๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ, ๋‹ฌ๋ฆฌ ๋งํ•ด client๊ฐ€ ์ž์‹  ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋Š” Resource Server ๊ธฐ๋Šฅ์„ ํ‘œํ˜„ํ•œ ๋ถ€๋ถ„
&redirect_uri=https://client/callback # ๊ฐœ๋ฐœ์ž ํ™ˆํŽ˜์ด์ง€์— ์„œ๋น„์Šค ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์‘๋‹ต ์ฝœ๋ฐฑ.

ํ–ฅํ›„ redirect_uri ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด์„œ Resource Server๋Š” client์—๊ฒŒ ์ž„์‹œ๋น„๋ฐ€๋ฒˆํ˜ธ์ธ Authorization code๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

 

4. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ๋ณด๋‚ธ ์„œ๋น„์Šค ์ •๋ณด์™€, ๋ฆฌ์†Œ์Šค ๋กœ๊ทธ์ธ ์„œ๋ฒ„์— ๋“ฑ๋ก๋œ ์„œ๋น„์Šค ์ •๋ณด๋ฅผ ๋น„๊ตํ•œ๋‹ค.

OAuth-2.0-๊ฐœ๋…

 

 

4.1 ํ™•์ธ์ด ์™„๋ฃŒ๋˜๋ฉด, Resource Server๋กœ ๋ถ€ํ„ฐ ์ „์šฉ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค.

OAuth-2.0-๊ฐœ๋…
OAuth-2.0-๊ฐœ๋…

 

 

5. ID/PW๋ฅผ ์ ์–ด์„œ ๋กœ๊ทธ์ธ์„ ํ•˜๊ฒŒ๋˜๋ฉด, client๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ธฐ๋Šฅ(scope)์— ๋Œ€ํ•ด Resource Owner์˜ ๋™์˜(์Šน์ธ)์„ ์š”์ฒญํ•œ๋‹ค.

OAuth-2.0-๊ฐœ๋…
OAuth-2.0-๊ฐœ๋…

์œ„ ์ด๋ฏธ์ง€์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

"c9users.io๋ผ๋Š” client(์„œ๋น„์Šค,application)๋Š” Resoure Owner๋ฅผ ๋Œ€์‹ ํ•ด ํ•ด๋‹น ๊ธฐ๋Šฅ(scope)๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋™์˜ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?"

๋™์˜(Allow)๋ฅผ ๋ˆ„๋ฅด๋Š” ๊ฒƒ์€ Resoure Owner๋Š” Client๊ฐ€ ํ•ด๋‹น ๊ธฐ๋Šฅ ์‚ฌ์šฉ์— ์œ„์ž„(delegation)ํ–ˆ๋‹ค๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

OAuth-2.0-๊ฐœ๋…

 

 

5.1 Resource Owner๊ฐ€ Allow ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Resource Owner๊ฐ€ ๊ถŒํ•œ์„ ์œ„์ž„ํ–ˆ๋‹ค๋Š” ์Šน์ธ์ด Resource Server ์— ์ „๋‹ฌ๋œ๋‹ค. 

OAuth-2.0-๊ฐœ๋…

์ด๋กœ์จ Resource Sever๊ฐ€ ๊ฐ–๋Š” ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. Client Id : Resource Owner์™€ ์—ฐ๊ฒฐ๋œ client๊ฐ€ ๋ˆ„๊ตฐ์ง€
  2. Client Secret: Resource Owner์™€ ์—ฐ๊ฒฐ๋œ client์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ
  3. Redirect URL : (์ง„์งœ)client์™€ ํ†ต์‹ ํ•  ํ†ต๋กœ
  4. user id : client์™€ ์—ฐ๊ฒฐ๋œ Resource Owner์˜ id
  5. scope : client๊ฐ€ Resource Owner ๋Œ€์‹ ์— ์‚ฌ์šฉํ•  ๊ธฐ๋Šฅ๋“ค

 

 

6. ํ•˜์ง€๋งŒ, ์ด๋ฏธ Owner๊ฐ€ Client์—๊ฒŒ ๊ถŒํ•œ ์Šน์ธ์„ ํ–ˆ๋”๋ผ๋„ ์•„์ง Server๊ฐ€ ํ—ˆ๋ฝํ•˜์ง€ ์•Š์•˜๋‹ค. ๋”ฐ๋ผ์„œ, Resource Server ๋„ Client์—๊ฒŒ ๊ถŒํ•œ ์Šน์ธ์„ ํ•˜๊ธฐ์œ„ํ•ด Authorization code๋ฅผ Redirect URL์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ตํ•˜๊ณ 

7. ๋‹ค์‹œ ์‚ฌ์šฉ์ž๋Š” ๊ทธ๋Œ€๋กœ Client์—๊ฒŒ ๋‹ค์‹œ ๋ณด๋‚ธ๋‹ค.

OAuth-2.0-๊ฐœ๋…
OAuth-2.0-๊ฐœ๋…

 

์ด๋ฅผ ํ†ตํ•ด, client๋Š” Resource Server๊ฐ€ ๋ณด๋‚ธ Authorization code, "code=3"๋ฅผ Resource Ownerํ†ตํ•ด ๋ฐ›๋Š”๋‹ค.

OAuth-2.0-๊ฐœ๋…

 

 

8. ์ด์ œ Client๊ฐ€ Resource Server์—๊ฒŒ ์ง์ ‘ url(ํด๋ผ์ด์–ธ๋“œ ์•„์ด๋””, ๋น„๋ฒˆ, ์ธ์ฆ์ฝ”๋“œ ...๋“ฑ)์„ ๋ณด๋‚ธ๋‹ค. 

OAuth-2.0-๊ฐœ๋…
OAuth-2.0-๊ฐœ๋…

 

 

9. ๊ทธ๋Ÿผ Resource Server๋Š” Client๊ฐ€ ์ „๋‹ฌํ•œ ์ •๋ณด๋“ค์„ ๋น„๊ตํ•ด์„œ ์ผ์น˜ํ•œ๋‹ค๋ฉด, Access Token์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ œ ํ•„์š”์—†์–ด์ง„ Authorization code๋Š” ์ง€์šด๋‹ค.

10. ๊ทธ๋ ‡๊ฒŒ ํ† ํฐ์„ ๋ฐ›์€ Client๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ตœ์ข…์ ์œผ๋กœ ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๊ณ  ์‘๋‹ตํ•œ๋‹ค.

OAuth์˜ ๋ชฉ์ ์€ ์ตœ์ข…์ ์œผ๋กœ Access Token์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

OAuth-2.0-๊ฐœ๋…
OAuth-2.0-๊ฐœ๋…

 

 

11 ~ 14. ์ด์ œ client๋Š” Resource server์˜ api๋ฅผ ์š”์ฒญํ•ด Resource Owner์˜ ID ํ˜น์€ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

OAuth-2.0-๊ฐœ๋…
OAuth-2.0-๊ฐœ๋…

 

 

15. Access Token์ด ๊ธฐ๊ฐ„์ด ๋งŒ๋ฃŒ๋˜์–ด 401์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด, Refresh Token์„ ํ†ตํ•ด  Access Token์„ ์žฌ๋ฐœ๊ธ‰ ํ•œ๋‹ค.

OAuth-2.0-๊ฐœ๋…

Refresh Token

Refresh Token์˜ ๋ฐœ๊ธ‰ ์—ฌ๋ถ€์™€ ๋ฐฉ๋ฒ• ๋ฐ ๊ฐฑ์‹  ์ฃผ๊ธฐ ๋“ฑ์€ OAuth๋ฅผ ์ œ๊ณตํ•˜๋Š” Resource Server๋งˆ๋‹ค ์ƒ์ดํ•˜๋‹ค.
Access Token์€ ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์ด ์žˆ์œผ๋ฉฐ, ๋งŒ๋ฃŒ๋œ Access Token์œผ๋กœ API๋ฅผ ์š”์ฒญํ•˜๋ฉด 401 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
Access Token์ด ๋งŒ๋ฃŒ๋˜์–ด ์žฌ๋ฐœ๊ธ‰๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ์„œ๋น„์Šค ์ด์šฉ์ž๊ฐ€ ์žฌ ๋กœ๊ทธ์ธํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ๋ฒˆ๊ฑฐ๋กœ์šธ ๊ฒƒ์ด๋‹ค.

๋ณดํ†ต Resource Server๋Š” Access Token์„ ๋ฐœ๊ธ‰ํ•  ๋•Œ Refresh Token์„ ํ•จ๊ป˜ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
Client๋Š” ๋‘ Token์„ ๋ชจ๋‘ ์ €์žฅํ•ด๋‘๊ณ , Resource Server์˜ API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” Access Token์„ ์‚ฌ์šฉํ•œ๋‹ค.
Access Token์ด ๋งŒ๋ฃŒ๋˜์–ด 401 ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, Client๋Š” ๋ณด๊ด€ ์ค‘์ด๋˜ Refresh Token์„ ๋ณด๋‚ด ์ƒˆ๋กœ์šด Access Token์„ ๋ฐœ๊ธ‰๋ฐ›๊ฒŒ ๋˜์–ด ๋กœ๊ทธ์ธ ์ธ์ฆ์„ ์œ ์ง€ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์นด์นด์˜ค OAuth ์ธ์ฆ ์‹ค์Šตํ•ด๋ณด๊ธฐ (Node.js)

 

[NODE] ๐Ÿ“š ์นด์นด์˜ค ๋กœ๊ทธ์ธ Passport โœˆ๏ธ ๊ตฌํ˜„

์„ ํ–‰ ํ•™์Šต [NODE] ๐Ÿ“š Passport ๋ชจ๋“ˆ (๊ทธ๋ฆผ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ณผ์ • ๐Ÿ’ฏ ์ดํ•ดํ•˜์ž) Passport Passport๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•ด์ฃผ๋Š” ์—ฌ๊ถŒ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค. ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ์€ ์ง์ ‘

inpa.tistory.com