์ด๋ฒ์ ์กธ์ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ค๊ฐ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํ์ ํ๋๋ฐ
๊ทธ๋ฅ ID / Password ๊ฐ์ ๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๊ตํ๋ ๊ทธ๋ฐ ๋ก์ง์ ์ง๊ธฐ ์ซ์๋ค.
๊ทธ๋์ ์น๊ตฌ๋ค๊ณผ ํ์๋ฅผ ํตํด์ ์ฌ์ฉํ๊ฒ ๋ JWT(Json Web Token).
์น๊ตฌ๋ค์ด JWT๋ฅผ ์ฐ์๊ณ ํด์ ์ด๊ฑฐ์ง ์ ํํ๊ฒ ์ ์ฐ๋์ง ๋ชจ๋ฅด๊ณ ์ฐ๋๊ฑด ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋์ ์ ๋ฆฌํ๋ ๊น์ ํ์คํ๊ฒ ํ๊ณ ๊ฐ์๋ ์ทจ์ง๋ก ์์ฑ๋ ๊ธ.
์ ๊ฐ์๊ธฐ HTTP์ ๋ํด์ ๋์ค๋์ง ๊ถ๊ธํ ์ ์๋ค.
"๋ก๊ทธ์ธ" ์ด๋ผ๋ ๊ณผ์ ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํต์ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
๊ทธ ํต์ ๋ฐฉ๋ฒ์ด HTTP ๋ผ๋ ํ๋กํ ์ฝ(ํต์ ๋ฐฉ๋ฒ)์ด๋ค.
HTTP์๋ ๋ช ๊ฐ์ง ํน์ฑ์ด ์๋ค.
HTTP๋ ์ฐ๊ฒฐ์ ์ ์งํ์ง ์๋๋ค.
๋ผ๋ ํน์ฑ์ด๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ํ๋ฒ ํต์ ์ด ์ผ์ด๋๊ณ ๋๋ฉด
๊ทธ ์ฐ๊ฒฐ์ด ์ ์ง๊ฐ ๋๋ ๊ฒ์ด ์๋๋ผ ๋ฐ๋ก ๋์ด์ง๋ค.
HTTP๋ ์ํ๋ฅผ ์ ์งํ์ง ์๋๋ค.
๋ผ๋ ํน์ฑ์ด๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ์ฒซ๋ฒ์งธ ํต์ ์ ํ๊ณ ๋์ ๋๋ฒ์งธ ํต์ ์ ํ ๋๋
์ด์ ์ ํต์ ์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ์๋กญ๊ฒ ๊ฐฑ์ ์ ํด์ฃผ์ด์ผ ํ๋ค.
์์ ํน์ฑ๋ค ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ "๋ก๊ทธ์ธ"์ ๊ตฌํํ๋๋ฐ ๋ง์ ์ด๋ ค์์ด ์๋ค.
์ฌ์ฉ์๊ฐ ๋งค๋ฒ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ ๋ ๋ง๋ค
์์ ์ด ๋๊ตฌ์ธ์ง ๊ณ์ํด์ ์ธ์ฆ์ ํด์ฃผ์ด์ผ ํ๋ค๋ ๊ฒ.
๋งค๋ฒ ์๋ฒ์ ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ์ธ์ฆ์ ํ๋ ๊ณผ์ ์ ๋ฒ๊ฑฐ๋กญ๊ณ ๊ท์ฐฎ์ ๋ฟ๋ง ์๋๋ผ
๋งค๋ฒ ์์ฒญ์ ๋ณด๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ์ ์นํ์ด์ง๊ฐ ๋๋ ค์ง๋ ์์ธ์ด ๋๋ค.
์์ ์์ธ๊ณผ ์ด์ ๋ก ์ฐ๋ฆฌ๋
์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ๊ณ์ํด์ ์ธ์ฆ์ ํ๋ ๋ฐฉ๋ฒ ๋์
๋ค๋ฅธ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ ์ง์ํฌ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
์๋ ๋ฐฉ๋ฒ๋ค์ ๋ก๊ทธ์ธ์ ์ ์ง ์ํฌ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํด๋ ๋ฌด๋ฐฉํ๋ค.
์์์ ์๊ธฐํ๋๋ก ์ ์ ์๊ฒ ID
/ Password
๋ฅผ ๋ฐ์์, ์๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ทธ๋ฅ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
ํด๋น ๋ฐฉ๋ฒ์ ๋ก๊ทธ์ธ ์ ์ง๊ฐ ์๋ ๋ฟ๋๋ฌ
์ ๋ณด๊ฐ ์ ์ง๋์ง ์์ผ๋ฉด, ๋งค๋ฒ ํ์ด์ง๋ฅผ ์ด๋ํ ๋๋ง๋ค ๋ก๊ทธ์ธ์ ๋ค์ ํ๊ฑฐ๋,
์ํ์ ์ ํํ๋๋ฐ ๊ตฌ๋งค ํ์ด์ง์์ ์ ํํ ์ํ์ ์ ๋ณด๊ฐ ์๊ฑฐ๋ ํ๋ ๋ฑ์ ์ผ์ด ๋ฐ์ํ ์ ์๋ค.
๋ฌด์ธ๊ฐ ๋ค๋ฅธ, ๋ก๊ทธ์ธ์ ์ ์งํ ์ ์๊ณ ์์ ํ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
Session (์ธ์ ) vs Token (ํ ํฐ)
๋๋ ๋ก๊ทธ์ธ์ ๊ตฌํํ ๋ ๋ชจ๋ JWT, JWT๋ง ์ธ์ณ์ JWT ๋ฐฉ์๋ฐ์ ์๋ ์ค ์์๋ค.
์ฐพ์๋ณด๋ ํ ํฐ ๋ฐฉ์๋ง๊ณ ๋ ์ธ์
๋ฐฉ์์ด ์์๋ค.
์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ ๋ณด์ ๋ํ ๊ฒ์ ์ด๋๋ค๊ฐ ์ ์ง, ์ ์ฅ์ ํ๋๋์ ๋ฐ๋ผ ๋ ๋ฐฉ์์ผ๋ก ๋๋๋ค.
์ธ์
๋ฐฉ์์ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ์๋ฒ์ ์์๋ค์ ์ฌ์ฉํด์
์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ ์ง์ํค๋ ๋ฐฉ์์ด๋ค.
์ด๋ฏธ์ง ์ถ์ฒ-JWT(Json Web Token)์ ์ ์ฌ์ฉ๋ ๊น
ํ ํฐ๋ฐฉ์๋ณด๋ค ๋ณด์์ ๊ฐํ๋ค๋ ์ฅ์ ์ด ์์ง๋ง
๋จ์ ์ผ๋ก๋ ์๋ฒ์ ํ์ฅ์ฑ์ด ๋จ์ด์ง๊ณ , ์๋ฒ์ ์์(์ธ์
์ ์ ์ฅ, ์ ์งํ ๊ณต๊ฐ)์ด ๋ง์ด ํ์ํ๋ค.
๋ํ ์ธ์
์ด ์๋ฒ์ ์ ์ฅ์ด ๋๊ณ , ํธ๋ํฝ ๋ถ์ฐ์ ์ํด์ ์ฌ๋ฌ ๋์ ์๋ฒ๋ฅผ ์ฌ์ฉํ ๋
๋ง์ฝ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ์ ๋๋ ๋ง๋ค์ด์ง ์ธ์
์ ์ฐธ์กฐํด์ผ ํ๊ธฐ ๋๋ฌธ์
์ฒ์ ๋ก๊ทธ์ธํ ๊ทธ ์๋ฒ์์๋ง ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค.
์ด๋ฌํ ์ด์ ๋๋ฌธ์ ์๋์ ๊ฐ์ ํ ํฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
ํ ํฐ ๋ฐฉ์์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ๋ฉด ์๋ฒ์์ ๋ฐํํด์ฃผ๋ ํ ํฐ์ ๊ฐ์ง๊ณ
๋ธ๋ผ์ฐ์ ์ ์ ์ฅ์์ ํ ํฐ์ ์ ์ง์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.
์๊ธฐ์ ๋งํ๋ ํ ํฐ์ด ์ฐ๋ฆฌ๊ฐ ๋งํ๋ JWT์ด๋ค.
์๋ฒ์ ์ ์ฅํ์ง ์์์ ์๋ฒ์ ํ์ฅ์ฑ์ด ์๋ค.
์์์ ๋งํ๋ฏ ๋ก๊ทธ์ธ์ ํ์ ๋ ํด๋น ์๋ฒ์๋ง ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ด ์๋
์์ฒญ์ด ๋ค์ด์์ ๋ ํด๋น ํ ํฐ์ด ์ ํจํ์ง๋ง ์ฒดํฌํ๋ฉด ๋๊ธฐ ๋๋ฌธ์
์ด๋ค ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๋ ์๊ด์ด ์๋ค๋ ๋ป์ด๋ค.
JWT๋ ๋ ๊ฐ์ฒด ์ฌ์ด์์ ์์ ์ฑ์๊ฒ ์ ๋ณด๋ฅผ ๊ตํํ๊ธฐ ์ข์ ๋ฐฉ๋ฒ
JWT๋ ์ฐ๋ฆฌ๊ฐ ์์์ ๊ณ์ ๋งํ ์น ํ ํฐ
, JSON Web Token
์ ์ฝ์์ด๋ค.
JWT๋ ์นํ์ค (RFC 7519)์ผ๋ก,
์ ์ ์๋ช
๋ URL-safe (URL๋ก ์ด์ฉํ ์์๋ ๋ฌธ์ ๋ง ๊ตฌ์ฑ๋)์ JSON์ด๋ค.
JWT
๋ .
์ ๊ธฐ์ค์ผ๋ก ์ธ ํํธ๋ก ๋๋๋ค.
Header
{
"alg": "์๋ช
์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ",
"kid": "์๋ช
์ ์ฌ์ฉํ๋ ํค๋ฅผ ์๋ณํ๋ ๊ฐ",
"typ": "ํ์
"
}
ํค๋(Header)์๋ JWT๋ฅผ ์ด๋ป๊ฒ ๊ฒ์ฆํ๋์ง์ ๋ํ ๋ด์ฉ์ด ๋ค์ด๊ฐ ์๋ค.
ํ ํฐ์ ํ์
, ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ธ์ง์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด์๋ค.
ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ด๋ฆ์ ์ ์ด์ค ์ ์๋ค.
payload
{
"sub": "hyeonsu.jung",
"exp": 1623235123,
"iat": 1532341234
}
ํ ํฐ์ ๋ด์์ ์ฐ๋ฆฌ๊ฐ ๋ณด๋ด๊ณ ์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์ด๊ณณ์ ๋ด๊ฒจ์ ธ ์๋ค.
์ด ์ ๋ณด์ ์กฐ๊ฐ์ ํด๋ ์(claim)
์ด๋ผ๊ณ ํ๊ณ , key - value
์ ํ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
๊ทธ๋ฆฌ๊ณ payload
์๋ ์ฌ๋ฌ ๊ฐ์ ํด๋ ์์ ๋ด์ ์ ์๊ณ , ํด๋ ์์ ๊ณต๊ฐ(public) ํน์ ๋น๊ณต๊ฐ(private) ํ ๊ฒ์ธ์ง ๋ฑ๋ก(registered)ํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ ์ ์๋ค.
signature
์๊ทธ๋์ฒ(signature)์๋ ์์ ํค๋(header)์ ํ์ด๋ก๋(Paylaod)๋ฅผ ํฉ์น ๋ฌธ์์ด์ ์๋ช
ํ ๊ฐ์ด๋ค. ์๋ช
์ ํค๋์ alg
์ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ secret key
๋ฅผ ์ด์ฉํด ์์ฑํ๊ณ Base64 URL-Safe๋ก ์ธ์ฝ๋ฉ
ํ๋ค.
secret key
๋ฅผ ํฌํจํด์ ์ํธํ๊ฐ ๋์ด์๋ค.
์์ฑ๋ JWT๋ ์ผ์ชฝ์ Encoded
๋ ๊ฐ์ฒ๋ผ ์ (.)์ ๊ตฌ๋ถ์๋ก ํค๋, ํ์ด๋ก๋, ์๊ทธ๋์ณ๋ก ๋๋ ์ ์๋ก ์ ๋ฌํ๊ฒ ๋๊ณ , ์๋ฒ๋ ํค๋์ alg
, kid
์์ฑ๊ณผ ๊ณต๊ฐ ํค๋ฅผ ์ด์ฉํด ๊ฒ์ฆํ ์ ์๋ค.
๊ฒ์ฆ(์ด ํ ํฐ์ด ์ ๋ขฐํ ์ ์๋ ํ ํฐ์ธ๊ฐ?)๊ฐ ์ฑ๊ณตํ๋ฉด ํ์ด๋ก๋์ ๊ฐ์ผ๋ก ์ ๊ทผ์ ํด์ ์ฌ์ฉํ ์ ์๋ ๊ฒ.
JWT์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต๊ฐ ํค ์ํธ ๋ฐฉ์(PKC, Public Key Cryptograpyh)๋ฅผ ์ฌ์ฉํ๋๋ฐ,
๋น๋์นญ ์ํธ ๋ฐฉ์์ ์ด์ฉํด ๊ณต๊ฐ ํค์ ๋น๋ฐ ํค๋ฅผ ์์ฑํ๊ณ ์ด ํค๋ค์ ์ํฉ์ ๋ฐ๋ผ ๋๋์ด ๊ฐ์ง๊ณ ํต์ ํ๋ค.
์๋ช ์ ๋น๋ฐ ํค๊ฐ ์๋ ๊ณณ์์๋ง ํ ์ ์๊ณ ๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ง ์ด๋ ๊ณณ์์๋ ์ด ๋ฐ์ดํฐ์ ์๋ช ์ ๊ฒ์ฆํ ์ ์๋ค.
๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ง ๋๊ตฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํด์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์์ง๋ง,
๋น๋ฐ ํค๋ฅผ ๊ฐ์ง ๊ณณ์์๋ง ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํด์ ๋ด์ฉ์ ํ์ธํ ์ ์๋ค.
์๊ธฐ์ ์ง๊ณ ๋์ด๊ฐ์ผ ํ๋ ๊ฒ์ ๋น๋์นญ ์ํธ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์
โ ๋น๋ฐ ํค๋ก ์ํธํํ ๋ฐ์ดํฐ๋ ๋ค์ ๋น๋ฐ ํค๋ก ํ ์ ์๊ณ ,
โ ๊ณต๊ฐ ํค๋ก ์ํธํ ํ ๋ค์ ๋ฐ์ดํฐ๋ ๊ณต๊ฐ ํค๋ก ํ ์ ์๋ค.
๐ข ์๋ช : ๋น๋ฐ ํค๋ฅผ ๊ฐ์ง ๊ทน์์(์ฃผ๋ก ํ๋ช )๋ง ๋ฐ์ดํฐ์ ์๋ช ํ ์ ์๋ค. ๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ง ์๋ฌด๋ ๋ฐ์ดํฐ์ ์๋ช ์ ๊ฒ์ฆํ ์ ์๋ค.
๐ข ์ํธํ: ๊ณต๊ฐ ํค๋ฅผ ๊ฐ์ง ์๋ฌด๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ ์ ์๋ค. ๋น๋ฐ ํค๋ฅผ ๊ฐ์ง ๊ทน์์๋ง ๋ฐ์ดํฐ๋ฅผ ๋ณตํธํํด ํ์ธํ ์ ์๋ค.
Access Token
์ ๋ฐ๊ธํ๋ค. Access Token
์ ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)์๊ฒ ๋ณด๋ธ๋ค. ์๊ธฐ๊น์งํ๋ฉด ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ์ด ๋ ๊ฒ์ด๋ค.
์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)๋ API๋ฅผ ์์ฒญํ ๋
Authorization Header
์Access Token
์ ๋ด์์ ๋ณด๋ธ๋ค.
์๋ฒ๋
secret key
๋ก ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ํ ํฐ์ ์๋ช ์ ๋ณตํธํํ์ฌ์ ์ ํจํ ํ ํฐ์ธ์ง ํ์ธํ๋ค.
Access Token
๋ง์ ์ฌ์ฉํ์ ๋ ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์จRefresh Token
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์งํํ์ ๋์ ๋ฌธ์ ์ ์ Access Token
์ ํ์ทจ ๋นํ์ ๋์ด๋ค.
์ ํจ๊ธฐ๊ฐ์ด ๊ธด ํ ํฐ์ด๋ผ๋ฉด, ๊ทธ ์๊ฐ๋์ ์ ๋ณด๋ฅผ ํ์ทจ๋นํ๊ฒ ๋๊ณ
๋ ์ ํจ๊ธฐ๊ฐ์ ์ค์ด์๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์ฌ๋ฌ ๋ฒํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์๋ค.
๊ทธ๋์ ๋์จ ๊ฒ์ด Refresh Token
Refresh Token
๋ํ Access Token
๊ณผ ๊ฐ์ JWT์ด๋ค.
๋ก๊ทธ์ธ์ ํ์ ๋ ์๋ฒ์์ Access Token
, Refresh Token
์ ๋์์ ๋ณด๋ด์ค๋ค
๋จ, ๋์ ์ ํจ๊ธฐ๊ฐ์ ๋ค๋ฅด๊ฒ ํด์ ๋ณด๋ธ๋ค.
Refresh Token
์ ํ ๋ฌ, Access Token
์ ํ๋ฃจ๋ก ์ก์๋ค๋ฉด
Access Token
์ ๊ธฐ๊ฐ์ด ๋ค ๋์ด๋ Refresh Token
์ ๊ธฐ๊ฐ์ด ๋จ์์๊ธฐ ๋๋ฌธ์
์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ์์ด ๋ค์ Access Token
์ ๋ฐ๊ธ ๋ฐ์ ์ ์๋ค. (๋ก๊ทธ์ธ ์ ์ง)
Refresh Token
๋ Access Token
๋ฅผ ๋ค์ ๋ฐ๊ธ๋ฐ๊ธฐ ์ํ JWT.
ํ ํฐ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์๋ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ์ฅ์๊ฐ ์๋ค.
secure httpOnly
์ฟ ํค, ๋ก์ปฌ ์คํ ๋ฆฌ์ง, ์ฟ ํค์ ๊ฐ์ด ๋ค์ํ๋ฐ
์ด๊ฒ์ ๊ฐ๋ฐ์์ ์ทจํฅ๊ณผ ์ฅ๋จ์ ์ด ์๋ก ๋ค๋ฅด๋ค.
์์ ๋ด์ฉ์ ๋๋ฌด ์ ๋ฆฌ๊ฐ ์๋์ด์๋ ๊ธ์ด ์์ด์ ์ ๋
ํ์๋ค.
์๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๊ธธ.
๐ช ํ๋ก ํธ์์ ์์ ํ๊ฒ ๋ก๊ทธ์ธ ์ฒ๋ฆฌํ๊ธฐ (ft. React)
๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ๋ฉด
localStorage
์ ์ฅ ๋ฐฉ์์
๊ณต๊ฒฉ์๊ฐ ํด๋ผ์ด์ธํธ ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์
ํด ๊ณต๊ฒฉํ๋ XSS(Cross-site scripting)
์ ์ทจ์ฝํ๊ณ ,
์ฟ ํค
์ ์ฅ ๋ฐฉ์์
XSS(Cross-site scripting)
& CSRF(Cross-site request forgery): ๋ค๋ฅธ ๋๋ฉ์ธ์์ ์ฐ๋ฆฌ ๋๋ฉ์ธ์ผ๋ก API Call์ ๋ ๋ฆฌ๋ ๊ณต๊ฒฉ
๋ ๋ค์ ์ทจ์ฝํด์ง ์ ์๋ค.
secure httpOnly
์ญ์ CSRF
๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ค.
์ด๋ ๊ฒ ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ด ์๊ณ , ์๋ง๋ ๋ณด์ ๋ฐฉ๋ฒ์ ํตํด ์ฌ์ฉ์๋ค์ ์ ๋ณด๊ฐ ์์ ํ๊ฒ
๋ณด๊ด๋๋๋ก ๊ณ์ํด์ ๋
ธ๋ ฅ์ ํด์ผํ๋ค.
HTTP
์ connectionless
, stateless
ํน์ฑ์ ์ํด
๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ ์ง์ํค๊ธฐ ์ํด์ ์๋ง์ ์ ์ง ๋ฐฉ๋ฒ์ด ํ์ํ๋ค.
JWT
๋ ์ํธํ, ๋ณตํธํ๋ฅผ ํตํด ๋ ๊ฐ์ฒด ์ฌ์ด์์ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ์ข์ ์๋จ์ด๋ค.
ํ์ํ API
Refresh API
AccessToken
๋ง๋ฃ์์ ํธ์ถ (setTimeout์ผ๋ก ์๋ ํธ์ถ ์ค์ ๊ฐ๋ฅ)RefreshToken
์ ์ฟ ํค์์ ์ฝ์ด์์ ์๋ฒ๋ก ๋ณด๋RefreshToken
,AccessToken
์ ๋ค ๋ฐ์์ฌ์ง AccessToken
๋ง ๋ฐ์์ฌ์ง๋ ์ ํLogin API
RefreshToken
,AccessToken
์ ๋ฐ์์ดAccessToken
๋ header์ default๋ก ์ค์ ํ์ฌ API๋ง๋ค ๋ณด๋ด๋๋ก ์ค์ AccessToken
์ ์ ํจ๊ธฐ๊ฐ์ด ๋๋๊ธฐ ์ ์๋์ผ๋ก Refresh API
๊ฐ ํธ์ถ๋๋๋ก ์ค์ ๊ฐ๋ฅ (์ ํ์ )RefreshToken
๋ ์ฟ ํค์ ์ ์ฅRefreshToken
๋ํ ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋๋ฉด ์ฌ๋ก๊ทธ์ธ์ด ํ์!์ ๊ฐ ์ข์ํ๋ ์ ํ๋ฒ์ธ ๋์ฝ๋ผ์ค์ ๋ ธ๋ง๋ ์ฝ๋ ์ฑ๋์์ ์ฌ๋ผ์จ ์์๋ ์ฐธ๊ณ ํด๋ณด์ธ์!
Your writing is excellent, so allow me to share a little of myself. One of the best available limitless running games is poppy playtime. Control your ball as you compete in a fast ramp race to see how far you can climb the leaderboard.
๊ธ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!!
์ค๊ฐ์ jwt ๋ฐฉ์์ ์ค๋ช
ํ์ค๋,
5. ์๋ฒ์์๋ ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ํ ํฐ์ ๊ณต๊ฐ ํค(public key)๋ก ์๋ช
์ ์ฒดํฌํ๊ณ , ์์ ๋ด๊ธด ์ ๋ณด๋ฅผ ํ์ธํ๋ค.
์๋ฒ๋ secret key๋ก ์ฌ์ฉ์๊ฐ ๋ณด๋ธ ํ ํฐ์ ์๋ช
์ ๋ณตํธํํ์ฌ์ ์ ํจํ ํ ํฐ์ธ์ง ํ์ธํ๋ค.
๋ผ๊ณ ํ๋๋ฐ, ๊ทธ๋ผ ์๋ฒ๋ jwt ํ ํฐ์ 1์ฐจ์ ์ผ๋ก ๊ณต๊ฐํค๋ก ์ฒดํฌํ๊ณ , 2์ฐจ์ ์ผ๋ก ๋น๋ฐํค๋ก ๋ณตํธํํด์ ์ ํจํ ํ ํฐ์ธ์ง ํ์ธํ๋ค๊ฑด๊ฐ์? ๊ณต๊ฐํค๋ก๋ ๋ณตํธํํ๊ณ ๋น๋ฐํค๋ก๋ ๋ณตํธํ ํ๋ค๋ ๋๋์ด ๋ค์ด์ ํผ๋์ค๋ฌ์์!! ใ ใ
Refresh Token ๊ด๋ จํ์ฌ ๊ถ๊ธํ์ ์ด ์์ต๋๋ค
Refresh Token๋ ํ์ทจ๋นํ๋ค๋ฉด Access Token๋ง ์ฌ์ฉํ์๋๋ ๋ณด์์ ์ฐจ์ด๊ฐ ์์ง ์๋์?
๋ค๋ฅธ์ด์ ๊ฐ ์์๊น์?