โ๏ธ ์์
ํด์ฑ, ์ธ์
์ ํ๊ณ๋ฅผ ๋ณด์ํ ํ ํฐ์ ๋ํด ํ์ตํ๋ค.
๐ ์๊ฒ๋ ์
๐พ ํด์ฑ (Hashing)
- ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ์ํธํ ๋ฐฉ์ ์ค์ ํ๋
- ๋ณตํธํ๊ฐ ๊ฐ๋ฅํ ๋ค๋ฅธ ์ํธํ ๋ฐฉ์๋ค๊ณผ ๋ฌ๋ฆฌ, ์ํธํ๋ง ๊ฐ๋ฅ
- ํด์ ํจ์(Hash Function)๋ฅผ ์ฌ์ฉํด ์ํธํ๋ฅผ ์งํ
ํน์ง
- ํญ์ ๊ฐ์ ๊ธธ์ด์ ๋ฌธ์์ด ๋ฆฌํด
- ์๋ก ๋ค๋ฅธ ๋ฌธ์์ด์ ๋์ผํ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ๋์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ์ด ๋์จ๋ค.
(์๋ก ๋ค๋ฅธ ๋ฌธ์์ด >> ๋ค๋ฅธ ๊ฒฐ๊ณผ ๊ฐ)
- ๋์ผํ ๋ฌธ์์ด์ ๋์ผํ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ด ๋์จ๋ค.
(๋์ผํ ๋ฌธ์์ด >> ๊ฐ์ ๊ฒฐ๊ณผ ๊ฐ)
๋น๋ฐ๋ฒํธ | ํด์ ํจ์(SHA1) ๋ฆฌํด ๊ฐ |
---|
โpasswordโ | โ5BAA61E4C9B93F3F0682250B6CF8331B7EE68FD8โ |
โPasswordโ | โ8BE3C943B1609FFFBFC51AAD666D0A04ADF83C9Dโ |
โkimcodingโ | โ61D17C8312E8BC24D126BE182BC674704F954C5Aโ |
๐ SHA1 ํจ์ ์ง์ ์ฌ์ฉํด ๋ณด๊ธฐ
๋ ์ธ๋ณด์ฐ ํ
์ด๋ธ๊ณผ ์ํธ(Salt)
- ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ด ๋์จ๋ค๋ ํน์ฑ์ ์ด์ฉํด ํด์ ํจ์๋ฅผ ๊ฑฐ์น๊ธฐ ์ด์ ์ ๊ฐ์ ์์๋ผ ์ ์๋๋ก ๊ธฐ๋กํด ๋์ ํ์ธ ๋ ์ธ๋ณด์ฐ ํ
์ด๋ธ์ด ์กด์ฌํ๋ค.
- ๋ ์ธ๋ณด์ฐ ํ
์ด๋ธ์ ๊ธฐ๋ก๋ ๊ฐ์ ๊ฒฝ์ฐ ์ ์ถ์ด ๋์์ ๋ ํด์ฑ์ ํ๋๋ผ๋ ํด์ฑ ์ด์ ์ ๊ฐ์ ์์๋ผ ์ ์์ผ๋ฏ๋ก ๋ณด์์ ์ํ ๋ ์ ์๋ค.
์ด๋ ํ์ฉํ ์ ์๋ ๊ฒ์ด ์ํธ(Salt) ์ด๋ค.
- ์ํธ๋ ์๊ธ์ด๋ผ๋ ๋ป์ผ๋ก, ๋ง ๊ทธ๋๋ก ์๊ธ์ ์น๋ฏ ํด์ฑ ์ด์ ๊ฐ์ ์์์ ๊ฐ์ ๋ํด ๋ฐ์ดํฐ๊ฐ ์ ์ถ๋๋๋ผ๋ ํด์ฑ ์ด์ ์ ๊ฐ์ ์์๋ด๊ธฐ ๋์ฑ ์ด๋ ต๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค. (๋ค๋ฅธ ์์์ ๊ฐ์ ๋ํ๋ค.)
๋น๋ฐ๋ฒํธ | ํด์ ํจ์(SHA1) ๋ฆฌํด ๊ฐ |
---|
โpasswordโ + โsaltโ | โC88E9C67041A74E0357BEFDFF93F87DDE0904214โ |
โPasswordโ + โsaltโ | โ38A8FDE622C0CF723934BA7138A72BEACCFC69D4โ |
โkimcodingโ + โsaltโ | โ8607976121653D418DDA5F6379EB0324CA8618E6โ |
ํด์ฑ์ ๋ชฉ์
๋ณตํธํ๊ฐ ๋ถ๊ฐ๋ฅํ ์ํธํ ๋ฐฉ์์ธ๋ฐ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ฐ๋ก
๋ฐ์ดํฐ ๊ทธ ์์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋, ๋์ผํ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ์ฌ๋ถ๋ง ํ์ธํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค.
- ํด์ฑํ ๊ฐ๋ผ๋ฆฌ ๋น๊ตํด์ ์ผ์น ํ๋์ง ํ์ธ ํ์ธํ๋ค.
- ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ์ด์ผ ํ๋ ์ํฉ์์ ๋ฐ์ดํฐ ์ ์ถ์ ์ํ์ฑ์ ์ค์ด๊ณ
- ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ ๋จ๋ฐฉํฅ ์ํธํ ๋ฐฉ์
๐ช ํ ํฐ(Token)
๊ธฐ์กด ์ธ์
๊ธฐ๋ฐ ์ธ์ฆ์ด ๊ฐ์ง๊ณ ์๋ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ณ ์ ๊ณ ์ ๋๋ค.
(์๋ฒ ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํด)
- ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด(Authentication)์ ๊ถํ ์ ๋ณด(Authorization)๋ฅผ ํฌํจํ ์ ๋ณด๋ฅผ ๋ด์ ์ํธํ๋ ๋ฌธ์์ด
- ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ง์ด ์ฌ์ฉ๋๋ ์ธ์ฆ ๋ฐฉ์ ์ค ํ๋
- ์ฌ์ฉ์์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ ์ธก์์ ์ ์ฅํ ์ ์๋ค.
- ์ธ์
์ ์ธ์ฆ ๋ฐฉ์๊ณผ ๋น๊ตํ์ ๋ ์๋ฒ์ ๋ถํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ์ค์ผ ์ ์๋ค.
์ฅ์
๋ฌด์ํ์ฑ
- ์๋ฒ๊ฐ ์ ์ ์ ์ธ์ฆ ์ํ๋ฅผ ๊ด๋ฆฌํ์ง ์๋๋ค.
- ์๋ฒ๋ ๋น๋ฐ ํค๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์์ ๋ณด๋ธ ํ ํฐ์ ์ ํจ์ฑ๋ง ๊ฒ์ฆํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ๋ฌด์ํ์ ์ธ ์ํคํ
์ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋ค.
ํ์ฅ์ฑ
- ๋ค์์ ์๋ฒ๊ฐ ๊ณตํต๋ ์ธ์
๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง ํ์๊ฐ ์๋ค(์๋ฒ๋ฅผ ํ์ฅํ๊ธฐ ๋ ์ฉ์ด)
์ด๋์๋ ํ ํฐ ์์ฑ ๊ฐ๋ฅ
- ํ ํฐ ์์ฑ/๊ฒ์ฆ์ด ํ๋์ ์๋ฒ์์ ์ด๋ฃจ์ด์ง์ง ์์๋ ๋๊ธฐ์ ํ ํฐ ์์ฑ๋ง์ ๋ด๋นํ๋ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋ค.(์ ํ์ฉํ๋ฉด ์ฌ๋ฌ ์๋น์ค ๊ฐ์ ๊ณตํต๋ ์ธ์ฆ ์๋ฒ๋ฅผ ๊ตฌํํ ์ ์๋ค.)
๊ถํ ๋ถ์ฌ์ ์ฉ์ด
- ์ธ์ฆ ์ํ, ์ ๊ทผ ๊ถํ ๋ฑ ๋ค์ํ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๊ธฐ์ ์ฌ์ฉ์ ๊ถํ ๋ถ์ฌ์ ์ฉ์ด(์ ํ์ฉํด ์ด๋๋ฏผ ๊ถํ ๋ถ์ฌ ๋ฐ ์ ๋ณด์ ์ ๊ทผํ ์ ์๋ ๋ฒ์๋ ์ค์ ํ ์ ์๋ค.)
JWT (JSON Web Token)
- ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ ๊ตฌํ ์ ๋ํ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ธฐ์
- JSON ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์ด๋ฅผ ํ ํฐ์ผ๋ก ์ํธํํด ์ ์กํ ์ ์๋ ๊ธฐ์
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ํธํ๋ JWT ํ ํฐ์ผ๋ก ์ ๊ณตํ๊ณ ,
์๋ฒ๋ ์ด ํ ํฐ์ ๊ฒ์ฆํด ์ธ์ฆ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
JWT์ ๊ตฌ์ฑ
.
์ผ๋ก ๋๋ ์ง ์ธ ๋ถ๋ถ์ด ์กด์ฌํ๋ค.
- (ex -
aaaa.bbbb.cccc
) ๊ฐ๊ฐ Header, Payload, Signature๋ผ๊ณ ํ๋ค.
- HTTP์ ํค๋์ฒ๋ผ ํด๋น ํ ํฐ ์์ฒด๋ฅผ ์ค๋ช
ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ด๊ธด๋ค.
- ํ ํฐ์ ์ข
๋ฅ, ์๊ทธ๋์ฒ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ ์๊ณ ๋ฆฌ์ฆ์ JSON ํํ๋ก ์์ฑ
{
"alg": "HS256",
"typ": "JWT"
}
base64 ๋ฐฉ์์ผ๋ก ์ธ์ฝ๋ฉํ๋ฉด JWT์ ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์ธ Header๊ฐ ์์ฑ๋๋ค.
2. Payload
- TTP์ ํ์ด๋ก๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ฌํ๋ ค๋ ๋ด์ฉ๋ฌผ์ ๋ด๊ณ ์๋ ๋ถ๋ถ์ด๋ค.
- ์ ๋ณด์ ์ ๊ทผ ๊ฐ๋ฅํ์ง์ ๋ํ ๊ถํ, ์ ์ ์ ์ด๋ฆ๊ณผ ๊ฐ์ ๊ฐ์ธ์ ๋ณด, ํ ํฐ์ ๋ฐ๊ธ ์๊ฐ ๋ฐ ๋ง๋ฃ ์๊ฐ ๋ฑ์ ์ ๋ณด๋ค์ JSON ํํ๋ก ๋ด๋๋ค.
{
"sub": "someInformation",
"name": "phillip",
"iat": 151623391
}
JSON ๊ฐ์ฒด๋ฅผ base64๋ก ์ธ์ฝ๋ฉํ๋ฉด JWT์ ๋ ๋ฒ์งธ ๋ถ๋ถ์ธ Payload๊ฐ ์์ฑ๋๋ค.
base64 ๋ฐฉ์์ ์ํ๋ค๋ฉด ์ผ๋ง๋ ์ง ๋์ฝ๋ฉํ ์ ์๋ ์ธ์ฝ๋ฉ ๋ฐฉ์์ด๋ค.
3. Signature
- ํ ํฐ์ ๋ฌด๊ฒฐ์ฑ์ ํ์ธํ ์ ์๋ ๋ถ๋ถ์ด๋ค.
- Header์ Payload๊ฐ ์์ฑ ๋์์ ๊ฒฝ์ฐ Signature๋ ์ด๋ฅผ ์๋ฒ์ ๋น๋ฐ ํค(์ํธํ์ ์ถ๊ฐํ salt)์ Header์์ ์ง์ ํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ํด์ฑํ๋ค.
HMACSHA256(base64UrlEncode(header) + '.' + base64UrlEncode(payload), secret);
์์ด๊ธฐ ์ํด ํ ํฐ์ Payload๋ฅผ ๋ณ์กฐํ๋ ๋ฑ์ ์๋ํด๋ ํ ํฐ์ ๋ฐ๊ธํ ๋ ์ฌ์ฉํ Secret์ ์ ํํ๊ฒ ์๊ณ ์์ง ๋ชปํ๋ค๋ฉด ์ ํจํ Signature๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๊ธฐ์ ์๋ฒ๋ Signature๋ฅผ ๊ฒ์ฆํ๋ ๋จ๊ณ์์ ์ฌ๋ฐ๋ฅด์ง ์์ ํ ํฐ์์ ์์๋ผ ์ ์๋ค.
ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ํ๊ณ
Signature์ ์ฌ์ฉํด ์์กฐ๋ ํ ํฐ์ ์์๋ผ ์ ์์ง๋ง, ํ ํฐ ์์ฒด๊ฐ ํ์ทจ๋๋ค๋ฉด ํ ํฐ ์ธ์ฆ ๋ฐฉ์์ ํ๊ณ๊ฐ ๋๋ฌ๋๋ค.
๋ฌด์ํ์ฑ
- ์ธ์ฆ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ฃผ์ฒด๊ฐ ์๋ฒ๊ฐ ์๋๋ฏ๋ก, ํ ํฐ์ด ํ์ทจ๋์ด๋ ํด๋น ํ ํฐ์ ๊ฐ์ ๋ก ๋ง๋ฃ์ํฌ ์ ์๋ค.(ํ ํฐ์ด ๋ง๋ฃ๋ ๋๊น์ง ์ฌ์ฉ์๋ก ๊ฐ์ฅํด ๊ณ์ํด์ ์์ฒญ ๋ณด๋ผ ์ ์๋ค.)
์ ํจ ๊ธฐ๊ฐ
- ํ ํฐ์ด ํ์ทจ๋๋ ์ํฉ์ ๋๋นํด ์ ํจ ๊ธฐ๊ฐ์ ์งง๊ฒ ์ค์ ํ๋ฉด, ์ฌ์ฉ์๋ ํ ํฐ์ด ๋ง๋ฃ๋ ๋๋ง๋ค ๋ค์ ๋ก๊ทธ์ธ์ ์งํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ข์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ค.
(์ ํจ ๊ธฐ๊ฐ์ ๊ธธ๊ฒ ์ค์ ํ๋ฉด ํ์ทจ๋ ๊ฒฝ์ฐ ๋ ์น๋ช
์ ์ผ๋ก ์์ฉํ ์ ์๋ค. - ๋ฌด์ํ์ฑ)
ํ ํฐ์ ํฌ๊ธฐ
- ํ ํฐ์ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๋ ๋งํผ, ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ผ๋ฉด ๊ทธ๋งํผ ์ํธํํ๋ ๊ณผ์ ๋ ๊ธธ์ด์ง๊ณ ํ ํฐ์ ํฌ๊ธฐ๋ ์ปค์ง๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ ๋น์ฉ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
ํ ํฐ ์ธ์ฆ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ค์ํ ๋ฐฉ๋ฒ๋ค
Access Token
- ์๋ฒ์ ์ ๊ทผํ๊ธฐ ์ํ ํ ํฐ์ผ๋ก ์์ ๋ค๋ฃฌ ํ ํฐ๊ณผ ๋น์ทํ ์ญํ ์ ํ๋ค. (๋ณด์์ ์ํด ๋ณดํต 24์๊ฐ ์ ๋์ ์งง์ ์ ํจ๊ธฐ๊ฐ์ด ์ค์ ๋์ด ์๋ค.)
Refresh Token
- ์๋ฒ ์ ๊ทผ์ ์ํ ํ ํฐ์ด ์๋ ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋์์ ๋ ์๋ก์ด ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธ๋ฐ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ ํฐ(์ก์ธ์ค ํ ํฐ๋ณด๋ค ๊ธด ์ ํจ๊ธฐ๊ฐ์ ์ค์ ํ๋ค.)
- ๋ฆฌํ๋ ์ ํ ํฐ๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ ์ธ์
์ฒ๋ผ ์๋ฒ์ ์ ์ฅํ๊ณ ์ด์ ๋ํ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ๋ ํ๋ค.
๋ ๊ฐ์ง์ ๊ฐ๊ธฐ ๋ค๋ฅธ ํ ํฐ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ก์ธ์ค ํ ํฐ์ด ๋ง๋ฃ๋๋๋ผ๋ ๋ฆฌํ๋ ์ ํ ํฐ์ ์ ํจ๊ธฐ๊ฐ์ด ๋จ์ ์๋ค๋ฉด ์ฌ์ฉ์๋ ๋ค์ ๋ก๊ทธ์ธ์ ํ ํ์ ์์ด ์ง์ํด์ ์ธ์ฆ ์ํ๋ฅผ ์ ์งํ ์ ์๋ค.
โ๏ธ ๋ง์น๋ฉฐ
์ด์ ์ ์ฟ ํค, ์ธ์
์ ํ์ตํ๊ณ ์ค๋ ํ ํฐ์ ๋ํด ํ์ตํ๋ค.
๋ชจ๋ ๋ณด์์ ๋ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ณด์๋ ๋ฐฉ๋ฒ์ด๋ผ๋
์๋ฒฝํ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ค.
๊ฐ๋ฐ๊ฐ์ ๊ตฌํํ๋ ค๋ ์๋น์ค์ ๋ฐ๋ผ ์ด๋ค ์ธ์ฆ ๋ฐฉ์์ด ๋ ์ ์ ํ ์ง ํ๋จ ํ ์ ์์ด์ผ๊ฒ ๋ค.