๋ฐ์ํ ๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ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. ์ด์ 1 2 3 4 5 6 7 ๋ค์ ๋ฐ์ํ