๐Ÿ’ Spring/Spring Security

๐Ÿ’ Spring/Spring Security

10. JWT ๋กœ๊ทธ์ธ์„ ์œ„ํ•œ UserDetails, UserDetailsService ๊ตฌํ˜„ํ•˜๊ธฐ

์ด ํฌ์ŠคํŠธ๋Š” ๋ฐ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋‹˜์˜ ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. Adapter ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ UserDetails ๊ตฌํ˜„ User ํด๋ž˜์Šค๋Š” UserDetails๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Adapter ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ User ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. public class AccountAdapter extends User { private Account account; public AccountAdapter(Account account) { super(account.getUsername(), account.getPassword(), getAuthorities(account.getRoles())); this.account = account; } public static Collection

๐Ÿ’ Spring/Spring Security

9. JWT ์ž„์‹œ ํ† ํฐ์œผ๋กœ ํ•„ํ„ฐ ํ…Œ์ŠคํŠธ

์ด ํฌ์ŠคํŠธ๋Š” ๋ฐ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋‹˜์˜ ์œ ํŠœ๋ธŒ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜์„œ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ํ† ํฐ์„ ๊ฒ€์ฆ ํ•  ํ•„ํ„ฐ ์ƒ์„ฑ ํ•„ํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ† ํฐ ๊ฒ€์ฆ์„ ํ–ˆ์„ ๋•Œ, ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋ฉด ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋” ์ด์ƒ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. public class MyFilter3 implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletR..

๐Ÿ’ 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" } ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™”๋ฅผ ํ–ˆ๋Š”์ง€ ํ† ํฐ์˜ ํƒ€์ž…์ด ๋ฌด์—‡์ธ์ง€ ..

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