OAuth 2.0

๊ฐœ๋… ์ •๋ฆฌ

๋‚ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ Client, ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ Resource Server, ๋‘ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‘ ์ด์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ Resource Owner๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ Resource Server์—์„œ ์ธ์ฆ์„ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ Authorization Server๋ผ๊ณ  ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์—ฐํ•ฉํ•ด์„œ ์ธ์ฆ์ฒด๊ณ„๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ federated Identity๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

๋ฐฐ๊ฒฝ

Client๊ฐ€ Resource Server(google, facebook ๋“ฑ)์— ์žˆ๋Š” Resource Owner์˜ ๊ณ„์ •์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ด ์žˆ์„๊นŒ? Resource Server์— ๋Œ€ํ•œ Resource Owner์˜ id, pw๋ฅผ ์ œ๊ณต๋ฐ›์œผ๋ฉด ๋” ์ข‹๊ฒ ์ง€๋งŒ ๋ณด์•ˆ ์‹ ๋ขฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ oAuth๊ฐ€ ๋‚˜์™”๋‹ค. oAuth๋ฅผ ์ด์šฉํ•˜๋ฉด, Resource Owner์˜ ์š”์ฒญ์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์„œ๋น„์Šค๊ฐ€ accessToken์ด๋ผ๋Š” ์ผ์ข…์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฐœ๊ธ‰ํ•œ๋‹ค. Client๋Š” accessToken์„ ํ†ตํ•ด Resource Server์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๋ฐฉ์‹์€ ๊ธฐ์กด id, pw๋ฅผ ์ด์šฉํ•œ ๋ฐฉ์‹๋ณด๋‹ค ์ œํ•œ์ ์ธ ์ด์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋“ฑ๋ก

์šฐ์„  Resource Server์˜ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ ค๋ฉด Client๋Š” ๋“ฑ๋ก์„ ํ•ด์•ผํ•œ๋‹ค. ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ์‹์€ ๊ฐ๊ธฐ ๋‹ค๋ฅด์ง€๋งŒ ๊ณตํ†ต์ ์œผ๋กœ ๋ฐ›๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋‹ค.

  • Client ID
  • Client Secret
  • Authorized redirect URIs : Resource server๊ฐ€ Authorized Code ๊ฐ’์„ ์ „๋‹ฌํ•ด์ฃผ๋Š” url. ํ•ด๋‹น url์—์„œ ์š”์ฒญํ•˜๋Š” ๊ฒƒ๋งŒ ์‘๋‹ตํ•จ

 

Resource Owner์˜ ์Šน์ธ

๋“ฑ๋ก ํ›„์— Resource Server์™€ Client๋Š” ๋“ฑ๋ก ์‹œ์— ์‚ฌ์šฉํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋‹ค.

Resource Owner๊ฐ€ Client๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ Resource Server๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๋ฉด, Client๋Š” Resource Owner์— ์ธ์ฆ์„ ์œ„ํ•œ UI๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ํ•ด๋‹น UI๋ฅผ ํ†ตํ•ด Client๋Š” Resource Server์— Client_id, ํ•„์š” ๊ธฐ๋Šฅ, redirected_url ๋“ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์—ฐ๋™ํ•œ๋‹ค.

Resource Server๋Š” ํ•ด๋‹น ์š”์ฒญ์„ ๋ฐ›๊ณ , Resource Owner์—๊ฒŒ ๋กœ๊ทธ์ธ์„ ์š”์ฒญํ•œ๋‹ค. ๊ทธ ํ›„, Client Id์™€ redirect URL์„ ์š”์ฒญ์—์„œ์˜ ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ๊ฐ™์œผ๋ฉด Resource Owner์—๊ฒŒ ํ—ˆ์šฉํ•  ์ง€๋ฅผ ๋ฌผ์–ด๋ณธ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด Resource Server๋Š” ์–ด๋–ค user์— ๋Œ€ํ•ด ์–ด๋–ค Client๊ฐ€ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์‘๋‹ต์„ ์ œ๊ณตํ•œ๋‹ค. (์‘๋‹ต์€ ๋‹ค์Œ ์ฑ•ํ„ฐ์—)

 

Resource Server์˜ ์Šน์ธ

authorization code(์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ)๋ฅผ Resource Server๊ฐ€ Resource Owner์—๊ฒŒ ์‘๋‹ต์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

Resource Owner๋Š” ์‘๋‹ต์—์„œ์˜ ์ฃผ์†Œ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉด์„œ, Resource Server๊ฐ€ ์ œ๊ณตํ•œ authorization code๋ฅผ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด์ œ Client๋Š” Resource Owner๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ , ๋ฐ”๋กœ Resource Server๋กœ ์ ‘์†ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ, authorization code, redirect_url, client_id, client_secret์„ ์ „์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์— Resource Server๋Š” ์ฃผ์–ด์ง„ ๊ฐ’๋“ค์„ ๋น„๊ตํ•˜์—ฌ ํ•ด๋‹น ์ •๋ณด๊ฐ€ ์ ํ•ฉํ•œ์ง€๋ฅผ ํŒ๋‹จํ•œ๋‹ค.

 

Access Token ๋ฐœ๊ธ‰

Resource Server๊ฐ€ authrization code ๊ฐ’์„ ์–‘์ชฝ์—์„œ ์ง€์›Œ๋ฒ„๋ฆฌ๊ณ  accessToken ๊ฐ’์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค. accessToken์„ Clientํ•œํ…Œ ๋ณด๋‚ด์ฃผ๋ฉด Client๊ฐ€ ํ•ด๋‹น ํ† ํฐ์„ ์ €์žฅํ•œ๋‹ค.

์ด์ œ accessToken์œผ๋กœ Resource Server์— ์ ‘๊ทผํ•˜๋ฉด ํ•ด๋‹น (Client, ResourceOwner, ๊ธฐ๋Šฅ)์— ๋Œ€ํ•ด ๋ฐ”๋กœ ์ธ์ฆ์ด ๋œ๋‹ค. ๋ฐฉ์‹์€ ๋‹ค์Œ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • query๋กœ accessToken ๋„˜๊ธฐ๊ธฐ
    • ๋…ธ์ถœ์„ ๋ง‰๊ธฐ ์œ„ํ•ด https(TLS)๋ฅผ ๋ฐ˜๋“œ์‹œ ์ด์šฉํ•ด์•ผํ•จ
  • Bearer Authentication ์ด์šฉํ•ด์„œ header๋กœ ๋„˜๊ธฐ๊ธฐ
  • form-encoded body parameter
    • ๋ณด์•ˆ์ƒ ์ด์œ ๋กœ ๊ถŒ์žฅ x
  • URI Query Parameter
    • ๋ณด์•ˆ์ƒ ์ด์œ ๋กœ ๊ถŒ์žฅ x

 

Refresh Token ๋ฐœ๊ธ‰

accessToken์€ ์ผ๋ฐ˜์ ์œผ๋กœ 1์‹œ๊ฐ„ ์ •๋„์˜ ์ˆ˜๋ช…์ด ์žˆ๋‹ค. ํ•ด๋‹น ์ˆ˜๋ช…์ด ๋๋‚˜๋ฉด ๋”์ด์ƒ ์ธ์ฆ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค์‹œ accessToken์„ ๋ฐ›์•„์•ผํ•œ๋‹ค.

๋ณดํ†ต accessToken๊ณผ ํ•จ๊ป˜ refreshToken์„ ๋ฐœ๊ธ‰ํ•œ ํ›„, accessToken์˜ ์ˆ˜๋ช…์ด ๋‹ค๋˜๋ฉด refreshToken์œผ๋กœ accessToken์„ ๋‹ค์‹œ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค.

 

์ฐธ๊ณ 

https://opentutorials.org/module/3668

 

WEB2 - OAuth 2.0

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

opentutorials.org

 

๋ฐ˜์‘ํ˜•

'์›น (WEB) > ๊ณต๋ถ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Refresh Token  (0) 2021.07.22
Token ์ €์žฅ ์œ„์น˜  (0) 2021.07.22
React-query :: api fetch ์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ  (0) 2021.07.10
React-query :: Query Invalidation  (0) 2021.07.10
React-query :: Mutations  (0) 2021.07.10