Skip to content

Latest commit

ย 

History

History
234 lines (156 loc) ยท 15 KB

oauth.md

File metadata and controls

234 lines (156 loc) ยท 15 KB

๐Ÿ”‘ OAuth

๐Ÿ“š table of Contents

OAuth ๋ž€?

OAuth 1.0 Vs. 2.0

OAuth 1.0

OAuth 2.0

๐Ÿ”‘ Oauth๋ž€?

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

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

oauth๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ํšŒ์› ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์—ฌ๊ธฐ์— ์•ˆ์ „ํ•˜๊ฒŒ์˜ ์ฃผ์ฒด๋Š”, ํšŒ์› ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์ฒด, ์šฐ๋ฆฌ์˜ ๊ณ ๊ฐ์ด๋‹ค. ์ฆ‰, ๊ณ ๊ฐ์ด ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ์ •๋ณด๋ฅผ ์šฐ๋ฆฌ ์„œ๋น„์Šค์— ๊ฑด๋„ค์ฃผ๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ณ ๊ฐ์ด ์ž์‹ ์˜ ๋„ค์ด๋ฒ„ ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์šฐ๋ฆฌ ์„œ๋น„์Šค์— ์•Œ๋ ค์ฃผ์ง€ ์•Š์•„๋„, ๋„ค์ด๋ฒ„์— ์žˆ๋Š” ๊ณ ๊ฐ์˜ ์ •๋ณด๋ฅผ ์šฐ๋ฆฌ ์„œ๋น„์Šค์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

ํ•˜์ง€๋งŒ oauth๋Š” ์ธ์ฆ authentication๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ 'ํ—ˆ๊ฐ€ Authorization' ๋˜ํ•œ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— OAuth ์ธ์ฆ์„ ์ง„ํ–‰ํ•  ๋•Œ ํ•ด๋‹น ์„œ๋น„์Šค ์ œ๊ณต์ž๋Š” '์ œ 3์ž~' ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. (x, ํ‹€๋ฆฌ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ)

์ผ๋ฐ˜์ ์ธ ๋กœ๊ทธ์ธ๊ณผ OAuth๋ฅผ ์ด์šฉํ•œ ๋กœ๊ทธ์ธ์˜ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

Authentication/์ธ์ฆ

  • ์œ ์ €๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ

Authorization/์ธ๊ฐ€

  • ์œ ์ €์— ๋Œ€ํ•œ ์ •๋ณด ๊ถŒํ•œ์„ ํ—ˆ๋ฝํ•˜๋Š” ๊ฒƒ

---

*Oauth 2.0 is not an authentication protocol

=> OAuth๋Š” authentication protocol์˜ ๋‚ด๋ถ€์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์‹ค์ œ๋กœ OAuth๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๊ฒŒ authentication์— ๊ด€ํ•ด์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‹ค์ œ๋กœ user์˜ authentication ์ฆ๋ช…๋˜๋ฉด id_token์ด ๋ฐœ๊ธ‰๋˜๊ณ  id_token๊ณผ ๋ฐœ๊ธ‰ ๋ฐ›์€ id_token์„ ์ด์šฉํ•˜์—ฌ access_token ๋ฐœ๊ธ‰ ์š”์ฒญ์„ ์ง„ํ–‰ํ•œ๋‹ค.

ID Token์€ ๋ฌด์—‡์ธ๊ฐ€.

ID_token์€ user๊ฐ€ authenticate๋๋‹ค๋Š” ๊ฒƒ์„ ์ฆ๋ช…ํ•œ๋‹ค. ID ํ† ํฐ์€ ์ธํ„ฐ๋„ท์—์„œ id ์ฃผ์žฅ์„ ๊ณต์œ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋œ openID Connect(OIDC, OIDC๋Š” JWT toekn์„ ์ด์šฉํ•œ๋‹ค.)์˜ ํ‘œ์ค€ํ™”๋œ ๊ธฐ๋Šฅ์ด๋‹ค.

์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•˜๊ณ  id ํ† ํฐ์„ ์–ป๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ '์„œ๋ฒ„'ํ๋ฆ„๊ณผ '์•”์‹œ์ 'ํ๋ฆ„์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋” ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€๋ฉด ๋” ๋งŽ์€ ๋‚ด์šฉ์ด ์žˆ์ง€๋งŒ ๊ฒฐ๋ก ์€ openID Connect๋Š” OAuth2.0์˜ ๊ฐ„๋‹จํ•œ ์‹ ์› ํ™•์ธ ์ตœ์ƒ์œ„ ๋ ˆ์ด์–ด์˜ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

ํ๋ฆ„์€ ์•„๋ž˜์—์„œ ๋ฐฐ์šธ

  • Authorization code : code
  • Implicit : id_token, id_token token
  • Hybrid code id_token, code token, code id_token token ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

OpenId Vs. OAuth2.0

OAuth 2.0์ด ์ž์›์˜ ์ ‘๊ทผ๊ณผ ๊ณต์œ ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ผ๋ฉด, OIDC๋Š” ์ธ์ฆ์— ๊ด€ํ•œ ๊ฒƒ์ด๋‹ค. OIDC์˜ ๋ชฉ์ ์€ ํ•œ ๋ฒˆ์˜ ๋กœ๊ทธ์ธ์œผ๋กœ ์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. OIDC๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์›น์‚ฌ์ดํŠธ์— ๋กœ๊ทธ์ธํ•  ๋•Œ๋งˆ๋‹ค, ์‚ฌ์šฉ์ž๋Š” OIDC ์‚ฌ์ดํŠธ(๊ตฌ๊ธ€, ํŽ˜์ด์Šค๋ถ, ์นด์นด์˜ค ๋“ฑ๋“ฑ)์˜ ๋กœ๊ทธ์ธํ™”๋ฉด์œผ๋กœ ์ „ํ™˜๋˜๊ณ  ๋กœ๊ทธ์ธ ํ›„์— ์‚ฌ์šฉํ•˜๋ ค๋˜ ์›น์ด๋‚˜ ์•ฑ์œผ๋กœ ๋Œ์•„์˜ค๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋งŒ์•ฝ์— ๋‚ด๊ฐ€ ๊ตฌ๊ธ€๊ณ„์ •์„ ์ด์šฉํ•˜์—ฌ OAuth2.0์— ๋กœ๊ทธ์ธ ํ•˜๋ฉด ๊ทธ ๋•Œ OIDC๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌ๊ธ€์— ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๊ณ  OAuth์— ๋‚˜์˜ ์ •๋ณด์— ๊ถŒํ•œ์„ ์œ„์ž„ํ•˜๋ฉด ๊ตฌ๊ธ€์€ ๋‹ค์‹œ OAuth์—๊ฒŒ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ณ  ์ธ๊ฐ€๊ฐ€ ์Šน์ธ๋œ๋‹ค. ์ด ์ •๋ณด๋Š” JWT๋ฅผ ์ด์šฉํ•ด์„œ ๋ฆฌํ„ด๋˜๊ณ  Client๋Š” ์—‘์„ธ์Šค ํ† ํฐ๊ณผ ์š”์ฒญํ–ˆ๋‹ค๋ฉด id_token์„ ๋ฆฌํ„ด๋ฐ›๊ฒŒ๋œ๋‹ค.




OAuth 1.0๊ณผ 2.0 ์ฐจ์ด์ 

ํ•ญ๋ชฉ OAuth 1.0 OAuth 2.0
์—ญํ•  User
Consumer
Service Provider
Resource Owner
Client
Resource Server
Authorization Server
ํ† ํฐ Request Token
Access Token
Access Token
Refresh Token
open API ํ˜ธ์ถœ ๋ฐ ๋ณด์•ˆ ์„œ๋ช… HTTPS ๊ธฐ๋ณธ
์„œ๋ช…:Resource Server๊ฐ€ ๋ณ„๋„๋กœ ์„œ๋ช…์„ ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ
์œ ํšจ๊ธฐ๊ฐ„ Access Token ์œ ํšจ๊ธฐ๊ฐ„ ์—†์Œ Access Token ์œ ํšจ๊ธฐ๊ฐ„ ๋ถ€์—ฌ Refresh Token์—์„œ ๋ฐฐ์šด ๋‚ด์šฉ ๋– ์˜ฌ๋ฆฌ์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.




๐Ÿ”‘ OAuth 1.0

OAuth1.0 ๋Œ€ํ‘œ ์šฉ์–ด

์šฉ์–ด ์„ค๋ช…
User Service Provider์— ๊ณ„์ •์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด์„œ, Consumer๋ฅผ ์ด์šฉํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž(~๋กœ ๋กœ๊ทธ์ธํ•˜๊ธฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๋‚˜)
Service Provider OAuth๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Open API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค(๋„ค์ด๋ฒ„, ์นด์นด์˜ค, ๊ตฌ๊ธ€)
Consumer OAuth ์ธ์ฆ์„ ์‚ฌ์šฉํ•ด Service Provider์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์›น ์„œ๋น„์Šค(๊ตฌ๊ธ€๋กœ ๋กœ๊ทธ์ธํ•˜๊ธฐ๋ฅผ ์“ฐ๋ ค๋Š” ์‚ฌ์ดํŠธ๋‚˜ ์•ฑ)
Request Token Consumer๊ฐ€ Service Provider์—๊ฒŒ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ธ์ฆ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’. ์ธ์ฆ์ด ์™„๋ฃŒ๋œ ํ›„์—๋Š” Access Token์œผ๋กœ ๊ตํ™˜ํ•œ๋‹ค.
Access Token ์ธ์ฆ ํ›„ Consumer๊ฐ€ Service Provider์˜ ์ž์›์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํ‚ค๋ฅผ ํฌํ•จํ•œ ๊ฐ’

๐Ÿ”‘ OAuth 1.0 ์ง„ํ–‰ ๊ณผ์ •

Oauth1a

  1. Consumer๊ฐ€ Servcie Provider์—๊ฒŒ Request Token์„ ์š”์ฒญํ•œ๋‹ค.
  2. Service Provider๋Š” Request Token์„ ๋„˜๊ฒจ ์ค€๋‹ค.
  3. Consumer๋Š” User๋ฅผ redirect ์‹œ์ผœ์„œ Service Provider์—์„œ ์ธ์ฆ์„ํ•˜๊ฒŒ ํ•œ๋‹ค. (๋กœ๊ทธ์ธ์„ ํ•˜๋Š” ๊ณผ์ •)
  4. Consumer๋Š” Service Provider๋กœ ๋ถ€ํ„ฐ Access Token์„ ์š”์ฒญํ•œ๋‹ค.
  5. Service Provider๋Š” Access Token์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.
  6. Consumer๋Š” ์ด์ œ User์˜ ์ œ 3์ž ์‚ฌ์ดํŠธ์— ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์ธ์ฆ์„ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

oauth1a

  1. User๊ฐ€ Consumer์— ๊ธ€์„ ์“ฐ๊ณ  โ€˜Service Provider์—๋„ ๋‚จ๊ธฐ๊ธฐโ€™ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค.

  2. Consumer๋Š” ์ž์‹ ์˜ ๋“ฑ๋ก ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Signature๋ฅผ ๋งŒ๋“ค๊ณ  Service Provider์—๊ฒŒ Signature๋ฅผ ๋ณด๋‚ด์„œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ์„ ๋ฐ›์•˜์Œ์„ Service Provider์—๊ฒŒ ์•Œ๋ฆฌ๊ณ , Service Provider๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ์„ ํ™•์ธํ–ˆ๋‹ค๋Š” ์ž„์‹œ ์ฆํ‘œ(Request Token)๋ฅผ ์ €์žฅํ•˜๊ณ  Request Token์„ Consumer์—๊ฒŒ ๋ฐœ๊ธ‰ํ•œ๋‹ค. (1)

  3. Consumer๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ ํ™•์ธ ์ฆํ‘œ(Request Token)์™€ ํ•จ๊ป˜ User์˜ ์š”์ฒญ์„ Service Provider์˜ ์ธ๊ฐ€(๊ถŒํ•œ ๋ถ€์—ฌ) ํ™”๋ฉด์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•œ๋‹ค.

  4. User๊ฐ€ Service Provider์— ๋กœ๊ทธ์ธ ํ•œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋กœ๊ทธ์ธ ํ•œ๋‹ค. (2)

  5. ์ธ๊ฐ€ ํ™”๋ฉด์—๋Š” โ€˜Consumer์—๊ฒŒ ๊ถŒํ•œ ๋ถ€์—ฌโ€™ ๋ฒ„ํŠผ์ด ํ‘œ์‹œ๋œ๋‹ค.

  6. User๊ฐ€ โ€˜Consumer์—๊ฒŒ ๊ถŒํ•œ ๋ถ€์—ฌโ€™ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด, Service Provider๋Š” User๊ฐ€ (Request Token์„ ํ™•์ธํ•˜๊ณ ) Consumer์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ–ˆ์Œ์„ ํ™•์ธํ•˜๊ณ , ํ™•์ธ ์ฝ”๋“œ(Verifier ๋˜๋Š” Authorization_code)๋ฅผ ์ €์žฅ ๋ฐ User์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๊ณ  Consumer๊ฐ€ ์ œ๊ณตํ•˜๋Š” callback ํ™”๋ฉด์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•œ๋‹ค. (3)

  7. ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ฅผ ํ†ตํ•ด ๊ถŒํ•œ ๋ถ€์—ฌ ํ™•์ธ ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌ ๋ฐ›์€ Consumer๋Š” Consumer Key, Request Token, Verifier ๋“ฑ์„ ๋Œ€์ƒ์œผ๋กœ Consumer Secret, Request Token Secret๋ฅผ ์ด์šฉํ•ด์„œ Signature๋ฅผ ๋งŒ๋“ค๊ณ  Service Provider์—๊ฒŒ Signature๋ฅผ ๋ณด๋‚ธ๋‹ค.

  8. Service Provider๋Š” Consumer๊ฐ€ ๋ณด๋‚ธ Signature๋ฅผ ํ™•์ธํ•˜๊ณ  User๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๋ณดํ˜ธ ์ž์›์— ๋Œ€ํ•œ ์ ‘๊ทผ ์ฆํ‘œ(Access Token)๋ฅผ Consumer์—๊ฒŒ ๋ฐœ๊ธ‰ํ•œ๋‹ค.

  9. ์ดํ›„ Consumer๋Š” Access Token๋ฅผ Service Provider์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋ฉด์„œ User๋ฅผ ๋Œ€์‹ ํ•ด์„œ ๋ณดํ˜ธ ์ž์›์— ์ ‘๊ทผํ•œ๋‹ค.

ํšŒ์‚ฌ ๋ฐฉ๋ฌธ ๊ณผ์ •์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์–ด๋–ค์‹์œผ๋กœ oauth๊ฐ€ ์ง„ํ–‰๋˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž. ์ถœ์ฒ˜

ํšŒ์‚ฌ ๋ฐฉ๋ฌธ ๊ณผ์ • OAuth ์ธ์ฆ ๊ณผ์ •
1. ๋‚˜๋ฐฉ๋ฌธ์”จ๊ฐ€ ์•ˆ๋‚ด๋ฐ์Šคํฌ์—์„œ ์—…๋ฌด์ ์ธ ๋ชฉ์ ์œผ๋กœ ๊น€๋ชฉ์ ์”จ๋ฅผ ๋งŒ๋‚˜๋Ÿฌ ์™”๋‹ค๊ณ  ๋งํ•œ๋‹ค. Request Token์˜ ์š”์ฒญ๊ณผ ๋ฐœ๊ธ‰
2. ์•ˆ๋‚ด ๋ฐ์Šคํฌ์—์„œ๋Š” ๊น€๋ชฉ์ ์”จ์—๊ฒŒ ๋‚˜๋ฐฉ๋ฌธ์”จ๊ฐ€ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๊ณ  ์—ฐ๋ฝํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ธ์ฆ ํŽ˜์ด์ง€ ํ˜ธ์ถœ
3. ๊น€๋ชฉ์ ์”จ๊ฐ€ ์•ˆ๋‚ด ๋ฐ์Šคํฌ๋กœ ์ฐพ์•„์™€ ๋‚˜๋ฐฉ๋ฌธ์”จ์˜ ์‹ ์›์„ ํ™•์ธํ•ด ์ค€๋‹ค. ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์™„๋ฃŒ
4. ๊น€๋ชฉ์ ์”จ๋Š” ์—…๋ฌด ๋ชฉ์ ๊ณผ ์ธ์  ์‚ฌํ•ญ์„ ์•ˆ๋‚ด ๋ฐ์Šคํฌ์—์„œ ๊ธฐ๋กํ•œ๋‹ค. ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ ์š”์ฒญ ๋ฐ ์ˆ˜๋ฝ
5. ์•ˆ๋‚ด ๋ฐ์Šคํฌ์—์„œ ๋‚˜๋ฐฉ๋ฌธ ์”จ์—๊ฒŒ ๋ฐฉ๋ฌธ์ฆ์„ ๋ฐœ๊ธ‰ํ•ด์ค€๋‹ค. Access Token ๋ฐœ๊ธ‰
6. ๊น€๋ชฉ์ ์”จ์™€ ๋‚˜๋ฐฉ๋ฌธ์”จ๋Š” ์ •ํ•ด์ง„ ์žฅ์†Œ๋กœ ์ด๋™ํ•ด ์—…๋ฌด๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. Access Toekn์„ ์ด์šฉํ•ด ์„œ๋น„์Šค ์ •๋ณด ์š”์ฒญ

Access Token-๋ฐฉ๋ฌธ์ฆ




๐Ÿ”‘ OAuth 2.0

OAuth 2.0 ๋Œ€ํ‘œ ์šฉ์–ด

์šฉ์–ด ์„ค๋ช…
Resource Server OAuth2.0 ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ž์›์„ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋ฒ„(๊ตฌ๊ธ€,์นด์นด์˜ค, ๋„ค์ด๋ฒ„ ๋“ฑ๋“ฑ)
Authorization Server Client๊ฐ€ Resource Server์˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ธ์ฆํ•˜๊ณ  ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ์„œ๋ฒ„(๊ตฌ๊ธ€, ์นด์นด์˜ค, ๋„ค์ด๋ฒ„ ๋“ฑ)
Resource Owner Resource Server์˜ ๊ณ„์ •์„ ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์‚ฌ์šฉ์ž
Client Resource Server์˜ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•˜๋Š” ์‚ฌ์ดํŠธ
Access Token Resource Server์— ์ž์›์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ํ† ํฐ
Refresh Token Authorization Server์— Access Token์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ํ† ํฐ
Resource Server : ์นด์นด์˜ค ์„œ๋ฒ„, ์ž์›์„ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„
Authorization Server : ์นด์นด์˜ค ์„œ๋ฒ„, ๊ถŒํ•œ์„ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„
Resource Owner : ์‚ฌ์šฉ์ž(๋‚˜)
Client : ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์ด ๋งŒ๋“  ์‚ฌ์ดํŠธ

OAuth 2.0 ์ธ์ฆ ๋ฐฉ์‹์˜ ์ข…๋ฅ˜

์ข…๋ฅ˜ ์„ค๋ช…
Authorization Code Grant - Client๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ๋Œ€์‹  ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ์„ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉ
- resource ์ ‘๊ทผ์„ ์œ„ํ•ด, Authorization Server์—์„œ ๋ฐ›์€ ๊ถŒํ•œ ์ฝ”๋“œ๋กœ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐ›๋Š” ๋ฐฉ์‹
- ๋‹ค๋ฅธ ์ธ์ฆ ์ ˆ์ฐจ์— ๋น„ํ•ด ๋ณด์•ˆ์„ฑ์ด ๋†’๊ธฐ์— ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
Implicit Grant - Authorization Code Grant์™€ ๋‹ค๋ฅด๊ฒŒ ๊ถŒํ•œ ์ฝ”๋“œ ๊ตํ•œ ๋‹จ๊ณ„๊ฐ€ ์žˆ๋‹ค.
- Access Token์„ ์ฆ‰์‹œ ๋ฐ˜ํ™˜ ๋ฐ›์•„ ์ด๋ฅผ ์ธ์ฆ์— ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹
Resource Owner Password Credentials Grant - Client๊ฐ€ ์•”ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ก์„ธ์Šค ํ† ํฐ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹
- Resource Owner์—์„œ id, pwd๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ Resource Server์— ์ธ์ฆํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” client์—์„œ ๊ฐ€๋Šฅ
Client Credentials Grant - Client๊ฐ€ ์ปจํ…์ŠคํŠธ ์™ธ๋ถ€์—์„œ Access Token์„ ์–ป์–ด ํŠน์ • ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ์„ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

Authorization Code Grant

๊ถŒํ•œ ๋ถ€์—ฌ ์Šน์ธ์„ ์œ„ํ•ด ์ž์ฒด ์ƒ์„ฑํ•œ authorization code๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŽ์ด ์“ฐ์ด๊ณ  ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ฐ„ํŽธ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ํŠน์ • ์ž์›์— ์ ‘๊ทผ์„ ์š”์ฒญํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ณดํ†ต ํƒ€์‚ฌ์˜ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณดํ˜ธ๋œ ์ž์›์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ธ์ฆ์— ์‚ฌ์šฉ๋œ๋‹ค. refresh token์˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์ด๋‹ค.

Author

1. client์—์„œ Authorization server๋กœ ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
2. ๋กœ๊ทธ์ธ ํŒ์—…์ฐฝ์ด ์ „๋‹ฌ๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค.
3. ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ๋งž๋‹ค๋ฉด ๊ถŒํ•œ ๋ถ€์—ฌ ์Šน์ธ ์ฝ”๋“œ๋ฅผ client์— ์ „๋‹ฌํ•œ๋‹ค.
4. client๋Š” authorization code๋ฅผ ํ†ตํ•ด access token ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•œ๋‹ค.
5. authorization server๋Š” ์ž๊ธฐ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” client id, client secret, authorization code๋ฅผ ์ „๋‹ฌ๋ฐ›์€ ์ •๋ณด์™€ ๋น„๊ตํ•˜์—ฌ ๋™์ผํ•  ๋•Œ access token์„ ์ „๋‹ฌํ•œ๋‹ค.
6. client๋Š” resoruce server์—๊ฒŒ ์ธ์ฆ์„ ์œ„ํ•œ access token์„ ์ „๋‹ฌํ•˜๋ฉด์„œ ํ•„์š”ํ•œ ์ž์›์„ ์š”์ฒญํ•œ๋‹ค.
7. resource server๋Š” access token์ด ์œ ํšจํ•˜๋ฉด ํ•ด๋‹น ์ž์›์„ ์ œ๊ณตํ•œ๋‹ค.
  • redirect_uri :์ธ์ฆ ์Šน์ธ ์ดํ›„ redirect๋  url
  • response_type :์‚ฌ์šฉ์„ ์›ํ•˜๋Š” grant type ์„ค์ •
    • code :authorization code
    • token :implicit

Implicit Code Grant

์ž๊ฒฉ์ฆ๋ช…์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ €์žฅํ•˜๊ธฐ ํž˜๋“  ํด๋ผ์ด์–ธํŠธ(javascript๋“ฑ)์—๊ฒŒ ์ตœ์ ํ™”๋œ ๋ฐฉ์‹์ด๋‹ค. ์•”์‹œ์  ์Šน์ธ ๋ฐฉ์‹์—์„œ๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ์Šน์ธ ์ฝ”๋“œ ์—†์ด ๋ฐ”๋กœ access token์ด ๋ฐœ๊ธ‰๋œ๋‹ค. Access token์ด ๋ฐ”๋กœ ์ „๋‹ฌ๋˜๋ฏ€๋กœ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์„ ์งง๊ฒŒ ์„ค์ •ํ•˜์—ฌ ๋ˆ„์ถœ์˜ ์œ„ํ—˜์„ ์ค„์ผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. Refresh token์˜ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์ด๋ฉฐ, ๊ถŒํ•œ ์„œ๋ฒ„๋Š” client secret์„ ์‚ฌ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ธ์ฆํ•˜์ง€ ์•Š๋Š”๋‹ค.

1. Client๊ฐ€ ์ธ์ฆ์„œ๋ฒ„์—๊ฒŒ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ๋ฐ ๊ถŒํ•œ ๋™์˜ ์›น ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•œ๋‹ค.
2. ๋กœ๊ทธ์ธ ํŒ์—…์ฐฝ์ด ์ „๋‹ฌ๋˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋กœ๊ทธ์ธ์„ ํ•ฉ๋‹ˆ๋‹ค.
3. ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ๋งž๋‹ค๋ฉด Redirect URL๋กœ Authorization Code๊ฐ€ ์•„๋‹ˆ๋ผ Access token์„ ์ „๋‹ฌํ•œ๋‹ค.
4. ํš๋“ํ•œ Access token์œผ๋กœ Resource Server์— API ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

Resource Owner Password Credentials Grant

๊ฐ„๋‹จํ•˜๊ฒŒ username, pwd์™€ access token์„ ๋ฐ›๋Š” ๋ฐฉ์‹์ด๋‹ค. refresh token ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ค‘์š”ํ•œ ์ ์€ ์„œ๋ฒ„, ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ์‹œ์Šคํ…œ์— ์†ํ•ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

1. Resource Owner๋Š” ์ธ์ฆ์ •๋ณด๋ฅผ client์—๊ฒŒ ์ง์ ‘ ์ „๋‹ฌํ•œ๋‹ค.
2. Client๋Š” ์•ž์„œ ๋ฐ›์€ ์ธ์ฆ ์ •๋ณด๋ฅผ Authorization Server๋กœ ์ „์†กํ•˜์—ฌ Access token์„ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค.
3. ํš๋“ํ•œ Access token์œผ๋กœ Resource Server์— API ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. 

์ด๋ฐฉ์‹์€ Resource Owner์˜ id, pwd๊ฐ€ client์—๊ฒŒ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋ฏ€๋กœ client์™€ service provider๊ฐ€ ๊ฐ™์€ ๋„๋ฉ”์ธ, ์†”๋ฅ˜์…˜ ๋‚ด์— ์กด์žฌํ•˜์—ฌ ์„œ๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

Client Credentials Grant

Oauth 2.0์˜ ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฐฉ์‹ ์ค‘ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์ž๊ฒฉ์ฆ๋ช…๋งŒ์œผ๋กœ access token์„ ํš๋“ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๋ฐฉ์‹์€ ์ž์‹ ์ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค ํ˜น์€ ๊ถŒํ•œ ์„œ๋ฒ„์— ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ ๊ถŒํ•œ์ด ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ด ๋ฐฉ์‹์€ ์ž๊ฒฉ ์ฆ๋ช…์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๊ณ , refresh token์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.




๐Ÿ“š ์ฐธ๊ณ 

ouath ๊ฐœ๋…

oauth ๊ฐœ๋…

oauth-dance

oauth-๊ฐ„๋‹จํ•œ์ •๋ฆฌ

OAuth2.0/1.0



โ‰๏ธ ๋ฉด์ ‘์งˆ๋ฌธ

OAuth 1.0๊ณผ OAuth 2.0์˜ ์ฐจ์ด์ ์„ ์„ค๋ช…ํ•˜์‹œ์˜ค.

OAuth๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

OAuth 1.0์˜ ์ง„ํ–‰ ์ ˆ์ฐจ๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.

OAuth 2.0์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•˜์‹œ์˜ค.

OAuth 2.0 ์ธ์ฆ ๋ฐฉ์‹ ์ค‘ 1๊ฐ€์ง€์˜ ์ ˆ์ฐจ๋ฅผ ์„ค๋ช…ํ•˜์‹œ์˜ค.