๐ ์ธ์ฆ(Authentication)
์ ์ (User)์ identification์ ํ์ธํ๋ ์ ์ฐจ. ์ฆ, ์ ์ ์ ์์ด๋์ ๋น๋ฒ์ ํ์ธํ๋ ์ ์ฐจ์ด๋ค.
๐ ๋ก๊ทธ์ธ ์ ์ฐจ
- User ์์ด๋์ ๋น๋ฒ ์์ฑ.
- User์ ๋น๋ฒ์ ์ํธํ ํด์ DB์ ์ ์ฅ.
- User๊ฐ ๋ก๊ทธ์ธ -> ์์ด๋์ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ
- User๊ฐ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํ ํ ํ ์ํธํ๋์ DB์ ์ ์ ๋ ์ ์ ๋น๋ฐ๋ฒํธ์ ๋น๊ตํจ.
- ์ผ์นํ๋ฉด ๋ก๊ทธ์ธ ์ฑ๊ณต!
- ๋ก๊ทธ์ธ ์ฑ๊ณตํ๋ฉด access token์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก.
- User๋ ๋ก๊ทธ์ธ ์ฑ๊ณตํ ๋ค์๋ถํฐ๋ access token์ ์ฒจ๋ถํด์ request๋ฅผ ์๋ฒ์ ์ ์กํจ์ผ๋ก์ ๋งค๋ฒ ๋ก๊ทธ์ธ ํ์ง ์์๋ ๋๊ฒ ํ๋ค.
๐ ์ ์ ๋น๋ฐ๋ฒํธ ์ํธํ
โ๏ธ ์ ์ ์ ๋น๋ฐ๋ฒํธ๋ ์ ๋ ๋น๋ฐ๋ฒํธ ๊ทธ๋๋ก DB์ ์ ์ฅํ์ง ์๋๋ค!
- DB๊ฐ ํดํน์ ๋นํ๋ฉด ์ ์ ์ ๋น๋ฐ๋ฒํธ๋ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ค.
- ์ธ๋ถ ํดํน์ด ์๋๋๋ผ๋ ๋ด๋ถ ๊ฐ๋ฐ์๋ ์ธ๋ ฅ์ด ์ ์ ๋ค์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณผ ์ ์๋ค.
โ๏ธ ์ ์ ์ ๋น๋ฐ๋ฒํธ๋ ๊ผญ ์ํธํ ํด์ ์ ์ฅ ํด์ผ ํ๋ค!
- ์ํธํ ํด์ ์ ์ฅํ๋ฉด DB๊ฐ ํดํน์ ๋นํด๋ ๋น๋ฐ๋ฒํธ๊ฐ ๊ทธ๋๋ก ๋ ธ์ถ๋์ง ์์ผ๋ฉฐ ๋ด๋ถ ์ธ๋ ฅ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์๊ฐ ์๋ค.
โ๏ธ ๋น๋ฐ๋ฒํธ ์ํธ์๋ ๋จ๋ฐฉํฅ ํด์ ํจ์(one-way hash function)๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ธ๋ค!
- ๋จ๋ฐฉํฅ ํด์ ํจ์๋ ์๋ณธ ๋ฉ์์ง๋ฅผ ๋ณํํ์ฌ ์ํธํ๋ ๋ฉ์์ง์ธ ๋ค์ด์ ์คํธ(digest)๋ฅผ ์์ฑํ๋ค. ์๋ณธ ๋ฉ์์ง๋ฅผ ์๋ฉด ์ํธํ๋ ๋ฉ์์ง๋ฅผ ๊ตฌํ๊ธฐ๋ ์ฝ์ง๋ง, ์ํธํ๋ ๋ฉ์์ง๋ก๋ ์๋ณธ ๋ฉ์์ง๋ฅผ ๊ตฌํ ์ ์์ด์ ๋จ๋ฐฉํฅ์ฑ(one-way) ์ด๋ผ๊ณ ํ๋ค.
- ์๋ฅผ ๋ค์ด, "test password"๋ฅผ hash256์ด๋ผ๋ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด 0b47c69b1033498d5f33f5f7d97bb6a3126134751629f4d0185c115db44c094e ๊ฐ์ด ๋์จ๋ค.
- ๋ง์ผ "test password2"๋ฅผ hash256์ด๋ผ๋ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด d34b32af5c7bc7f54153e2fdddf251550e7011e846b465e64207e8ccda4c1aeb ๊ฐ์ด ๋์จ๋ค. ์ค์ ๋น๋ฐ๋ฒํธ๋ ๋น์ทํ์ง๋ง ํด์ ํจ์ ๊ฐ์ ์์ ํ ํ๋ฆฐ๊ฒ์ ํ์ธ ํ ์ ์๋ค. ์ด๋ฌํ ํจ๊ณผ๋ฅผ avalance๋ผ๊ณ ํ๋๋ฐ ๋น๋ฐ๋ฒํธ ํด์ ๊ฐ์ ํดํนํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ํ๋์ ์์์ด๋ค.
- ๋จ๋ฐฉํฅ ํด์ ํจ์์ ๋จ์
๋ ์ธ๋ณด์ฐ ๊ณต๊ฒฉ
๋ฌด์ฐจ๋ณ ๋์ ๊ณต๊ฒฉ
๐ ๋จ๋ฐฉํฅ ํด์ ํจ์์ ๋ณด์์
๐ Salting
์ค์ ๋น๋ฐ๋ฒํธ ์ด์ธ์ ์ถ๊ฐ์ ์ผ๋ก ๋๋ค ๋ฐ์ดํฐ๋ฅผ ๋ํด์ ํด์๊ฐ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ.
๐ Key Stretching
๋จ๋ฐฉํฅ ํด์๊ฐ์ ๊ณ์ฐํ ํ ๊ทธ ํด์๊ฐ์ ๋ ํด์ํ๊ณ , ์ด๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ ๋งํ๋ค.
- ์ต๊ทผ์๋ ์ผ๋ฐ์ ์ธ ์ฅ๋น๋ก 1์ด์ 50์ต ๊ฐ ์ด์์ ๋ค์ด์ ์คํธ๋ฅผ ๋น๊ตํ ์ ์์ง๋ง, ํค ์คํธ๋ ์นญ์ ์ ์ฉํ์ฌ ๋์ผํ ์ฅ๋น์์ 1์ด์ 5๋ฒ ์ ๋๋ง ๋น๊ตํ ์ ์๊ฒ ํ๋ค. GPU(Graphics Processing Unit)๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์๋ฐฑ์์ ์์ฒ ๋ฒ ์ ๋๋ง ๋น๊ตํ ์ ์๋ค. 50์ต ๋ฒ๊ณผ๋ ๋น๊ตํ ์๋ ์์ ์ ๋๋ก ์ ์ ํ์๋ค. ์์ผ๋ก ์ปดํจํฐ ์ฑ๋ฅ์ด ๋ ํฅ์๋๋ฉด ๋ช ๋ฒ์ ๋ฐ๋ณต์ ์ถ๊ฐํ์ฌ ๋ณด์ํ ์ ์๋ค.
๐ Bcrypt
DB์ ์ ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ ๋, ๋น๋ฐ๋ฒํธ์ ๊ฐ์ด ์ํธํ๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก ํด์ฃผ๋ password hashing ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- Salting & Key Stretching ๋ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- ์ฒ์๋ถํฐ ๋น๋ฐ๋ฒํธ๋ฅผ ๋จ๋ฐฉํฅ ์ํธํ ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํด์ ํจ์.
- ๋ค์ํ ์ธ์ด๋ฅผ ์ง์ํ๊ณ ์์ผ๋ฉฐ, ์ฌ์ฉ์ด ๊ฐํธํ์ฌ ์ฝ๊ฒ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- bcrypt ํด์ ๊ฒฐ๊ณผ๊ฐ์ ์๊ธ๊ฐ๊ณผ ํด์๊ฐ ๋ฐ ๋ฐ๋ณตํ์๋ฅผ ๊ฐ์ด ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์ DB ์ค๊ณ๋ฅผ ๋ณต์กํ๊ฒ ํ ํ์๊ฐ ์๋ค.
๐ JWT(JSON Web Tokens)
์ ์ ์ ๋ณด๋ฅผ ๋ด์ JSON ๋ฐ์ดํฐ๋ฅผ ์ํธํ ํด์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ.
- access token์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋๋ฐ, ๊ทธ ์ค ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ธฐ์ ์ค ํ๋๊ฐ ๋ฐ๋ก JWT์ด๋ค.
- ์๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ง์์ด ๋จ.
- ์๊ฐ ์์ฉ์ . ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์์ฒด์ ์ผ๋ก ์ง๋๊ณ ์๋ค.
- ๋ ๊ฐ์ฒด ์ฌ์ด์์ ์์ฝ๊ฒ ์ ๋ฌ ๊ฐ๋ฅ.
'Front-End' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Refactoring(๋ฆฌํฉํ ๋ง) (0) | 2021.11.21 |
---|---|
Frontend Framework(Library) (0) | 2021.11.21 |
์ธ๊ฐ(Authorization) (0) | 2021.11.18 |
Self Refactoring Tip (0) | 2021.11.17 |
RESTful API ๋? (0) | 2021.11.15 |
๋๊ธ