๐Ÿ’ Spring

๐Ÿ’ Spring/Spring Security

8. JWT๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ Filter ๋“ฑ๋ก ํ…Œ์ŠคํŠธ

์ด ํฌ์ŠคํŠธ๋Š” ๋ฐ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋‹˜์˜ ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. Spring Security Filter ๊ตฌ์กฐ ํ•„ํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์ „ SpringFilterChain ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์•Œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. Filter๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž public class MyFilter1 implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("Filter 1"); filterChain.doFilter(servletReque..

๐Ÿ’ Spring/Spring Security

7. JWT๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ „ Basic, Bearer ๋ฐฉ์‹

์ด ํฌ์ŠคํŠธ๋Š” ๋ฐ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋‹˜์˜ ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. Token ์ธ์ฆ ๋ฐฉ์‹ ์„ธ์…˜์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ์˜ ์„œ๋ฒ„์— ๋‘๋Š” ์„ธ์…˜ ์ €์žฅ์†Œ, ๋˜ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์ผ ๋•Œ์˜ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฌธ์ œ๋“ค์„ ํ•œ๋ฐฉ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ ์ฟ ํ‚ค๋ฅผ ํƒˆ์ทจ ๋‹นํ–ˆ์„ ๋•Œ์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ๋“ค๋„ ์‚ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋Œ€ ์ด์–ด๋„ Secret_key ๊ฐ’๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ํ† ํฐ์„ Valid ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Session์€ ๋™์ผ ๋„๋ฉ”์ธ์—์„œ๋งŒ.. ๋งŒ์ผ ๋™์ผ ๋„๋ฉ”์ธ์—์„œ์˜ ์š”์ฒญ์ด ์•„๋‹ˆ๋ผ๋ฉด, ์ฟ ํ‚ค๊ฐ€ ์•ˆ ๋‚ ๋ผ๊ฐ„๋‹ค! (์„œ๋ฒ„์—์„œ ์ฟ ํ‚ค๋ฅผ ๊ฑฐ๋ถ€!) ๊ทธ๋ ‡๋‹ค๋ฉด, javascript์—์„œ Ajax๋กœ ํ—ค๋”์— ์ฟ ํ‚ค๋ฅผ ๊ฐ•์ œ๋กœ ๋‹ด์•„์„œ ๋ณด๋‚ผ ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, ์„œ๋ฒ„์—์„œ๋Š” HTTP Only ์„ค์ •์„ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ HTTP ์š”์ฒญ์ด ์•„๋‹Œ javascript..

๐Ÿ’ Spring/Spring Security

6. JWT๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ์„ธํŒ…

์ด ํฌ์ŠคํŠธ๋Š” ๋ฐ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋‹˜์˜ ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. dependency ์ถ”๊ฐ€ Maven com.auth0 java-jwt 3.16.0 Gradle // https://mvnrepository.com/artifact/com.auth0/java-jwt implementation group: 'com.auth0', name: 'java-jwt', version: '3.16.0' application.yml ์„ค์ • spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: "jdbc:mysql://localhost:3306/JwtTutorial" username: "root" password: "1234" jpa: hibern..

๐Ÿ’ Spring/Spring Security

5. JWT ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ

์ด ํฌ์ŠคํŠธ๋Š” ๋ฐ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋‹˜์˜ ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. JWT๋ž€? jwt.io์— ๊ฐ€๋ณด๋ฉด JWT๋ฅผ ์ด๋ ‡๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. JWT๋กœ ์ฃผ๊ณ ๋ฐ›๋Š” ์ •๋ณด๋Š” ๋””์ง€ํ„ธ ์„œ๋ช…์ด ๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ํ™•์ธํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋‹ค. JWT๋Š” HMAC SHA256 (HS256) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. JWT๋Š” ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์„œ๋ช…๋œ ํ† ํฐ์— ์ค‘์ ์„ ๋‘˜ ๊ฒƒ. ("์ด๊ฑด ๋‚ด๊ฐ€ ๋ณด๋‚ธ๊ฒŒ ๋งž์•„!" ๋ผ๋Š” ์„œ๋ช…, ์ธ์ฆ์— ์ค‘์ ์„ ๋‘์—ˆ๋‹ค.) JWT ๊ตฌ์กฐ (.)์„ ๊ธฐ์ค€์œผ๋กœ ์„ธ๊ฐ€์ง€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค. Header Payload Signature ์™„์„ฑ๋œ ํ† ํฐ์€ ์ด๋ ‡๋‹ค. xxxxx.yyyyy.zzzzz Header { "alg": "HS256", "typ": "JWT" } ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™”๋ฅผ ํ–ˆ๋Š”์ง€ ํ† ํฐ์˜ ํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€ ..

๐Ÿ’ Spring/Spring Security

4. JWT๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ „ RSA์— ๋Œ€ํ•ด์„œ

์ด ํฌ์ŠคํŠธ๋Š” ๋ฐ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋‹˜์˜ ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. 2021.10.26 - [๐Ÿ’ Spring/Spring Security] - 3. JWT๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ „ CIA ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ 3. JWT๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ „ CIA ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ ์ด ํฌ์ŠคํŠธ๋Š” ๋ฐ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋‹˜์˜ ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. CIA CIA(Confidentiality Integrity Availability) Confidentiality(๊ธฐ๋ฐ€์„ฑ) ๊ฐœ์ธ์ •๋ณด, ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋“ฑ์„ ์ธ๊ฐ€๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ํ—ˆ๊ฐ€.. iseunghan.tistory.com ์ €๋ฒˆ ์‹œ๊ฐ„์— ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์—ด์‡  ์ „๋‹ฌ ๋ฌธ์ œ ๋ˆ„๊ฐ€ ๋ณด๋ƒˆ๋Š”์ง€? ์— ๋Œ€ํ•œ ๋ฌธ์ œ, ์ธ์ฆ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€ RSA(์•”ํ˜ธํ™”) Public Key : ๊ณต๊ฐœ ํ‚ค ์ž์‹ ..

๐Ÿ’ Spring/Spring Security

3. JWT๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ „ CIA ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ธฐ

์ด ํฌ์ŠคํŠธ๋Š” ๋ฐ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋‹˜์˜ ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. CIA CIA(Confidentiality Integrity Availability) Confidentiality(๊ธฐ๋ฐ€์„ฑ) ๊ฐœ์ธ์ •๋ณด, ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋“ฑ์„ ์ธ๊ฐ€๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ํ—ˆ๊ฐ€ Integrity(๋ฌด๊ฒฐ์„ฑ) ๋‚ด์šฉ์˜ ๋ณ€๊ฒฝ์ด๋‚˜, ํ›ผ์†์—†์ด ์ •ํ™•ํ•˜๊ฒŒ ๋ณด์กด Availability(๊ฐ€์šฉ์„ฑ) ํ•ญ์ƒ ์ •์ƒ์ ์œผ๋กœ ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ ์˜ˆ๋ฅผ ๋“ค์–ด, A๋‚˜๋ผ, B๋‚˜๋ผ, C๋‚˜๋ผ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค. A๋‚˜๋ผ๊ฐ€ B๋‚˜๋ผ์—๊ฒŒ ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌํ•˜๋Š”๋ฐ, ์ค‘๊ฐ„์—์„œ C๋‚˜๋ผ๊ฐ€ ๊ทธ ๋ฌธ์„œ๋ฅผ ํƒˆ์ทจํ–ˆ์Šต๋‹ˆ๋‹ค. -> ๊ธฐ๋ฐ€์„ฑ์ด ๊นจ์ง A๋‚˜๋ผ๊ฐ€ B๋‚˜๋ผ์—๊ฒŒ ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌํ•˜๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” C๋‚˜๋ผ๊ฐ€ ์œ„์กฐ๋œ ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. -> ๋ฌด๊ฒฐ์„ฑ์ด ๊นจ์ง B๋‚˜๋ผ๋Š” A๋‚˜๋ผ๊ฐ€ ๋ณด๋‚ด์ค€ ๋ฌธ์„œ๋ฅผ ์ž˜..

iseunghan
'๐Ÿ’ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (4 Page)