ํฌ์ŠคํŠธ

OAuth2

OAuth2

๐Ÿ”” Oauth2? ๊ทธ๋Ÿผ Oauth1๋„?
๐Ÿ”” Oauth2 ๋™์ž‘ ๊ณผ์ •

RFC6749(Oauth 2.0) ๋ฌธ์„œ๋ฅผ ํ† ๋Œ€๋กœ ์š”์•ฝํ•˜์—ฌ ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ˆ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ•ด๋‹น ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

What? Why?

์ธ์ฆ(authentication)์ด ์•„๋‹Œ ์ธ๊ฐ€(authorization)์— ์ดˆ์ ์„ ๋งž์ถ”๋ฉฐ, ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ž์‹ ์˜ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ œํ•œ์  ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

์—ญํ• 

  • Resource Owner
    • ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค(Protected Resource)์˜ ์‹ค์ œ ์†Œ์œ ์ž ํ˜น์€ ์ฃผ์ฒด
    • ex) ์‚ฌ์šฉ์ž์˜ ๊ณ„์ •, ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ
  • Resource Server
    • ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ˜ธ์ŠคํŒ…(์ €์žฅ ๋ฐ ๊ด€๋ฆฌ)ํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์•ก์„ธ์Šค ํ† ํฐ์„ ๊ฒ€์ฆํ•˜๊ณ , ์œ ํšจํ•œ ํ† ํฐ์ด๋ฉด ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ํ—ˆ์šฉ
  • Client
    • ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ์š”์ฒญํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
    • ex) ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋ชจ๋ฐ”์ผ ์•ฑ, ๋ฐ์Šคํฌํ†ฑ ํ”„๋กœ๊ทธ๋žจ ๋“ฑ
  • Authorization Server
    • ํด๋ผ์ด์–ธํŠธ์˜ ๊ถŒํ•œ ์š”์ฒญ์„ ์ธ์ฆ/์ธ๊ฐ€ํ•˜๊ณ , ์•ก์„ธ์Šค ํ† ํฐ(ํ˜น์€ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ)์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์„œ๋ฒ„
    • Resource Owner์™€ Client ์‚ฌ์ด์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ํ† ํฐ์„ ์ฃผ๊ณ ๋ฐ›๋„๋ก ์ค‘์žฌ

Oauth 1.0 vs 2.0

๊ธฐ์กด Oauth 1.0์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด Oauth 2.0์ด ๋งŒ๋“ค์–ด์กŒ๋‹ค.

1.0

  • ๋ณต์žกํ•œ ์„œ๋ช… ํ”„๋กœ์„ธ์Šค
    • ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ์„œ๋ช…์„ ์ƒ์„ฑ
  • ์œ ์—ฐ์„ฑ ๋ถ€์กฑ
    • ํŠน์ •ํ•œ ์ธ์ฆ ํ”Œ๋กœ์šฐ์— ๊ตญํ•œ๋˜์–ด ์žˆ์Œ
    • ex) ๋ชจ๋ฐ”์ผ ์•ฑ, ๋‹จ์ผ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA) ๋“ฑ
  • ๋ณด์•ˆ์ƒ์˜ ์ œ์•ฝ
    • HTTPS์™€ ๊ฐ™์€ ์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ์„ ์™„์ „ํžˆ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์Œ
    • ์„œ๋ช… ๊ด€๋ฆฌ ์ž์ฒด๊ฐ€ ๋ณด์•ˆ ์œ„ํ—˜ ์š”์†Œ ๊ฐ€๋Šฅ์„ฑ
  • ํ™•์žฅ์„ฑ์˜ ํ•œ๊ณ„

2.0

  • ๋‹จ์ˆœํ™”๋œ ์ธ์ฆ ํ”„๋กœ์„ธ์Šค
    • ์„œ๋ช… ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์ œ๊ฑฐํ•˜๊ณ  HTTPS๋ฅผ ๊ธฐ๋ณธ ๋ณด์•ˆ ๊ณ„์ธต์œผ๋กœ ์‚ฌ์šฉ
  • ๋‹ค์–‘ํ•œ ์ธ์ฆ ํ”Œ๋กœ์šฐ ์ง€์›
    • ๋‹ค์–‘ํ•œ ์ธ์ฆ ํ”Œ๋กœ์šฐ(๊ทธ๋žœํŠธ ํƒ€์ž…)๋ฅผ ์ง€์›
    • ex) Authorization Code, Implicit, Client Credentials ๋“ฑ
  • ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ ํ–ฅ์ƒ
    • ๋ชจ๋“ˆ์‹ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ํ•„์š”์— ๋”ฐ๋ผ ํ™•์žฅ ๊ฐ€๋Šฅ
    • ex) PKCE(Proof Key for Code Exchange)
  • ํ–ฅ์ƒ๋œ ๋ณด์•ˆ ๊ธฐ๋Šฅ
    • ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ
    • ํ† ํฐ์˜ ๋ฒ”์œ„(scope) ์„ธ๋ถ„ํ™”
  • ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜
    • SPA๋‚˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋„ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ ๊ฐ€๋Šฅ

ํ๋ฆ„๋„

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 +--------+                               +---------------+
 |        |--(A)- Authorization Request ->|   Resource    |
 |        |                               |     Owner     |
 |        |<-(B)-- Authorization Grant ---|               |
 |        |                               +---------------+
 |        |
 |        |                               +---------------+
 |        |--(C)-- Authorization Grant -->| Authorization |
 | Client |                               |     Server    |
 |        |<-(D)----- Access Token -------|               |
 |        |                               +---------------+
 |        |
 |        |                               +---------------+
 |        |--(E)----- Access Token ------>|    Resource   |
 |        |                               |     Server    |
 |        |<-(F)--- Protected Resource ---|               |
 +--------+                               +---------------+

(A) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์Šน์ธ ์š”์ฒญ

ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž์—๊ฒŒ ์ง์ ‘ ์Šน์ธ ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ์ฆ ์š”์ฒญ์€ ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž ์ง์ ‘ ์ด๋ฃจ์–ด์งˆ ์ˆ˜๋„ ์žˆ๊ณ  ์ค‘๊ฐœ์ž๋กœ์„œ ์ธ์ฆ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

(B) ์ธ์ฆ ๋ถ€์—ฌ๋ฅผ ๋ฐ›์Œ

ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์†Œ์Šค ์†Œ์œ ์ž์˜ ์ธ์ฆ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ž๊ฒฉ ์ฆ๋ช…์ธ ์ธ์ฆ ๋ถ€์—ฌ๋ฅผ ๋ฐ›๋Š”๋‹ค. ๋ช…์„ธ์„œ์— ์ •์˜๋œ ๋„ค ๊ฐ€์ง€ ์œ ํ˜• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ™•์žฅ ๋ถ€์—ฌ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„๋œ๋‹ค. ์ธ์ฆ ๋ถ€์—ฌ ์œ ํ˜•์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ์„ ์š”์ฒญํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ธ์ฆ ์„œ๋ฒ„๊ฐ€ ์ง€์›ํ•˜๋Š” ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

(C) ์—‘์„ธ์Šค ํ† ํฐ ์š”์ฒญ

ํด๋ผ์ด์–ธํŠธ๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ ์„œ๋ฒ„๋กœ ์ธ์ฆํ•˜๊ณ  ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ œ์‹œํ•˜์—ฌ ์•ก์„ธ์Šค ํ† ํฐ์„ ์š”์ฒญํ•œ๋‹ค.

(D) ์—‘์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰

์ธ์ฆ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ธ์ฆํ•˜๊ณ  ์ธ์ฆ ๋ถ€์—ฌ๋ฅผ ๊ฒ€์ฆํ•œ ํ›„์—, ์œ ํšจํ•œ ๊ฒฝ์šฐ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•œ๋‹ค.

(E) ์ธ์ฆ

ํด๋ผ์ด์–ธํŠธ๋Š” ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์—์„œ ๋ณดํ˜ธ๋˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•˜๊ณ  ์•ก์„ธ์Šค ํ† ํฐ์„ ์ œ์‹œํ•˜์—ฌ ์ธ์ฆํ•œ๋‹ค.

(F) ์š”์ฒญ ์ฒ˜๋ฆฌ

๋ฆฌ์†Œ์Šค ์„œ๋ฒ„๋Š” ์•ก์„ธ์Šค ํ† ํฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์œ ํšจํ•œ ๊ฒฝ์šฐ, ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋‹ค์Œ ์žฅ์— ์ด์–ด์„œ..

์ž๋ฃŒ ์ถœ์ฒ˜

RFC 6749
ChatGPT

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

ยฉ yuuuuuuyu. ์ผ๋ถ€ ๊ถŒ๋ฆฌ ๋ณด์œ 

Powered by Jekyll with Chirpy theme