JWT (8) 썸네일형 리스트형 카카오로그인 동작흐름 1. 로그인 인증코드 요청 2. 인증코드 전달 3. 인증코드 전송(AccessToken) 4. 인증코드로 토큰 요청 5. AccessToken발급, 사용자 정보 발급(이메일, 프로필사진, 닉네임 등) 6. 카카오에서 발급받은 토큰으로 서버전용 토큰 생성(JWT Token) 7. 카카오 정보가 담긴 Jwt 토큰을 프론트에 전달 [ 4, 5, 6 ] 인가 토큰으로 카카오 서버에서 사용자 확인 후, DB에 User 저장, 전용 토큰 발행 클라이언트로부터 인가 코드를 받는다. 받은 인가 코드로 카카오 서버에 엑세스 토큰을 요청한다. (이 때 Redirect URI는 프론트와 같아야 한다. 프론트 쪽에 맞추면 된다!) 발급받은 엑세스 토큰으로 카카오 서버에 유저 정보를 받아온다. 필요 시에 회원 가입을 .. 5. [SpringBoot JWT 튜토리얼] 회원가입, 권한검증 # 회원가입 API생성 간단한 유틸리티 메소드를 만들기 위해 SecurityUtil 클래스를 util 패키지에 생성하겠습니다. - SecurityUtil 클래스 public class SecurityUtil { private static final Logger logger = LoggerFactory.getLogger(SecurityUtil.class); private SecurityUtil() { } public static Optional getCurrentUsername() { final Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication == null) { l.. 4. [SpringBoot JWT 튜토리얼] DTO, Repository, 로그인 외부와의 통신에 사용할 DTO 패키지 및 클래스를 생성 Repository 관련 코드 생성 # DTO 클래스 생성 - LoginDto 클래스 로그인시 사용할 DTO @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor public class LoginDto { @NotNull @Size(min = 3, max = 50) private String username; @NotNull @Size(min = 3, max = 100) private String password; } Lombok 어노테이션(Get, Set 등)이 추가되었고 @Valid 관련 어노테이션을 추가했습니다. 로그인 할 이용자의 아이디, 비밀번호를 담을 username, passw.. Spring Security 구조(아키텍처) 문득 JWT 강의를 들으면서 코드를 작성하는데 복잡한건 둘째치고 Spring Security만의 커스텀한 클래스가 굉장히 많았고 이 모든 Spring Security클래스들이 유기적으로 정보를 교환하며 관계를 유지하는 것이었다 찾아보니 이는 대부분 Spring Security와 관련되어 있어서 막무가내로 JWT 코드를 보는 것보단 각 클래스들의 이해관계를 알고 코드를 이해하는 것이 낫다고 생각하여 Spring Security에 대해 더 자세히 공부하고자 한다 Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, (웹 컨테이너에서 관리) Interc.. 3. [SpringBoot JWT 튜토리얼] JWT 코드, Security 설정 추가 # Jwt 설정추가 - application.yml jwt: header: Authorization #HS512 알고리즘을 사용할 것이기 때문에 512bit, 즉 64byte 이상의 secret key를 사용해야 한다. #echo 'silvernine-tech-spring-boot-jwt-tutorial-secret-silvernine-tech-spring-boot-jwt-tutorial-secret'|base64 secret: c2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQtc2lsdmVybmluZS10ZWNoLXNwcmluZy1ib290LWp3dC10dXRvcmlhbC1zZWNyZXQK token-validity-in-seconds: .. Spring Security Spring Security는 Spring에서 사용자 인증/인가를 쉽게 할 수 있도록 제공하는 프레임워크이다. 기본적으로는 세션 기반 인증을 제공한다. Spring Security는 인증과 인가에 대해 서로 분리된 전략을 사용한다. 인증에 대해서는 AuthenticationManager가 가장 책임을 많이 지고 있다. AuthenticationManager의 authenticate() 메서드는 input(ID/PW)이 유효한 principal인지 '인증'하는 역할을 수행한다. 가장 대표적인 AuthenticationManager의 구현체는 ProviderManager이다. Provider Manager는 AuthenticationProvider 인스턴스들의 chain을 대표하고 있다. Authentica.. [SpringBoot JWT 튜토리얼] Security, Data 설정 RestController : 컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다. RequestMapping : 요청에 대해 어떤 Controller가 처리할지를 맵핑하기 위한 어노테이션. GetMapping : HTTP Method인 Get인 요청을 받을 수 있는 API를 만들어 준다. ResponseEntity : 사용자의 HttpRequest에 대한 응답 데이터를 포함하는 클래스. ResponseEntity.ok(): 정상적인 요청이면 메소드의 파라미터 내용을 반환한다. # 401 Unauthorized 해결을 위한 Security 설정 EnableWebSecurity : 기본적인 Web보안을 활성화 하겠다는 의미 , 추가적인 보안설정을 위해 WebSecurityConfigurerAdapter.. JWT 소개 # Spring Security란? Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 하위 프레임워크. 인증(Authentication)과 권한(Authorization)에 대한 부분을 Filter 흐름에 따라 처리. 기본적으로 세션&쿠키 방식으로 인증되며, 어노테이션으로 간단한 설정이 가능하다 # 기본용어 인증 (Authentication) : 누구인가? 사용자 본인이 맞는지 확인하는 절차.(ex. 로그인) 인가 (Authoriation) : 어떤것을 할 수 있는가? 인증된 사용자가 요청한 자원에 접근이 가능한지 확인하는 절차. (ex. 로그인한 유저가 게시글을 쓸수있는 권한이 있는지) Principal(접근 주체) : 보호받는 자원(리소스)에 접근하는 유저 Credential.. 이전 1 다음