Jieunny์ ๋ธ๋ก๊ทธ
S3) Unit 7. [Backend] Hashing / Token / OAuth ๋ณธ๋ฌธ
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์ ๋ฐ๊ธ๋ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
โฐ ์ฌ์ฉ์๋ ์ถ๊ฐ ์ํธ ์์ฉ ์์ด ๊ณ์ ์ ํจํ ์ก์ธ์ค ํ ํฐ์ ๊ฐ์ง ์ ์๋ค.
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S4) Unit 1. [์๋ฃ๊ตฌ์กฐ/ ์๊ณ ๋ฆฌ์ฆ] ์๋ฃ๊ตฌ์กฐ & Stack & Queue (2) | 2023.03.14 |
---|---|
Section 3. [๊ธฐ์ ๋ฉด์ ] (0) | 2023.03.13 |
S3) Unit 7. [Backend] Cookie / Session (0) | 2023.03.07 |
S3) Unit 6. [๋คํธ์ํฌ] HTTP & HTTPS (0) | 2023.03.06 |
S3) Unit 6. [๋คํธ์ํฌ] TCP/IP & ๋คํธ์ํฌ ๊ณ์ธต ๋ชจ๋ธ (0) | 2023.03.06 |