- ํ์๊ฐ์ ์ 1> ๐๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธํ๋(hashed) ๋น๋ฐ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
- ๋ก๊ทธ์ธ ์ฑ๊ณต์ 2> ๐JWT๋ฅผ ๋ฐํํด http response๋ฅผ ํตํด ํ๋ก ํธ ์๋ฒ๋ก ์ ๋ฌํ๋ ๋ฐฉ์
- 3> ๐Http request์์ JWT๋ฅผ ํตํด ์ฌ์ฉ์๋ฅผ ํ๋ณํ๋ ๊ณผ์ ๊น์ง ์ง์ ํด๋ณด์ข์~
Authentication
์ ์ ์ ์ identification, ์ฆ ์ ์์ ํ์ธํ๋ ์ ์ฐจ์ด๋ค.- ์ด๋ฅผ ํ์ด์ ๋งํ๋ฉด ์ ์ ์ ์์ด๋์ ๋น๋ฒ์ ํ์ธํ๋ ์ ์ฐจ๋ฅผ ๋งํ๋ค.
- Authentication ์ ์ฐจ
- ์ ์ ๊ฐ ํ์๊ฐ์ ์ ํตํด ์์ด๋์ ๋น๋ฒ์ ๋ง๋ ๋ค.
- ์ ์ ์ ๋น๋ฐ ๋ฒํธ๋ฅผ
์ํธํ
ํด์ DB์ ์ ์ฅํ๋ค.- ์ ์ ๊ฐ ๋ก๊ทธ์ธ ์ ํ์๊ฐ์ ํ๋ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ค.
- ์ ์ ๊ฐ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ๋ฅผ
1>์ํธํ๐
ํ์ํธํ
๋์ DB์ ์ ์ ๋ ์ ์ ๋น๋ฐ๋ฒํธ์ ๋น๊ตํ๋ค.
=> ์ธ์ฆ- ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ๋ฉด ๋ก๊ทธ์ธ ์ฑ๊ณต์ ์๋ ค์ฃผ๊ณ ย
2>access token๐
์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํ๋ค.- ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ ์ ์ ๋ ๋ค์๋ถํฐย
access token๐
์ ์ฒจ๋ถํด request๋ฅผ ์๋ฒ์ ์ ์กํจ์ผ๋ก์ ๋งค๋ฒ ๋ก๊ทธ์ธํ์ง ์์๋ ๋๋ค.
=> ์ธ๊ฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ ์ ๋น๋ฐ๋ฒํธ ์ ์ฅ ์ ๊ฐ์ธ์ ๋ณด๋ฅผ ํด์ฑํ์ฌ ๋ณต์ํ ์ ์๋๋กํด์ผํ๋๋ฐ ์ด๋
๋จ๋ฐฉํฅ ํด์ฌ
ํจ์๊ฐ ์ฐ์ธ๋ค.
๋จ๋ฐฉํฅ ํด์ฌ
?
ํด์ฌ
๋ input์ ๋ฃ์ผ๋ฉด ํจ์๋ฅผ ๋๋ ค์ ์ ์ ์๋ ํํ์ output์ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋๋ฐ๋จ๋ฐฉํฅ ํด์ฌ
๋ output์ผ๋ก input์ ์ ์ถํ ์ ์๋ค๋ ๊ฒ์ผ๋ก ์ฆ, ๋ณตํธํ๋ฅผ ์งํํ ์ ์๋ ๊ฒ๊ณผ ๊ฐ๋ค.- ๋ณต์์ด ๋ถ๊ฐ๋ฅํ ๋จ๋ฐฉํฅ ํด์ฌํจ์๋ฅผ ์ด์ฉํด ์ํธํ์ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
- MD5, SHA-A์ SHA-256 ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ด ์กด์ฌํ๋ค.
-EX> ๋น๋ฐ๋ฒํธ '1234'๋ฅผ SHA-256์ผ๋ก ํด์ฑํ ๊ฒฐ๊ณผ๋ง์ ๊ฐ์ง๊ณ ๋ ์๋ณ์ด ๋ถ๊ฐ๋ฅํ๋ค.
-ํ์ง๋ง ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก '1234'๋ฅผ ๋ค์ ํด์ฑํ๋ฉด ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ถ๋์ดsalting
๊ณผkey stretching
ํค์๋๋ฅผ ํตํด ํด๋น ํ์ ์ ๋ณด์ํ ์ ์๋ค.
Salting
์ ์ค์ ๋น๋ฐ๋ฒํธ ์ด์ธ์ ์ถ๊ฐ์ ์ผ๋ก ๋๋ค ๋ฐ์ดํฐ(์์ ๋ฌธ์์ด)๋ฅผ ๋ํด์ ํด์๊ฐ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ๋งํ๊ณKey Stretching
์ ๋จ๋ฐฉํฅ ํด์ฌ๊ฐ์ ๊ณ์ฐ ํ ํ ๊ทธ ํด์ฌ๊ฐ์ ๋ ํด์ฌ ํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ ๊ฒ์ ๋งํ๋ค.
- ์ฆ, Salting KeyStretching์ ํ ๋ฒ ๊ผฌ์์ ์ํธํ๋ฅผ ํ๋ ๋ชฉ์ ์ ์ํด ํ์ํ๊ฒ ๋์๋ค.
- ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ์
์์๋ก ์์ฑํ ๋ฌธ์์ด (=Salt)
์ ํฉ์ณ์ ํด์ฑํ์ฌ ํด์๊ฐ์ ์ ์ฅํ ๋คsalt + hash๋ฅผ ๋ฌดํ์ ์ผ๋ก ๋๋ฆฌ๋(key Stretching)
๊ณผ์ ์ ๊ฑฐ์น๋ฉด ๋๋ค.
Salting
๊ณผKey Stretching
์ ๊ตฌํํ ํด์ฌ ํจ์์ค ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐbcrypt
bcrypt
๋ ๋น๋ฐ๋ฒํธ๋ฅผ ๋จ๋ฐฉํฅ ์ํธํํ๊ธฐ ์ํด ๋ง๋ค์ด์ ํด์ฌํจ์๋ฅผ ์๋ฏธํ๋ค.- ๊ณผ์ ์ 1. ๋น๋ฐ๋ฒํธ ์ํธํ ํ 2. Salting๊ณผ ํด์๊ฐ, Key stretching์ ๋ฐ๋ณตํ์๋ฅผ ๊ฐ์ด ๋ณด๊ดํ๋ค.
Authorization
์ ์ ์ ๊ฐ ์์ฒญํ๋ request๋ฅผ ์คํํ ์ ์๋ ๊ถํ์ด ์๋ ์ ์ ์ธ๊ฐ๋ฅผ ํ์ธํ๋ ์ ์ฐจ๋ฅผ ์๋ฏธํ๋ค.- ์ด๋ฌํ
Authroization
์ ์ฐจ๋ JWT๋ฅผ ํตํด์ ๊ตฌํ๊ฐ๋ฅํ๊ณaccess token
์ ํตํด ํด๋น ์ ์ ์ ๋ณด๋ฅผ ์ป์ด ํด๋น ์ ์ ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ถํ์ ํ์ธํ๋ค.
- Authorization ์ ์ฐจ
- Authorization ๊ณผ์ ์์
access token
์ ์์ฑํ๋๋ฐaccess token
์ ์ ์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ์ ๋ณด๊ฐ ๋ค์ด๊ฐ ์๋ค.
(๊ฐ๋ น user id ์ ๋)- ์ ์ ๊ฐ ์์ฒญ์ ๋ณด๋ผ๋ย
access token
์ ์์ฒญ์ ํจ๊ป ์ฒจ๋ถํด์ ์๋ฒ๋ก ๋ณด๋ธ๋ค.- ์๋ฒ์์๋ ์ ์ ๊ฐ ๋ณด๋ธย
access token
์ ๋ณตํธํ(์๋ฐฉํฅ ํด์ฌํ ๊ฐ๋ฅ)ํ์ฌ ๋ณตํธํ๋ ๋ฐ์ดํฐ๋ก user id๋ฅผ ์ป๋๋ค.- user id๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํด๋น ์ ์ ์ ๊ถํ์ ํ์ธํ๋ค.
- ์ ์ ๊ฐ ๊ถํ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํด์ฃผ๊ณ ์ ์ ๊ฐ ๊ถํ์ ๊ฐ์ง๊ณ ์์ง ์์ผ๋ฉด Unauthorized Response(401) ํน์ ๋ค๋ฅธ ์๋ฌ ์ฝ๋๋ฅผ ๋ณด๋ด์ฃผ๋ ์๋ต์ ํด์ค๋ค.
- ์ ์ ๊ฐ 1> ๋ก๊ทธ์ธ์ ํ๋ฉดย 2>
access token
, ์ํธํ๋ ์ ์ ์ ๋ณด๋ฅผ ์ฒจ๋ถํด์ request๋ฅผ ๋ณด๋ด๋ฉด 3> ์๋ฒ์์๋ยaccess token
์ ๋ณตํธํ ํด์ ํด๋น ์ ์ ์ ๋ณด๋ฅผ ์ป๋๋ฐ ์ด๋ฌํ ๊ณผ์ ์์๋ฐฉํฅ ์ํธํ
๋ผ๊ณ ํ๋ค.
-EX> ๊ฐ๋ น ์ ์ ๊ฐ ๋ก๊ทธ์ธ ์access token
์ ํจ๊ป ์ฒจ๋ถํด์ ์๋ฒ์ ์์ฒญ์ ํ๋คPOST /auth HTTP/1.1 Host: localhost:5000 Content-Type: application/json // ์ ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ { "username": "joe", "password": "pass" } // access token HTTP/1.1 200 OK Content-Type: application/json { "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E" }
- ์์ฒญ์ ๋ด๊ธด
access token
์ ๋ณตํธํํ๋ฉด ํด๋น ์ ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ด์ ํด๋น ์ ์ ๊ฐ ๋งค๋ฒ ๋ก๊ทธ์ธ ํ์ง ์์๋ ๋๋๋ก์ธ๊ฐ
๋ฅผ ํด์ค๋ค.{ user_id = 1 }
JWT
๋access token
์ ์์ฑํ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ๋ณดํธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ์ ์ค ํ๋๋ฅผ ์๋ฏธํ๋ค.- ์ ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ JSON ๋ฐ์ดํฐ๋ฅผ ์ํธํ ํด์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ์ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ์ธ์ฆ, ์ธ๊ฐ์ ์์ด ํด์ฌํ JWT๋ฅผ ํตํ ์ฌ์ฉ์ ์๋ณ๊น์ง ํฐ ํ๋ฆ์ ์ดํดํ์.
- ๊น๋ง๋ํ ์ธ์ ๊ฐ์ ์ค:[