๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ60

[Spring Security] ์ฟ ํ‚ค vs ํ—ค๋”๋กœ JWT ๋ณด๋‚ด๊ธฐ ์•„์ง๋„ ๋กœ๊ทธ์ธ์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ๋ชปํ•œ ๋‚˜๊ทธ์น˜๋งŒ ๋„ˆ๋ฌด ์–ด๋ ค์›Œ.......์ด๊ฑฐ ์–ด๋ ค์›Œํ•˜๋Š”๊ฑฐ ๋‚˜๋งŒ ๊ทธ๋Ÿฐ๊ฑฐ ์•„๋‹ˆ๊ฒ ์ฐŒ?.. ์•”ํŠผ OAuth2 ์นด์นด์˜ค๋กœ ๋กœ๊ทธ์ธํ•˜๋Š” ๋ถ€๋ถ„ ํ๋ฆ„์„ ๊ณต๋ถ€ํ•˜๋˜ ์ค‘์—,์ธ๊ฐ€ ์ฝ”๋“œ ๋ฐ›๊ณ  -> ์—‘์„ธ์Šค ํ† ํฐ ๋ฐ›๊ณ  -> ์‚ฌ์šฉ์ž ์ •๋ณด ์š”์ฒญํ•˜๊ณ -> ๊ทธ ์‚ฌ์šฉ์ž ์ •๋ณด๋กœ JWT ํ† ํฐ ๋งŒ๋“ค๊ณ -> ๊ทธ ํ† ํฐ์„ ์ฟ ํ‚ค์— ๋‹ด์•„์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ณด๋‚ธ๋‹ค-> ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ์ฟ ํ‚ค๋ฅผ ๋งค ์š”์ฒญ์‹œ ํฌํ•จํ•ด์„œ ๋ณด๋‚ธ๋‹ค ๊นŒ์ง€๋Š” ์•Œ๊ฒ ๋Š”๋ฐ,๊ทธ๋Ÿผ ์™œ ๊ตณ์ด ์ฟ ํ‚ค๋ฅผ ์“ธ๊นŒ? ํ•˜๋Š” ์˜๋ฌธ์ด ๋“ค์—ˆ์Œ ์ฟ ํ‚ค๋ผ๋Š”๊ฒŒ,์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฐ์ง€ ๊ธฐ์–ตํ•ด์ค˜์„œ ๋กœ๊ทธ์ธ์„ ์œ ์ง€์‹œํ‚ค๊ณ ..์ด๋Ÿฐ ์žฅ์ ์ด ์žˆ๋‹ค๊ณ  ๋“ค์—ˆ๋Š”๋ฐ,์ง€๊ธˆ๊นŒ์ง€์˜ ํ๋ฆ„์„ ๋ณด๋ฉด ์ด ์ฟ ํ‚ค์˜ ์žฅ์ ์ด ํ™œ์šฉ๋˜๋Š”๊ฒŒ ์–ด๋””์—๋„ ์—†์–ด๋ณด์ž„. ๊ทธ๋ž˜์„œ ์•Œ์•„๋ดค๋Š”๋ฐ,์š”์•ฝํ•˜์ž๋ฉด ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ์˜ ๋ณด์•ˆ๊ณผ, ๊ฐœ๋ฐœ์ž ํŽธ์˜์„ฑ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•จ. Authorizat.. 2025. 5. 15.
[OAuth] OAuth2 ์„ค์ • ํŒŒ์ผ ์ž‘์„ฑ OAuth2๋ฅผ ๊ธฐ์กด JWT์™€ ํ•จ๊ป˜ ์“ฐ๋ ค๋ฉด๊ธฐ์กด์— ์ž‘์„ฑํ•ด๋‘” ์„ค์ •์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์„ค์ •์„ ์จ์•ผํ•จ. 1. ๊ธฐ์กด ํผ ๋กœ๊ทธ์ธ ๋ฐฉ์‹์— ์ป๋˜ WebSecurityConfig.java ํŒŒ์ผ ์ „๋ถ€ ์ฃผ์„์ฒ˜๋ฆฌ~~~~~ 2 . config ํŒจํ‚ค์ง€์— WebOauthSecurityConfig.java ์ƒ์„ฑ@RequiredArgsConstructor@Configurationpublic class WebOAuthSecurityConfig { private final OAuth2UserCustomService oAuth2UserCustomService; private final TokenProvider tokenProvider; private final RefreshTokenService refreshTokenSer.. 2025. 5. 11.
[OAuth2] OAuth2 ์‚ฌ์šฉ์ž ์„œ๋น„์Šค ๊ตฌํ˜„ํ•˜๊ธฐ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์กฐํšŒํ•ด์„œ, ์œ ์ € ํ…Œ์ด๋ธ”์— ์ •๋ณด๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž๋ผ๋ฉด๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ์ด๋ฆ„์„ ์—…๋Žƒํ•ด์คŒ. ์œ ์ € ํ…Œ์ด๋ธ”์— ์ •๋ณด๊ฐ€ ์—†๋Š” ์‚ฌ์šฉ์ž๋ผ๋ฉด์ƒˆ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•ด์„œ DB์— ์ €์žฅ @Table(name = "users")@NoArgsConstructor(access = AccessLevel.PROTECTED)@Getter@Entitypublic class User implements UserDetails { // ์ƒ๋žต // ๋‹‰๋„ค์ž„ ํ•„๋“œ ์ถ”๊ฐ€ @Column(name = "nickname", unique = true) private String nickname; // ๋นŒ๋“œ ํŒจํ„ด์— ๋‹‰๋„ค์ž„ ์ถ”๊ฐ€ @Builder public User(String email, String .. 2025. 5. 11.
[OAuth] OAuth ์˜์กด์„ฑ ์ถ”๊ฐ€, ์ฟ ํ‚ค ๊ด€๋ฆฌ ํด๋ž˜์Šค ๊ตฌํ˜„ํ•˜๊ธฐ ์šฐ์„  ์ง€๋‚œ๋ฒˆ์— ๋ฐ›์•˜๋˜๊ตฌ๊ธ€ ํด๋ผ์ด์–ธํŠธID๋ž‘ ์‹œํฌ๋ฆฟํ‚ค, DB ์„ค์ • ๋น„๋ฒˆ ๋ชจ๋‘.env ํŒŒ์ผ๋กœ ๋นผ๋’€๊ณ  gitignore์— ์„ค์ •๊นŒ์ง€ ํ•ด๋‘ . ์ด์ œ ์ฟ ํ‚ค ๊ด€๋ฆฌ ํด๋ž˜์Šค ๊ตฌํ˜„ํ•˜๊ณ ,OAuth์—์„œ ์ œ๊ณต๋ฐ›์€ ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฐ€์ ธ์˜ค๋Š” ์—ญํ•  ํ•˜๋Š” ์„œ๋น„์Šค ๋งŒ๋“ค๊ฒ ใ…‡ใ… build.gradle์— oauth2-client ์˜์กด์„ฑ ์ถ”๊ฐ€ implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' ์ฟ ํ‚ค ๊ด€๋ฆฌ ํด๋ž˜์Šค ๊ตฌํ˜„ํ•˜๊ธฐ public class CookieUtil { // ์š”์ฒญ๊ฐ’(์ด๋ฆ„, ๊ฐ’, ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„)์„ ๋ฐ”ํƒ•์œผ๋กœ ์ฟ ํ‚ค ์ถ”๊ฐ€ํ•˜๋Š” ๋ฉ”์„œ๋“œ public static void addCookie(HttpServletResponse response, Stri.. 2025. 5. 8.
[OAuth] ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ1 ( ํ† ํฐ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ) ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ํ•˜๋ ค๋ฉด, ์ธ์ฆ์„œ๋ฒ„์—๊ฒŒ ํ† ํฐ ์ œ๊ณต ๋ฐ›์•„์•ผ๋จ. 1. ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ์ฝ˜์†” ๋“ค์–ด๊ฐ€์„œhttps://cloud.google.com/cloud-console https://cloud.google.com/cloud-console cloud.google.com [์ฝ˜์†”] ๋ฒ„ํŠผ ํด๋ฆญ. (์ตœ์ดˆ๋ฉด ์‚ฌ์šฉ ๋™์˜ ํ™”๋ฉด ๋œฐ๊ฑฐ์ž„. ๋™์˜ํ•˜๊ณ  ์ ˆ์ฐจ ๋งˆ์น˜๋ฉด ๋จ) 2. ์™ผ์ชฝ ์œ„์˜ [ํ”„๋กœ์ ํŠธ ์„ ํƒ] ํด๋ฆญ, 2-1. [์ƒˆ ํ”„๋กœ์ ํŠธ] ๋ฒ„ํŠผ ํด๋ฆญ 3. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„, ์กฐ์ง ์•Œ์•„์„œ ์ž˜ ์„ค์ •ํ•˜๊ณ [๋งŒ๋“ค๊ธฐ] ๋ฒ„ํŠผ ํด๋ฆญ 4. ์˜ค๋ฅธ์ชฝ ์œ„ ์•Œ๋ฆผ(์ข…๋ชจ์–‘)์— ๋ณด๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ณด์ž„๊ทธ๊ฑฐ ํด๋ฆญ 5. [API ๋ฐ ์„œ๋น„์Šค] - [์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด] ํด๋ฆญ 6. ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ [๋™์˜ ํ™”๋ฉด ๊ตฌ์„ฑ] ํด๋ฆญ 7. ์ฑ…์—์„œ๋Š” User Ty.. 2025. 5. 7.
[Spring Boot] ์ฟ ํ‚ค๋ž€? Cookie ๐Ÿช ์ฟ ํ‚ค๋ž€? ์ฟ ํ‚ค๋Š”, ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ ํ–ˆ์„ ๋•Œ,ํ•ด๋‹น ์‚ฌ์ดํŠธ ์„œ๋ฒ„์—์„œ ๋‚ด ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์ €์žฅํ•˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ์ž„.ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)์— ์ €์žฅ๋จ. ์ด ์ฟ ํ‚ค ๋•๋ถ„์—, ์˜ˆ์ „์— ๋ฐฉ๋ฌธํ•œ ์  ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ณ ์ด์ „์— ๋กœ๊ทธ์ธํ–ˆ๋˜ ์ด๋ ฅ์ด ์žˆ์œผ๋ฉด ๋กœ๊ทธ์ธ ์ •๋ณด๋„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ์ž„. ์ฟ ํ‚ค๋Š” ํ‚ค-๊ฐ’ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์Œ.๋งŒ๋ฃŒ๊ธฐ๊ฐ„, ๋„๋ฉ”์ธ ๋“ฑ ์ •๋ณด ๊ฐ–๊ณ  ์žˆ์ŒexsessionIdaccess_token(JWT ์—‘์„ธ์Šค ํ† ํฐ)theme = darkcartId = xyz123์ด๋Ÿฐ์• ๋“ค... ์‹ค์ œ๋กœ๋Š” HTTP ์š”์ฒญ ํ—ค๋”์— ํฌํ•จ๋˜์–ด ์„œ๋ฒ„๋กœ ๊ฐ. HTTP ์š”์ฒญ ํ†ตํ•ด์„œ ์ฟ ํ‚ค์˜ ํŠน์ • ํ‚ค์— ๊ฐ’ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„๋กœ ์ •๋ณด ์š”์ฒญํ•˜๋ฉด,์„œ๋ฒ„์—์„œ ๊ทธ ์ •๋ณด๋ฅผ ๊ฐ’์œผ๋กœ ๋„ฃ์€ ์ฟ ํ‚ค๋ฅผ ๋งŒ๋“ฆ.๊ทธ๋Ÿฌ๊ณ  HTTP ํ—ค๋”์™€ ํ•จ๊ป˜ ๋Œ๋ ค๋ณด๋ƒ„.(Set-Coo.. 2025. 5. 7.
[OAuth] OAuth๋ž€? ํ๋ฆ„, ์šฉ์–ด ์ •๋ฆฌ OAuth๊ฐ€ ๋ญ˜๊นŒ?OAuth๋Š” ์ œ 3์˜ ์„œ๋น„์Šค์— ๊ณ„์ • ๊ด€๋ฆฌ๋ฅผ ๋งก๊ธฐ๋Š” ๋ฐฉ์‹์ž„.ex) ์นด์นด์˜ค๋กœ ๋กœ๊ทธ์ธํ•˜๊ธฐ, ๋„ค์ด๋ฒ„๋กœ ๋กœ๊ทธ์ธํ•˜๊ธฐ ๋“ฑ๋“ฑ.. OAuth ์šฉ์–ด ์ •๋ฆฌ๋จผ์ € ํ•˜๊ฒ ์Œ. ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ(resource owner)์ธ์ฆ ์„œ๋ฒ„์— ์ž์‹ ์˜ ์ •๋ณด์‚ฌ์šฉ์„ ํ—ˆ๊ฐ€ํ•˜๋Š” ์ฃผ์ฒด.์„œ๋น„์Šค ์ด์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ์ž„. ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„(resource server)๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ , ์˜ค๋„ˆ์˜ ์ •๋ณด๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ์ฃผ์ฒด.๋„ค์ด๋ฒ„, ์นด์นด์˜ค, ๊ตฌ๊ธ€์ด ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„์ž„. ์ธ์ฆ ์„œ๋ฒ„(Authorization server)ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฆฌ์†Œ์Šค ์˜ค๋„ˆ์˜ ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ† ํฐ ๋ฐœ๊ธ‰ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์‹ค์ œ ์šด์˜์—์„œ๋Š” ์นด์นด์˜ค๊ฐ™์€ ๊ธฐ๊ด€์ด ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„, ์ธ์ฆ์„œ๋ฒ„ ์—ญํ•  ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ) ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Client Applica.. 2025. 5. 7.
[Spring Security] Refresh Token ๊ธฐ๋ฐ˜์œผ๋กœ new AccessToken๋ฐ›๋Š” API ๊ตฌํ˜„ํ•˜๊ธฐ ๋‚ด๊ฐ€ ์˜ˆ์ „ ํฌ์ŠคํŒ…์—์„œ ์ป๋˜ ํ† ํฐ ์ธ์ฆ ๊ณผ์ •์ž„. [๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ๋ฐœ๊ธ‰ ๊ณผ์ •]โ€‹1. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„ : ์ธ์ฆ ์š”์ฒญ2. ์„œ๋ฒ„ -> ํด๋ผ์ด์–ธํŠธ : ์•ก์„ธ์Šค ํ† ํฐ & ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์‘๋‹ต3. ์„œ๋ฒ„ -> DB : ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์€ ์ €์žฅ4. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„ :API ์š”์ฒญ5. ์„œ๋ฒ„ : ํ† ํฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ•˜๊ณ  ์‘๋‹ต~~ ์‹œ๊ฐ„์ด ํ๋ฅด๊ณ  ~~6. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„ : (๋งŒ๋ฃŒ๋œ ํ† ํฐ์œผ๋กœ) API ์š”์ฒญ7. ์„œ๋ฒ„ -> ํด๋ผ์ด์–ธํŠธ : ํ† ํฐ ๋งŒ๋ฃŒ๋๋‹ค๊ณ  ์‘๋‹ต8. ํด๋ผ์ด์–ธํŠธ -> ์„œ๋ฒ„ : (๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ๊ณผ ํ•จ๊ผ) ์•ก์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰ ์š”์ฒญ9. ์„œ๋ฒ„ -> DB : ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ์กฐํšŒ & ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ10. ์„œ๋ฒ„ -> ํด๋ผ : ๋งŒ์กฑํ•˜๋ฉด, new ์•ก์„ธ์Šค ํ† ํฐ์œผ๋กœ ์‘๋‹ต11. ํด๋ผ -> ์„œ๋ฒ„ : new ์•ก์„ธ์Šค ํ† ํฐ์œผ๋กœ ๋‹ค์‹œ ์š”์ฒญ...(4๋ฒˆ๋ถ€ํ„ฐ.. 2025. 5. 5.
[Spring Security] Token Filter ๊ตฌํ˜„ํ•˜๊ธฐ config ๋””๋ ‰ํ† ๋ฆฌ์—TokenAuthenticationFilter.java ํŒŒ์ผ ๋งŒ๋“ค๊ฑฐ์ž„. ์ด ํ•„ํ„ฐ์—์„œ๋Š”, ํ† ํฐ์— ๋‹ด๊ธด Authorization ํ—ค๋” ๊ฐ€์ ธ์™€์„œ,์—‘์„ธ์Šค ํ† ํฐ ์œ ํšจํ•˜๋ฉด ์ธ์ฆ ์ •๋ณด ์„ค์ •ํ•˜๋Š”๊ฑธ ํ• ๊ฑฐ์ž„. @Override protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // ์š”์ฒญ ํ—ค๋”์˜ Authorization ํ‚ค์˜ ๊ฐ’ ์กฐํšŒ String authorizationHeader = re.. 2025. 5. 5.
๋ฐ˜์‘ํ˜•