[TIL] Day58 #์›น๊ณต๊ฒฉ #Token #JWT #OAuth

Beanxxยท2022๋…„ 7์›” 19์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
58/120
post-thumbnail

2022.07.15(Fri)

[TIL] Day58
[SEB FE] Day57

โ˜‘๏ธย ์›น ๊ณต๊ฒฉ

โžฐย Web application Security

: ๊ฐœ๋ฐœ์ž๋“ค์ด ์›น์‚ฌ์ดํŠธ, ๋ชจ๋ฐ”์ผ ์–ดํ”Œ, ์›น API ๋“ฑ์„ ๋งŒ๋“ค ๋•Œ ํ•ด์ปค๋“ค์˜ ๊ณต๊ฒฉ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ๋ณด์•ˆ(security) โ†’ ํ•„์ˆ˜ ์‚ฌํ•ญ!

๐Ÿ“Žย SQL Injection (SQL ์‚ฝ์ž…)

: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž„์˜์˜ SQL๋ฌธ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช…๋ น์–ด๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณต๊ฒฉ ์œ ํ˜•
๐Ÿ‘‰ย ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋น„์ •์ƒ์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๋ฏ€๋กœ ๊ธฐ๋ก ์‚ญ์ œ / ๋ฐ์ดํ„ฐ ์œ ์ถœ ๊ฐ€๋Šฅ์„ฑ โญ•๏ธ

โžฐย ๋Œ€์‘ ๋ฐฉ์•ˆ

  1. ์ž…๋ ฅ(์š”์ฒญ) ๊ฐ’ ๊ฒ€์ฆ
    • ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ํ•ด๋‹น ํ‚ค์›Œ๋“œ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์น˜ํ™˜ํ•˜์—ฌ ๋Œ€์‘ ๊ฐ€๋Šฅ
      • ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ: ๋ชจ๋“  ๊ธฐ๋ณธ ์ •์ฑ… ์ฐจ๋‹จ ์ƒํ™ฉ์—์„œ ์˜ˆ์™ธ์ ์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๋Œ€์ƒ์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ์‹ / ๊ทธ ์ง€์ •๋œ ๋Œ€์ƒ๋“ค
  2. Prepared Statement ๊ตฌ๋ฌธ ์‚ฌ์šฉ
    • ์‚ฌ์šฉ์‹œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด SQL๋ฌธ์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋˜์–ด ๋ฐฉ์–ด ๊ฐ€๋Šฅ
    • ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์„ Text๋กœ ์ธ์‹ โ†’ ์ž…๋ ฅ๊ฐ’์ด SQL๋ฌธ์ด ์•„๋‹Œ Text๋กœ ์ ์šฉ๋˜์–ด ๊ณต๊ฒฉ ์‹คํŒจ
  3. Error Message ๋…ธ์ถœ ๊ธˆ์ง€
    • Error Message๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ โ†’ ๋…ธ์ถœ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ๋ณ„๋„ ์—๋Ÿฌํ•ธ๋“ค๋ง ํ•„์š”!

๐Ÿ“Žย Cross-Site Scripting (XSS)

: ์›น ์‚ฌ์ดํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ ๊ณต๊ฒฉ์ž๊ฐ€ ์›น ์‚ฌ์ดํŠธ์— ์•…์˜์ ์ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹ฌ์–ด๋†“๋Š” ํ–‰์œ„

  • ๊ณต๊ฒฉ ๋Œ€์ƒ - Client
  • ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ํ–‰๋™์„ ํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ๋ฏผ๊ฐ ์ •๋ณด ํƒˆ์ทจ
  • ํƒˆ์ทจํ•œ ๋ฏผ๊ฐ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ๊ถŒํ•œ ํš๋“ ํ›„, ๋‹ค์–‘ํ•œ ๊ณต๊ฒฉ์— ํ™œ์šฉ

โžฐย XSS ๊ณต๊ฒฉ ์œ ํ˜•

  1. Stored XSS = ์ง€์†์ (persistent) ๊ธฐ๋ฒ•: ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ”ผํ•ด๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ์œ ํ˜•
    • ์ฃผ๋กœ ๊ฒŒ์‹œํŒ ํ˜•ํƒœ์˜ ์›น ์‚ฌ์ดํŠธ์—์„œ ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์˜์ ์ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ด๊ธด ๊ธ€ ์ž‘์„ฑ ํ›„, ์„œ๋ฒ„์— ์ €์žฅ๋œ ๊ธ€์„ ์กฐํšŒํ•  ๋•Œ๋งˆ๋‹ค ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰๋˜๋Š” ํ˜•์‹
  2. Reflected XSS = ๋น„์ง€์†์ (Non-persistent) ๊ธฐ๋ฒ•: URL ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์œ ํ˜•
    • ์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ง€์ •๋œ ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ์ทจ์•ฝ์  ์ด์šฉ
    • ์ฃผ๋กœ ๊ฒ€์ƒ‰์—”์ง„์—์„œ ๋ฐœ์ƒ
    • ํด๋ผ์ด์–ธํŠธ์—์„œ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰!

โžฐย XSS ๋Œ€์‘ ๋ฐฉ์•ˆ

  1. Script Tag ์ž…๋ ฅ ๋ง‰๊ธฐ
    • ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์„ ๋ง‰๊ธฐ ์œ„ํ•ด ํƒœ๊ทธ(<>)๊ฐ€ ๊ธ€์ž ๊ทธ๋Œ€๋กœ ์ €์žฅ๋˜์ง€ ์•Š๊ฒŒ ๋ฐฉ์ง€ ๊ฐ€๋Šฅ
      a. ์ž…๋ ฅ๊ฐ’ ํ™•์ธ / ํ•„ํ„ฐ๋ง: ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์—์„œ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, Client์ธก์—์„  input์— textContent ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„ํ„ฐ๋ง ๊ฐ€๋Šฅ
      b. ์ž…๋ ฅ๊ฐ’ ์น˜ํ™˜: ๊ธ€์— ์žˆ๋Š” ํƒœ๊ทธ๋ฅผ HTML ๋ฌธ์ž ์ฐธ์กฐ๋กœ ์น˜ํ™˜ ํ›„ ์ €์žฅ (< โ†’ &lt;, > โ†’ &gt;)
  2. ์ฟ ํ‚ค ์„ค์ • ํ™•์ธ (httpOnly)
    • ์‚ฌ์ดํŠธ์— ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ €์žฅ ํ˜น์€ ์‹คํ–‰๋˜๋Š” ์ผ ์ž์ฒด๋ฅผ ๋ฐฉ์ง€ํ•˜์ง„ ์•Š์Œ
      But, ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ฟ ํ‚ค๋ฅผ ํƒˆ์ทจํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•ด ์ฟ ํ‚ค์— ์ €์žฅ๋œ ๋ฏผ๊ฐํ•œ ๊ฐœ์ธ ์ •๋ณด ์œ ์ถœ ๋ฐฉ์ง€ ๊ฐ€๋Šฅ
  3. ์ฟ ํ‚ค์— ๋ฏผ๊ฐ ์ •๋ณด ๋‹ด์ง€ ์•Š๊ธฐ
    a. ๋ฏผ๊ฐ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์—์„œ ๊ด€๋ฆฌ
    b. ์•”ํ˜ธํ™” ์‚ฌ์šฉ

๐Ÿ“Žย Cross-Site Request Forgery (CSRF)

: ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ ์œ ์ €๊ฐ€ ๋ณด๋‚ด๋Š” ์š”์ฒญ(request) ์กฐ์ž‘

  • ํ•ด์ปค๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ถˆ๊ฐ€ โŒย (response์— ์ง์ ‘ ์ ‘๊ทผ X)

โžฐ CSRF ๊ณต๊ฒฉ ํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด

  • ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ ๋กœ๊ทธ์ธ
  • ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ / parameter๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•จ

โžฐ CSRF ๋Œ€์‘ ๋ฐฉ์•ˆ

  • CSRF Token ์‚ฌ์šฉ: ์„œ๋ฒ„์ธก์—์„œ CSRF ๊ณต๊ฒฉ์— ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ž์—ด์„ ์œ ์ € ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์•ฑ์—๋งŒ ์ œ๊ณต
  • Same-site cookie ์‚ฌ์šฉ: ๊ฐ™์€ ๋„๋ฉ”์ธ์—์„œ๋งŒ ์„ธ์…˜/์ฟ ํ‚ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๐Ÿ“Žย Clickjacking

: ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ํ•œ ํด๋ฆญ ๋Œ€์ƒ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋Œ€์ƒ์„ ํด๋ฆญํ•˜๋„๋ก ์†์ด๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•

  • = ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋ง์”Œ์šฐ๊ธฐ (User Interface Redress)
  • ๊ณต๊ฒฉ์ž๋Š” ๋ˆˆ์— ๋ณด์ด๋Š” ํ™”๋ฉด ์œ„์— ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ํ–‰๋™ ์‹คํ–‰ ํ™”๋ฉด ๋ฐฐ์น˜

โžฐ Clickjacking ๋Œ€์‘ ๋ฐฉ์•ˆ

  • X-Frame-Options: ํ—ค๋”์— ์„ค์ •ํ•œ ์˜ต์…˜์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ํŽ˜์ด์ง€ ํ™”๋ฉด <iframe> ๋ Œ๋”๋ง ์—ฌ๋ถ€ ์ œํ•œ ๊ฐ€๋Šฅ
  • ์ฝ˜ํ…์ธ  ๋ณด์•ˆ ์ •์ฑ…(Content Security Policy, CSP): ์ปดํ“จํ„ฐ ๋ณด์•ˆ ํ‘œ์ค€์œผ๋กœ, ์›น ํŽ˜์ด์ง€์—์„œ ์•…์˜์ ์ธ ์ฝ˜ํ…์ธ ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ๋ณด์•ˆ ๊ณต๊ฒฉ ์˜ˆ๋ฐฉ์„ ์œ„ํ•ด ๋„์ž…

โ˜‘๏ธย Token

๐Ÿ“Žย ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ(Token-based Authentication)

: ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธ์ฆ ์ •๋ณด๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๋ฐฉ๋ฒ•

โœ‹ย ํ† ํฐ์€ ์œ ์ € ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ์— ๋‹ด์„ ์ˆ˜ ์žˆ์Œ

โžฐย JWT(JSON Web Token)
: JSON ํฌ๋งท์œผ๋กœ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์†์„ฑ์„ ์ €์žฅํ•˜๋Š” ์›น ํ† ํฐ

  1. Access Token: ๋ณดํ˜ธ๋œ ์ •๋ณด๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ๋ถ€์—ฌ์— ์‚ฌ์šฉ

    • ์งง์€ ์œ ํšจ๊ธฐ๊ฐ„์„ ์ฃผ์–ด ํ† ํฐ์„ ํƒˆ์ทจํ•˜๋”๋ผ๋„ ์˜ค๋žซ๋™์•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ ๐Ÿ‘
  2. Refresh Token: ์•ก์„ธ์Šค ํ† ํฐ ์œ ํšจ๊ธฐ๊ฐ„ ๋งŒ๋ฃŒ์‹œ, ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰

    • ์œ ์ €๋Š” ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•  ํ•„์š” โŒ
    • ์œ ํšจ๊ธฐ๊ฐ„์ด ๊ธด ํŽธ

โžฐย JWT ๊ตฌ์กฐ

  1. Header: ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ† ํฐ์ธ์ง€, ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ Signature๋ฅผ ์•”ํ˜ธํ™”(sign)ํ• ์ง€ ์ ํ˜€ ์žˆ์Œ

    // JSON ํ˜•ํƒœ
    {
    	"alg": "HS256", // ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ Signuture๋ฅผ ์•”ํ˜ธํ™”ํ—€๋Š”์ง€
    	"typ": "JWT" // ์–ด๋–ค ์ข…๋ฅ˜ ํ† ํฐ์ธ์ง€
    }
    
    // ์ด JSON ๊ฐ์ฒด๋ฅผ base64๋ฐฉ์‹์œผ๋กœ encoding
  2. Payload: ์„œ๋ฒ„์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ € ์ •๋ณด๊ฐ€ ๋‹ด๊น€ (Base64๋กœ๋งŒ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ’)

  3. Signature: Header, Payload๋ฅผ base64์ธ์ฝ”๋”ฉํ•œ ๊ฐ’ & salt๊ฐ’์˜ ์กฐํ•ฉ์œผ๋กœ ์•”ํ˜ธํ™˜๋œ ๊ฐ’

    • ์„œ๋ฒ„ ๋น„๋ฐ€ํ‚ค & ํ—ค๋”์—์„œ ์ง€์ •ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”

โžฐย ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ ์ ˆ์ฐจ

  1. [Client โ†’ Server] ID/PW๋ฅผ ๋‹ด์•„ ๋กœ๊ทธ์ธ ์š”์ฒญ
  2. ID/PW๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ, Client์—๊ฒŒ ๋ณด๋‚ผ ์•”ํ˜ธํ™”๋œ ํ† ํฐ ์ƒ์„ฑ
    • Access/Refresh Token ๋ชจ๋‘ ์ƒ์„ฑ
  3. Server๊ฐ€ Token์„ Client์—๊ฒŒ ๋ณด๋‚ด์ฃผ๋ฉด, ํ† ํฐ ์ €์žฅ
    • ์ €์žฅ ์œ„์น˜: Local Storage, Session Storage, Cookie โ€ฆ
  4. Client๊ฐ€ HTTP Header / Cookie์— ํ† ํฐ์„ ๋‹ด์•„ ๋ณด๋ƒ„
    • Authorization Header ์‚ฌ์šฉ์‹œ Bearer Authentication ์ด์šฉ
  5. ์„œ๋ฒ„๋Š” ํ† ํฐ ํ•ด๋… โ†’ ๋งž์„ ๊ฒฝ์šฐ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ฒ˜๋ฆฌ โ†’ ์‘๋‹ต ๋ณด๋‚ด์คŒ

โžฐย ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ ์žฅ์ 

  1. ๋ฌด์ƒํƒœ์„ฑ(Statelessness) & ํ™•์žฅ์„ฑ(Scalability)
    • [Server] ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ •๋ณด ์ €์žฅ ํ•„์š” โŒ
    • [Client] ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ํ† ํฐ์„ ํ—ค๋”์— ํฌํ•จ์‹œํ‚ด
    • ๊ฐ™์€ ํ† ํฐ์œผ๋กœ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์—์„œ ์ธ์ฆ ๊ฐ€๋Šฅ!
  2. ์•ˆ์ „ํ•จ
    • ์•”ํ˜ธํ™”ํ•œ ํ† ํฐ ์‚ฌ์šฉ, ์•”ํ˜ธํ™” ํ‚ค ๋…ธ์ถœํ•  ํ•„์š” ์—†์œผ๋ฏ€๋กœ ์•ˆ์ „
  3. ์–ด๋””์„œ๋‚˜ ์ƒ์„ฑ ๊ฐ€๋Šฅ
    • ํ† ํฐ์„ ํ™•์ธํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ํ† ํฐ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋จ
  4. ๊ถŒํ•œ ๋ถ€์—ฌ ์šฉ์ด
    • ํ† ํฐ Payload ์•ˆ์— ์–ด๋–ค ์ •๋ณด์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ์ง€ ์ •ํ•  ์ˆ˜ ์žˆ์Œ

โ˜‘๏ธย OAuth 2.0

: ์ธ์ฆ ์ค‘๊ฐœ ๋งค์ปค๋‹ˆ์ฆ˜์œผ๋กœ, ๋ณด์•ˆ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ถŒํ•œ(Authorization)์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ

โœ‹ย ์ธ์ฆ(Authentication)์„ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ๋งก๊ธธ ๋ฟ, ์ ‘๊ทผ ๊ถŒํ•œ ๊ด€๋ฆฌ(Authorization)๋Š” ์„œ๋ฒ„ ๋ชซ!

  • Resource Owner: ์•ก์„ธ์Šค ์ค‘์ธ ๋ฆฌ์†Œ์Šค์˜ User
  • Client: ๋ฆฌ์†Œ์Šค Owner๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • Resource Server: ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„
  • Authorization Server: Resource Server๊ฐ€ ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๋Š” ์ธ์ฆ ์„œ๋ฒ„
  • Authorization Grant: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๋Š” ๋ฐฉ๋ฒ• ์˜๋ฏธ (์ฆ‰, ์ž๊ฒฉ ์ฆ๋ช…!)
  • Authorization Code: ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰์„ ์œ„ํ•œ ์ฝ”๋“œ
  • Access Token: ๋ณดํ˜ธ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฆ ํ† ํฐ (credentials)
  • Scope: ํ† ํฐ ๊ถŒํ•œ ์ •์˜ / ์ฃผ์–ด์ง„ ์•ก์„ธ์Šค ํ† ํฐ ์‚ฌ์šฉ โ†’ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌ์†Œ์Šค ๋ฒ”์œ„

โœŽ Grant type: Client๊ฐ€ ์•ก์„ธ์Šค ํ† ํฐ์„ ์–ป๋Š” ๋ฐฉ๋ฒ•

โžฐ Authorization Code Grant type: ๋จผ์ € Authorization code๋ฅผ ๋ฐ›์•„ ์•ก์„ธ์Šค ํ† ํฐ๊ณผ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. Resource owner๊ฐ€ client๋กœ ์ ‘๊ทผ
  2. Client๊ฐ€ Resource owner๋ฅผ Authorization server๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ
  3. Resource owner์˜ ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ ์š”์ฒญ
  4. Authorization code ์ œ๊ณต
  5. Authorization code โ†’ Access token์œผ๋กœ ๊ตํ™˜
  6. Client๋Š” Access token์„ ํ†ตํ•ด Resource์— ์•ก์„ธ์Šค ๊ฐ€๋Šฅ
  7. ์•ก์„ธ์Šค ํ† ํฐ๊ณผ ํ•จ๊ป˜ API ์š”์ฒญ์„ ๋ณด๋ƒ„
  8. Client๊ฐ€ ์š”์ฒญํ•œ ๋ฆฌ์†Œ์Šค ์ „๋‹ฌ

โœ‹ย Authorization code ์ ˆ์ฐจ๋ฅผ ๊ฑฐ์น˜๋Š” ์ด์œ ๋Š” ๋ณด์•ˆ์„ฑ ๊ฐ•ํ™”์— ๋ชฉ์ ์ด ์žˆ์Œ!

๐Ÿ‘‰ย [Client] authorization code๋งŒ ๋ฐ›์•„์˜ค๊ณ , [Server] Access Token ์š”์ฒญ ์ง„ํ–‰


โžฐย Refresh Token Grant Type: ์ผ์ • ๊ธฐ๊ฐ„ ์œ ํšจ ์‹œ๊ฐ„์ด ์ง€๋‚˜์„œ ๋งŒ๋ฃŒ๋œ ์•ก์„ธ์Šค ํ† ํฐ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋‹ค์‹œ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. Refresh token์„ ํ†ตํ•ด์„œ ์ƒˆ๋กœ์šด ์•ก์„ธ์Šค ํ† ํฐ ์š”์ฒญ
  2. ์ƒˆ๋กœ์šด ์•ก์„ธ์Šค ํ† ํฐ ๋ฐ˜ํ™˜
  3. Client๋Š” ์•ก์„ธ์Šค ํ† ํฐ์„ ํ†ตํ•ด User์˜ Resource์— ์•ก์„ธ์Šค ๊ฐ€๋Šฅ


โ˜‘๏ธ [Pair] Auth Token

: ๋กœ๊ทธ์ธ ์ƒํƒœ ์œ ์ง€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ„๋‹จ ์›น ์•ฑ์„ JWT๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ ๐Ÿ™Œ

๐Ÿ‘พ ํ•œ๋ฒˆ ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๊ณ  ๋‹ค์‹œ ์—…๋กœ๋“œํ•˜๊ธฐ!~!


ํ† ํฐ ๋„˜ ์–ด๋ ต๋‹ค,, ์•„์ง๋„ ์ œ๋Œ€๋กœ ์ดํ•ด ์—‘์Šค ๐Ÿฅฒ

profile
FE developer

0๊ฐœ์˜ ๋Œ“๊ธ€