스프링/스프링 시큐리티
-
jwt - JwtAuthorizationFilter스프링/스프링 시큐리티 2024. 1. 13. 18:08
저번 포스팅에서 사용자의 요청을 토큰으로 받는 코드를 작성했다. 이번 포스팅에서는 사용자가 개인정보에 접근하기 위해서 다시 로그인을 하는 것이 아니라 JWT 토큰을 이용하여 전자서명을 통해 접근할 수 있도록 하는 코드를 작성할 것이다. JwtAuthorizationFilter는 어떤 요청이 있을 때 작동하는게 아니라 SecurityConfig.class @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final UserRepository userRepository; private final CorsConfig corsConfig; private final PrincipalDetai..
-
jwt - JwtAuthenticationFilter스프링/스프링 시큐리티 2024. 1. 13. 16:54
로그인 동작 구조 @RequiredArgsConstructor public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager; // login 요청을 하면 로그인 시도를 위해서 실행되는 함수이다. @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { System.out.println("JwtAuthenticatio..
-
jwt 임시 토큰을 만들어서 필터 테스트스프링/스프링 시큐리티 2024. 1. 12. 21:28
웹에 접근할 때 필터를 통해서 토큰이 제대로 전달되는지 확인한다. 실제 jwt 토큰을 만들기 전에 필터 테스트를 진행해볼 예정이다. SecurityConfig.class @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final CorsConfig corsConfig; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.addFilterBefore(new MyFilter1(), SecurityContextPersistenceFilter.class); ... (생략) } http..
-
jwt를 위한 security 설정스프링/스프링 시큐리티 2024. 1. 12. 20:38
jwt를 사용하기 위해서는 기본적인 스프링 시큐리티 설정이 필요하다. 이번 포스팅에서는 jwt를 사용하기 전에 기본적인 설정들을 해줄 것이다. SecurityConfig.class @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final CorsConfig corsConfig; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(CsrfConfigurer::disable); http.sessionManagement(session -> session.sessionCre..
-
JWT(Json Web Token)스프링/스프링 시큐리티 2024. 1. 12. 19:33
세션은 간단하게 말하자면 클라이언트의 요청이 있을 때 세션 저장소에 사용자의 정보를 넣어두는 형식이다. 하지만 만약에 로드 밸런싱을 통하여 서버를 분할한다면 세션 저장소를 3개로 나누는 것도 애매하고, 하나로 통합하자니 너무 복잡하고 성능상 느려질 수 있다는 단점도 존재한다. 이러한 문제점을 해결하기 위해 JWT(Json Web Token)을 사용한다. 클라이언트가 요청을 보내면 서버는 세션이 아니라 JWT를 만드는 것이다. 또한 JWT는 통신에서 CIA를 지키기 위한 RSA를 사용하기 때문에 안전하다. JWT(Json Web Token)란? 정보를 JSON 객체로 안전하게 전송하기 위한 개방형 표준이다. 이 정보는 디지털 서명이 되어 있어서 신뢰할 수 있다. 서명된 토큰은 정보의 무결성을 확인할 수 있..
-
OAuth - 네이버 로그인 (provider 직접 등록)스프링/스프링 시큐리티 2024. 1. 10. 20:56
스프링에서 기본적으로 구글, 페이스북 같은 로그인을 할 때 각각의 provider를 넘겨준다. 하지만 우리나라에서만 사용되는 네이버, 카카오등은 제공되지 않는다. getAttribute 구글 - sub :1234 페이스북 - id : 1234 이런 것과 같이 네이버에도 attribute가 있을 것이다. 네이버는 기본적으로 provider가 아니기 때문에 직접 등록해줘야 한다. 구글, 페이스북과 같은 방식으로 개발자 사이트에서 애플리케이션 등록을 한 다음에 application.yml에 추가해준다. application.yml spring: security: oauth2: client: registration: naver: client-id: g1U5lR4UnvavwMI5XS1Y client-secret:..
-
OAuth - 페이스북 로그인 (OAuth2UserInfo - 각각의 provider)스프링/스프링 시큐리티 2024. 1. 10. 20:06
페이스북 로그인 구현도 구글과 비슷하게 진행된다. 페이스북 로그인 api 생성 페이지에서 앱을 만들어준 다음에 정보를 application.yml에 입력하면 된다. application.yml spring: security: oauth2: client: registration: google: client-id: 1031257684665-knkr9fbcoeud3gg55hc3kr47cd2n2g2q.apps.googleusercontent.com client-secret: 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 redirect-uri: http://localhost:8080/login/oauth2/code/google scope: - email - profile facebook: cl..
-
OAuth - 구글 로그인(구글 로그인 및 자동 회원가입)스프링/스프링 시큐리티 2024. 1. 10. 00:11
시큐리티 세션에 들어갈 수 있는 객체는 Authentication 객체이다. Authentication이 담을 수 있는 타입은 OAuth2User와 UserDetails 타입이다. 저 2개의 타입은 User 객체를 가지고 있지 않기 때문에 PrincipalDetials라는 타입을 만들어서 UserDetails를 implement 시켰는데, 여기에 OAuth2User까지 implement한다는 내용이 이전 포스팅이었다. PrincipalDetails.class @Data public class PrincipalDetails implements UserDetails, OAuth2User { private User user; private Map attributes; // 일반 로그인 public Princi..