[FastAPI] 6. Google-auth ๋ฐ PyJWT๋ฅผ ์ด์šฉํ•œ OAuth2 ์ธ์ฆ ๊ตฌํ˜„ 1

๋ฐ˜์‘ํ˜•

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ธ์ฆ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. 

 

Spring์—์„œ๋Š” Spring Security๋ผ๋Š” ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ธ์ฆ์— ๋Œ€ํ•œ ๊ตฌํ˜„์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ•˜์ง€ ์•Š๊ณ ๋„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•˜์—ฌ Google ๊ฐœ๋ฐœ์ž ์ฝ˜์†”์—์„œ Client ID๋ฅผ ๋ฏธ๋ฆฌ ๋ฐœ๊ธ‰๋ฐ›์€ ํ›„ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ๊ตฌํ˜„์ฒด๋งŒ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋ ต์ง€ ์•Š๊ฒŒ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์ฃ .

 

FastAPI๋„ ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜์ง€๋งŒ JWT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์—๋Š” ๋ณ„๋„์˜ ๊ตฌํ˜„ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์ด ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  OAuth2 ์ธ์ฆ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

[Spring boot] Spring boot Security๋กœ ์‹œ์ž‘ํ•ด๋ณด๋Š” ์ธ์ฆ

Spring Framework๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ์„œ๋น„์Šค๋‚˜ REST API ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ€์žฅ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ์ธ์ฆ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์ธ์ฆ์ด๋ž€, ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ•œ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‹๋ณ„ํ•˜๊ณ ์ž

blog.neonkid.xyz

์ด ๊ธ€์„ ์ฝ์–ด๋ณด์‹œ๊ธฐ ์ „์— OAuth2 ์ธ์ฆ์— ๋Œ€ํ•œ ์„ ํ–‰ ๊ณต๋ถ€๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ OAuth2 ์ธ์ฆ์„ ์ฒ˜์Œ ์ ‘ํ•ด๋ณด์‹œ๋Š” ๋ถ„๋“ค์ด๋ผ๋ฉด  ์œ„ ๊ธ€์„ ๋จผ์ € ์ฝ์–ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

 

 

 

 

To Be

๋จผ์ € ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ชจ์Šต์„ ์•„ํ‚คํ…์ฒ˜ ๊ทธ๋ฆผ์„ ํ†ตํ•ด ๋‚˜ํƒ€๋‚ด ๋ดค์Šต๋‹ˆ๋‹ค. 

Spring boot Security๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š” MVC๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ์„ ํ–ˆ์ง€๋งŒ ์ด๋ฒˆ์—๋Š” Restful API๋ฅผ ์ด์šฉํ•ด์„œ OAuth2 ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ ์ด ์žˆ๋‹ค๋ฉด Redirect URL์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด ์žˆ๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์€ React๋‚˜ Vue์™€ ๊ฐ™์€ SPA ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์„ ์ด์šฉํ•ด์„œ Google ๋กœ๊ทธ์ธ Redirect URL์„ ์ง€์ •ํ•˜๊ณ , ํ•ด๋‹น ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด์„œ ๋ฐ›์€ ๊ถŒํ•œ ๋ถ€์—ฌ ์ฝ”๋“œ๋ฅผ REST ์„œ๋ฒ„๋กœ ์š”์ฒญํ•˜๋ฉด ์ด์— JWT ํ† ํฐ์„ ์ƒ์„ฑํ•˜์—ฌ Client์—๊ฒŒ ์ œ๊ณตํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ ๋‹ค์Œ ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ํ† ํฐ์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

Spring boot Security์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ณผ์ •๋“ค์ด ์ „๋ถ€ ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€๋งŒ ๊ณต๊ต๋กญ๊ฒŒ๋„ FastAPI์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์ „๋ถ€ ์ˆ˜๋™์œผ๋กœ ๊ตฌํ˜„ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” JWT๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

JWT

JWT๋Š” ์›น ํ‘œ์ค€(RFC 7519)์œผ๋กœ์จ JSON ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•œ ๊ฐ€๋ณ๊ณ  ์ž๊ฐ€ ์ˆ˜์šฉ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ํ† ํฐ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด JSON ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋Š” ์ธ์ฆ ํฌ๋งท์ž…๋‹ˆ๋‹ค.

์œ„ ๊ตฌ์กฐ๋Š” JSON ํ˜•ํƒœ๋งŒ์„ ๋ณด์—ฌ์ค€ ๊ฒƒ์ด๋ฉฐ ์‹ค์ œ ์ด ๋ฐ์ดํ„ฐ๋Š” JWT์—์„œ payload์— ํ•ด๋‹น ๋ฉ๋‹ˆ๋‹ค. payload๊ฐ€ ๋ฌด์—‡์ด๋ƒ๊ตฌ์š”? ์•„๋งˆ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ๋ฅผ ๊ณต๋ถ€ํ•ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ๋„คํŠธ์›Œํฌ์˜ ํŒจํ‚ท ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์•Œ๊ณ  ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ท ๊ตฌ์กฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Header์™€ data๋กœ ๊ตฌ๋ถ„๋˜๋Š”๋ฐ, JWT ์—ญ์‹œ Header์™€ Payload๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ง€๋ฉฐ payload๋Š” ์—ฌ๊ธฐ์„œ ํŒจํ‚ท์˜ data์— ํ•ด๋‹น๋˜๋Š”๋ฐ์š”. ์ด ๋ถ€๋ถ„์€ 2ํŽธ์—์„œ ์ข€ ๋” ์‹ฌ์ธต์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ ์ž ์‹œ ๋‹ด์•„๋‘๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์ธ์ฆ ์ •๋ณด๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋‹ด์•„๋‘” ๋’ค ๋ถˆ๋Ÿฌ์™”์„ ๋•Œ ๋ˆ„๊ตฌ์˜ ์ •๋ณด์ธ์ง€, ์œ ํšจ๊ธฐ๊ฐ„์€ ์–ผ๋งˆ๋‚˜ ๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜์—ฌ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

Generate Client ID (Google)

์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์—์„œ Google ์ธ์ฆ ๊ตฌํ˜„์„ ์‹œ๋„ํ•ด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„  Google์—์„œ Client ID๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•˜๋Š”๋ฐ์š”. ๋งŒ์•ฝ ๋ฐœ๊ธ‰ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด ์•„๋ž˜์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์—ฌ Google์˜ Client ID๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„์ฃผ์„ธ์š”.

 

 

[Spring boot] Spring boot Security๋ฅผ ์ด์šฉํ•œ OAuth2 ์ธ์ฆ ๊ตฌํ˜„ 1 - Google ๊ณ„์ • ์ธ์ฆ

์ง€๋‚œ ํฌ์ŠคํŠธ์— ์ด์–ด์„œ, ์˜ค๋Š˜์€ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ Spring boot Security ๋””ํŽœ๋˜์‹œ๋ฅผ ์ด์šฉํ•ด OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ OAuth2 ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด

blog.neonkid.xyz

 

 

 

 

Install Dependency

์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๊ตฌํ˜„์„ ํ•ด๋ณด๋„๋ก ํ•˜์ฃ . ๋จผ์ € JWT๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ PyJWT์™€ Google ์ธ์ฆ ์„œ๋ฒ„๋กœ์˜ ์ธ์ฆ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ๋Š” google-auth ๋””ํŽœ๋˜์‹œ๋ฅผ ์„ค์น˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

FastAPI๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ FastAPI๋„ ๊ฐ™์ด ์„ค์น˜ํ•ด์ฃผ๋ฉด ์ข‹๊ฒ ์ฃ ?

 

 

 

 

Generate Token

๋จผ์ € ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๋Š” ๋ถ€๋ถ„๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•ด๋ณผํ…๋ฐ์š”. ์šฐ๋ฆฌ๊ฐ€ ํ† ํฐ์—์„œ ์‚ฌ์šฉํ•ด์•ผํ•  ์ •๋ณด๋Š” ๋ฐ”๋กœ ๊ตฌ๊ธ€ ๊ณ„์ •์˜ ์ •๋ณด์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ฐ€ ์šฐ๋ฆฌ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋ ค๋Š” ๊ฑฐ๊ธด ํ•œ๋ฐ, Google ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ํ•˜์˜€๊ธด ํ–ˆ์ง€๋งŒ ๊ทธ๊ฒŒ ๋ˆ„๊ตฌ์ธ์ง€๋ฅผ ํ™•์ธํ•ด์•ผ๋˜๋Š”๋ฐ์š”. ๊ทธ๋ž˜์„œ REST API์—์„œ๋Š” Client์—์„œ Redirect๋กœ ์ ‘์†ํ•˜์—ฌ ๋ฐ›์€ ํ† ํฐ์„ ๋ฐ›์•„ Google ๊ณ„์ • ์„œ๋ฒ„๋กœ ์ด ํ† ํฐ์„ ๋„˜๊ฒจ์ฃผ๊ฒŒ ๋˜๋ฉด ์–ด๋–ค Client ID๋กœ ์ด ํ† ํฐ์„ ๋ฐ›์•˜๊ณ , ๋ˆ„๊ตฌ์˜ ์ •๋ณด์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์กฐ๊ธˆ ์–ด๋ ค์šด ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜์–ด, ๊ทธ๋ฆผ์œผ๋กœ ํ•œ ๋ฒˆ ๋” ๊ทธ๋ ค๋ดค์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€์— ์ ‘์†ํ•ด์„œ Google ๋กœ๊ทธ์ธ์„ ์š”์ฒญํ•  ๊ฒฝ์šฐ ์œ„์—์„œ ์ž…๋ ฅํ•œ Redirect URI๋กœ ์š”์ฒญ์„ํ•˜๊ฒŒ ๋˜๋ฉฐ Google์—์„œ๋Š” ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ด๋ฅผ Google์—์„œ๋Š” ์ธ์ฝ”๋”ฉ๋œ JWT ํ† ํฐ์„ ์›น์— ์ „๋‹ฌํ•˜๋ฉฐ ์›น์—์„œ๋Š” ๋‹ค์‹œ ์ด๋ฅผ ๋ฐฑ์—”๋“œ๋กœ ์ „์†กํ•˜์—ฌ ๋ฐฑ์—”๋“œ๊ฐ€ ์ด ์œ ์ €๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

์ด๋ฅผ ์ฝ”๋“œ๋กœ ์ •์˜ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์›น์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ํ† ํฐ์„ ${token}์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ FastAPI์—์„œ ํ•ด์ค˜์•ผํ•˜๋Š” ๋ถ€๋ถ„์€ ์ด ์ธ์ฝ”๋”ฉ๋œ ํ† ํฐ์„ ๋””์ฝ”๋”ฉํ•˜์—ฌ payload๋กœ ๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋•Œ ์ฃผ๋Š” ์ •๋ณด๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์ง€๋งŒ ๋Œ€ํ‘œ์ ์œผ๋กœ ์–ด๋–ค Client ID๋กœ, ๋ˆ„๊ฐ€ ์ ‘๊ทผํ–ˆ๋Š”์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ํ† ๋Œ€๋กœ ์•„๋ž˜์˜ ํ˜•์‹์˜ ํ† ํฐ์„ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” API๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ํ† ํฐ์ด ์–ธ์ œ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€, ์–ธ์ œ๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์™€ ๋ˆ„๊ตฌ์˜ ํ† ํฐ์ธ์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก 4๊ฐœ์˜ ๊ตฌ์กฐ๋ฅผ ๋งˆ๋ จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

 

Create API

๊ทธ๋Ÿผ ์œ„์˜ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ API๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

POST ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ JSON์— id_token์ด๋ผ๋Š” key๋กœ ๊ตฌ์กฐ๋ฅผ ์‚ผ๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ–ˆ์„ ๋•Œ id_token ๊ฐ’์— Google์—์„œ ๋ฐ›์€ JWT ํ† ํฐ์„ ๋„ฃ์–ด์„œ ๋ฐฑ์—”๋“œ๊ฐ€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•ด์ค๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์œ„์—์„œ ๋งŒ๋“  ๊ตฌ์กฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ 'secret' key๋ฅผ ์ด์šฉํ•˜์—ฌ base64๋กœ ์ธ์ฝ”๋”ฉํ•œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ์ด ํ•„์š”ํ•œ ๋ฐฑ์—”๋“œ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ payload์—์„œ datetime์„ ์‚ฌ์šฉํ•˜๋Š” key์˜ ๊ฒฝ์šฐ exp์™€ iat๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‘ ๊ฐœ์˜ ํ‚ค๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ํ‚ค์— string์ด ์•„๋‹Œ datetime์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์‹ฑ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์œ ํšจ๊ธฐ๊ฐ„์„ ๋ช…์‹œํ•  ๋–„๋Š” exp์™€ iat ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฝ”๋”ฉํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค.

 

 

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ๋ฐ›์€ ํ† ํฐ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments