Jieunny์˜ ๋ธ”๋กœ๊ทธ

S3) Unit 7. [Backend] Hashing / Token / OAuth ๋ณธ๋ฌธ

CodeStates/learning contents

S3) Unit 7. [Backend] Hashing / Token / OAuth

Jieunny 2023. 3. 8. 11:00

๐Ÿ“ฃ  ํ•ด์‹ฑ(Hashing)

โœ”๏ธ ๋ณตํ˜ธํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ•

โžฐ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์•”ํ˜ธํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

   โžฐ ํ•ด์‹œ ํ•จ์ˆ˜

       ๏น’ ํ•ญ์ƒ ๊ฐ™์€ ๊ธธ์ด์˜ ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค.

       ๏น’ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์— ๋™์ผํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

       ๏น’ ๋™์ผํ•œ ๋ฌธ์ž์—ด์— ๋™์ผํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

 

๐Ÿ“ฃ  ๋ ˆ์ธ๋ณด์šฐ ํ…Œ์ด๋ธ”๊ณผ ์†”ํŠธ(Salt)

โœ”๏ธ ๋ ˆ์ธ๋ณด์šฐ ํ…Œ์ด๋ธ” : ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ๋‹ค๋Š” ํŠน์„ฑ์„ ์ด์šฉํ•ด ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์น˜๊ธฐ ์ด์ „์˜ ๊ฐ’์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋กํ•œ ํ‘œ

โžฐ ์ด ๊ฐ’์ด ์œ ์ถœ๋˜์—ˆ์„ ๋•Œ ํ•ด์‹ฑ์„ ํ–ˆ๋”๋ผ๋„ ์ด์ „ ๊ฐ’์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณด์•ˆ์ƒ ์œ„ํ˜‘์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

 

โœ”๏ธ ์†”ํŠธ : ํ•ด์‹ฑ ์ด์ „ ๊ฐ’์— ์ž„์˜์˜ ๊ฐ’์„ ๋”ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ถœ ๋˜๋”๋ผ๋„ ํ•ด์‹ฑ ์ด์ „์˜ ๊ฐ’์„ ์•Œ์•„๋‚ด๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

โžฐ ํ•ด์‹ฑ ๊ฐ’์ด ์œ ์ถœ๋˜๋”๋ผ๋„, ์†”ํŠธ๊ฐ€ ํ•จ๊ป˜ ์œ ์ถœ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ฉด ์•”ํ˜ธํ™” ์ด์ „์˜ ๊ฐ’์œผ๋ฅด ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น๋‹ค.

 

๐Ÿ“ฃ  ํ•ด์‹ฑ์˜ ๋ชฉ์ 

โœ”๏ธ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋ชฉ์ ์ด ์•„๋‹Œ, ๋™์ผํ•œ ๊ฐ’์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๋Š” ๊ฒƒ

โžฐ ์‚ฌ์ดํŠธ ๊ด€๋ฆฌ์ž๋Š” ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ๊ณ  ์žˆ์„ ํ•„์š” ์—†์ด, ํ•ด์‹ฑ๋œ ๊ฐ’๋งŒ ์ €์žฅํ•œ๋‹ค.

โžฐ ํ•ด์‹ฑ ๊ฐ’๋ผ๋ฆฌ ๋น„๊ตํ•ด์„œ ์ผ์น˜ํ•˜๋Š” ์ง€ ํ™•์ธํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹ฑ ๊ฐ’๋งŒ์œผ๋กœ๋„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ์— ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.

=> '๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๋ฐ์ดํ„ฐ ์œ ์ถœ์˜ ์œ„ํ—˜์„ฑ์€ ์ค„์ด๋ฉด์„œ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™” ๋ฐฉ์‹'


๐Ÿ“ฃ  Token 

โœ”๏ธ ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์™œ ์‚ฌ์šฉํ• ๊นŒ?

โžฐ ์„ธ์…˜๊ธฐ๋ฐ˜ ์ธ์ฆ์€ ์„œ๋ฒ„์— ์œ ์ € ์ •๋ณด๋ฅผ ๋‹ด๋Š” ๋ฐฉ์‹์œผ๋กœ, ์ด ๋ถ€๋‹ด์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„˜๊ฒจ์ค„ ์ˆœ ์—†์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์—์„œ ๋“ฑ์žฅํ–ˆ๋‹ค.

 

โœ”๏ธ ํ† ํฐ : ์œ ์ € ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”ํ•œ ์ƒํƒœ๋กœ ๋‹ด์„ ์ˆ˜ ์žˆ๊ณ , ์•”ํ˜ธํ™”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

โžฐ JWT(JSON Web Token) : ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ

 

๐Ÿ“ฃ  JWT ๊ตฌ์กฐ

1๏ธโƒฃ Header

โœ”๏ธ ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ† ํฐ์ธ์ง€, ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™”ํ• ์ง€๊ฐ€ ์ ํ˜€์žˆ๋‹ค.

{
    "alg": "HS256",
    "typ": "JWT"
}

โžฐ JSON ํ˜•ํƒœ๋กœ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š”๋ฐ, ์ด ๊ฐ์ฒด๋ฅผ base64 ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•˜๋ฉด Header๊ฐ€ ์™„์„ฑ๋œ๋‹ค.

    โžฐ base64 ๋ฐฉ์‹์€ ์–ผ๋งˆ๋“ ์ง€ ๋””์ฝ”๋”ฉ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ •๋ณด๋ฅผ ๋‹ด์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

 

2๏ธโƒฃ Payload

โœ”๏ธ ์„œ๋ฒ„์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ €์˜ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ ์žˆ๋‹ค.

โžฐ ๊ถŒํ•œ, ์œ ์ €์˜ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ๊ฐœ์ธ์ •๋ณด ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

โžฐ Signature๋ฅผ ํ†ตํ•ด ์œ ํšจ์„ฑ์ด ๊ฒ€์ฆ ๋  ์ •๋ณด๊ธด ํ•˜์ง€๋งŒ, ์ธ์ฝ”๋”ฉ ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ๋‹ด์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

{
    "sub": "someInformation",
    "name": "phillip",
    "iat": 151623391
}

 

3๏ธโƒฃ Signature

โœ”๏ธ Header์™€ Payload๊ฐ€ ์™„์„ฑ๋˜๋ฉด, Signature๋Š” ์ด๋ฅผ ์„œ๋ฒ„์˜ ๋น„๋ฐ€ ํ‚ค(์•”ํ˜ธํ™”์— ์ถ”๊ฐ€ํ•  salt)์™€ Header์—์„œ ์ง€์ •ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด์‹ฑํ•œ๋‹ค.

HMACSHA256(base64UrlEncode(header) + '.' + baase64UrlEncode(payload), secret);
// HMAC SHA256 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ Signature ์ƒ์„ฑ

โžฐ  ๋ˆ„๊ตฐ๊ฐ€ ํ† ํฐ์˜ Payload๋ฅผ ๋ณ€์กฐํ•˜๋Š” ๋“ฑ์˜ ์‹œ๋„๋ฅผ ํ•˜๋”๋ผ๋„ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ secret์„ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์œ ํšจํ•œ Signature๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๋Š” ์ด ๋‹จ๊ณ„์—์„œ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๋Š” ํ† ํฐ์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“ฃ  JWT์˜ ์ข…๋ฅ˜

1๏ธโƒฃ ์•ก์„ธ์Šค ํ† ํฐ

โœ”๏ธ ๋ณดํ˜ธ๋œ ์ •๋ณด๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ ๋ถ€์—ฌ์— ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ

 

2๏ธโƒฃ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ

โœ”๏ธ ์•ก์„ธ์Šค ํ† ํฐ์„ ์žฌ๋ฐœ๊ธ‰ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ

 

โžฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฒ˜์Œ ์ธ์ฆ์„ ๋ฐ›์„ ๋•Œ(๋กœ๊ทธ์ธ ์‹œ) ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ๋ฐ›์ง€๋งŒ, ์‹ค์ œ๋กœ ๊ถŒํ•œ์„ ์–ป๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ํ† ํฐ์€ ์•ก์„ธ์Šค ํ† ํฐ์ด๋‹ค. ์ด ํ† ํฐ์˜ ์œ ํšจ๊ธฐ๊ฐ„์ด ๋งŒ๋ฃŒ๋œ๋‹ค๋ฉด ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ์ด์šฉํ•ด ์žฌ๋ฐœ๊ธ‰ ๋ฐ›๋Š”๋‹ค. ์ด๋•Œ ์œ ์ €๋Š” ๋‹ค์‹œ ๋กœ๊ทธ์ธ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

โžฐ ์•ก์„ธ์Šค ํ† ํฐ์—๋Š” ๋น„๊ต์  ์งง์€ ์œ ํšจ๊ธฐ๊ฐ„์„ ์ค˜์„œ ํƒˆ์ทจํ•˜๋”๋ผ๋„ ์˜ค๋ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

โžฐ ์œ ํšจ๊ธฐ๊ฐ„์ด ๊ธด ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์€ ํƒˆ์ทจ๋‹นํ•˜๋ฉด ํ”ผํ•ด๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ์›น์‚ฌ์ดํŠธ์—์„œ๋Š” ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ณณ๋„ ๋งŽ๋‹ค.

 

๐Ÿ“ฃ  ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ ์ ˆ์ฐจ

1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์•„์ด๋””/ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋‹ด์•„ ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

2. ์•„์ด๋””/๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ผ ์•”ํ˜ธํ™”๋œ ํ† ํฐ์„ ์ƒ์„ฑํ•œ๋‹ค.

    โžฐ ์•ก์„ธ์Šค ํ† ํฐ, ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ๋ชจ๋‘ ์ƒ์„ฑ

3. ์„œ๋ฒ„๊ฐ€ ํ† ํฐ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ด์ฃผ๋ฉด, ํด๋ผ์ด์–ธํŠธ๋Š” ํ† ํฐ์„ ์ €์žฅํ•œ๋‹ค.

4. ํด๋ผ์ด์–ธํŠธ๊ฐ€ HTTPํ—ค๋” ๋˜๋Š” ์ฟ ํ‚ค์— ํ† ํฐ์„ ๋‹ด์•„ ๋ณด๋‚ธ๋‹ค.

5. ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ๊ฒ€์ฆํ•˜์—ฌ ์ž์‹ ์ด ๋ฐœ๊ธ‰ํ•ด์ค€ ํ† ํฐ์ผ ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ์‘๋‹ต์„ ๋ณด๋‚ด์ค€๋‹ค.

    โžฐ ์„œ๋ฒ„๋Š” ํ† ํฐ์„ ๊ฒ€์ฆํ•  ๋•Œ, ํ† ํฐ์— ๋‹ด๊ธด Header์™€ Payload๋ฅผ ์„œ๋ฒ„์˜ secret์œผ๋กœ ์•”ํ˜ธํ™”ํ•œ ๊ฐ’์ด ํ† ํฐ์˜ Signature์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์•ˆํ•œ๋‹ค.

 

๐Ÿ“ฃ  ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ์žฅ์ 

1. Statelessness & Scalability(๋ฌด์ƒํƒœ์„ฑ & ํ™•์žฅ์„ฑ)

    โžฐ ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค(ํ† ํฐ์ด ํ•ด๋…๋˜๋Š”์ง€๋งŒ ํŒ๋‹จํ•˜๋ฉด ๋œ๋‹ค)

    โžฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์ƒˆ๋กœ์šด ์š”์ฒญ์„ ๋ณด๋‚ผ๋•Œ๋งˆ๋‹ค ํ† ํฐ์„ ๊ฐ™์ด ๋ณด๋‚ด๋ฉด ๋œ๋‹ค.

2. ์•ˆ์ „ํ•˜๋‹ค

    โžฐ ์•”ํ˜ธํ™” ๋œ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๊ณ , ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ๋…ธ์ถœ ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

3. ์–ด๋””์„œ๋‚˜ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค.

    โžฐ ํ† ํฐ์„ ํ™•์ธํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ํ† ํฐ์„ ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

4. ๊ถŒํ•œ ๋ถ€์—ฌ์— ์šฉ์ดํ•˜๋‹ค.

    โžฐ ํ† ํฐ์˜ Payload์— ์–ด๋–ค ์ •๋ณด์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ง€ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“ฃ  OAuth ๋ž€?

โœ”๏ธ ์ธ์ฆ์„ ์ค‘๊ฐœํ•ด์ฃผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜

โžฐ ๋ณด์•ˆ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ

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

 

๐Ÿ“ฃ  OAuth ๋Š” ์–ธ์ œ, ์™œ ์“ธ๊นŒ์š”?

โœ”๏ธ OAuth๋ฅผ ํ™œ์šฉํ•œ๋‹ค๋ฉด ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ณ  ์ค‘์š”ํ•œ ์„œ๋น„์Šค๋“ค์˜ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋งŒ ๊ธฐ์–ตํ•ด ๋†“๊ณ  ํ•ด๋‹น ์„œ๋น„๋“ค์„ ํ†ตํ•ด์„œ ์™ธ๋ถ€ ์„œ๋น„์Šค ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โžฐ ex) ์นด์นด์˜คํ†ก์œผ๋กœ ๋กœ๊ทธ์ธ, ๋„ค์ด๋ฒ„๋กœ ๋กœ๊ทธ์ธ

 

โœ”๏ธ ๋ณด์•ˆ์ƒ์˜ ์ด์ ์ด ์žˆ๋‹ค.

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

 

๐Ÿ“ฃ  OAuth ์—์„œ ๊ผญ ์•Œ์•„์•ผ ํ•  ์šฉ์–ด

1. Resource Owner : ์‚ฌ์šฉ์ž์ด๋ฉฐ ์ •๋ณด ์ œ๊ณต์ž์ด๊ธฐ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Resource Owner๋ผ๊ณ  ํ•œ๋‹ค.

2. Client: Resource Owner๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

3. Local Server: Client์˜ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„

4. Resource Server: ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„

5. Authorization Server: ์ธ์ฆ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๋กœ, Access Token์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์ธ์ฆ ์„œ๋ฒ„

6. Authorization Grant: Client๊ฐ€ Access Token์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธ

    ๏น’Authorization Code Grant Type

    ๏น’Refresh Token Grant Type

7. Authorization Code: Authorization Grant์˜ ํ•œ ํƒ€์ž…์œผ๋กœ Access Token์„ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์œ„ํ•œ Code๋ฅผ ์˜ํ•ฉ๋‹ˆ๋‹ค.

8. Access Token: ๋ณดํ˜ธ๋œ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฆ ํ† ํฐ์œผ๋กœ, ์ด Access Token์œผ๋กœ Resource Server์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

9. Refresh Token: ๋ฐœ๊ธ‰๋ฐ›์€ Access Token์ด ๋งŒ๋ฃŒ๋  ์‹œ Refresh Token์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด Access Token์„ ๋ฐ›๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“ฃ  OAuth ์ธ์ฆ ํ๋ฆ„

1๏ธโƒฃ Authorization Code Grant Type

โœ”๏ธ Authorization Code๋ฅผ ๋ฐ›์•„ Authorization Code๋ฅผ ํ†ตํ•ด Access Token์„ ๋ฐ›๋Š” ๋ฐฉ์‹์„ ๋งํ•œ๋‹ค.

โžฐ ๋กœ๊ทธ์ธ์— ์„ฑ๊ณตํ–ˆ๋‹ค๊ณ  ๋ฐ”๋กœ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ด ์ฃผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Authorization Code๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ์ถ”๊ฐ€๋กœ ์žˆ์–ด ๋” ์•ˆ์ „ํ•œ๋‹ค.

 

2๏ธโƒฃ Refresh Token Grant Type

โœ”๏ธ Authorization Code Grant Type ์œผ๋กœ Access Token์„ ๋ฐœ๊ธ‰๋ฐ›์€ ํ›„, Access Token์ด ๋งŒ๋ฃŒ๋œ ๊ฒฝ์šฐ Refresh Token์„ ํ™œ์šฉํ•ด ์ƒˆ๋กœ์šด Access Token์„ ๋ฐœ๊ธ‰๋ฐ›๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

โžฐ ์‚ฌ์šฉ์ž๋Š” ์ถ”๊ฐ€ ์ƒํ˜ธ ์ž‘์šฉ ์—†์ด ๊ณ„์† ์œ ํšจํ•œ ์•ก์„ธ์Šค ํ† ํฐ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.