사지방에서 Spring Security 공부하기 #6 - OAuth2 + JWT를 이용한 인증, 인가 구현
·
Spring/Spring Security
오늘의 목표 JWT를 이용해 인증 인가를 구현하던 api에 oauth2를 이용한 소셜 로그인 기능 추가하기 OAUTH2 인증&인가 진행 과정 기본 동작 과정은 저번 글에서 설명했듯이 다음과 같다. (여기서 이야기하는 Client는 실제 사용자가 아닌 Oauth Provider에 등록한 우리의 서비스임을 주의하자) Resource Owner 가 Client에 로그인 요청 Client는 Authorization Server에 다시 로그인 요청(Clitne Id, Redirect URI, Response Type, Scope 전달) Authorization Server에서 Client에 로그인 페이지 제공 Resource Owner가 로그인 성공시 Authrorization code 와 함께 redirect ..
사지방에서 Spring Security 공부하기 #5 - OAuth2 + Session을 이용한 인증, 인가 구현
·
Spring/Spring Security
인증 인가를 구현하는 방식으로 session과 jwt 방식을 알아봤다. 이번엔 Spring Security에서 OAuth2를 이용해 인증, 인가를 구현하는 방법에 대해 공부해봤다. OAuth2란? 구글, 페이스북, 카카오와 같은 다양한 플랫폼의 사용자 데이터에 대해 접근하기 위해 제 3자가 사용자 데이터에 대한 접근 권한을 위임받는 표준 프로토콜이다. https://hudi.blog/oauth-2.0/ OAuth 2.0 개념과 동작원리 2022년 07월 13일에 작성한 글을 보충하여 새로 포스팅한 글이다. OAuth 등장 배경 우리의 서비스가 사용자를 대신하여 구글의 캘린더에 일정을 추가하거나, 페이스북, 트위터에 글을 남기는 기능을 hudi.blog OAuth2를 이용해 인증, 인가를 구현하려면 어떻게..
사지방에서 Spring 공부하기 Spring Security #4 - JWT를 이용한 인증 인가 적용 코드
·
Spring/Spring Security
인증 로직 아이디 & 비밀번호 담아서 서버에 요청 서버에서 검증 올바르다면 AccessToken, Refresh Token 생성 후 유저에게 반환 Refresh Token은 Redis에 따로 저장 올바르지 않다면 에러 메세지 반환 기존 Spring Security의 인증로직이다. 기존 form Login 방식의 인증용 필터인 UsernameAuthenticationFilter는 유저 아이디와 비밀번호를 요청으로 받아서 확인한 후 Authentication 객체를 만들어서 securityContext에 넣어 사용한다. 그 후 응답시에 HttpSession에 Authentication 객체를 넣은 후 세션 ID를 쿠키로 설정해둔다. 이 인증로직을 재활용하려면 인증용 필터를 새롭게 만들어 줘야 하는데 우리가 ..
사지방에서 Spring 공부하기 Spring Security #3 - JWT를 이용한 인증 인가 적용하기
·
Spring/Spring Security
JWT란? JWT(Json Web Token) 은 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격 사용자의 인증, 인가 정보를 주고 받기 위해 사용한다. 주로 Authorization 헤더에 Bearer + token 형태로 사용된다. Base64로 표현 되어 있고 인코딩, 디코딩이 쉽다. Base64란? 64진법 이라는 뜻. 8비트 이진 데이터를 ASCII 영역의 문자로 바꾸는 인코딩 방식. 구성 방식 토큰의 구조는 다음과 같다. Header : 토큰의 타입이나 어떤 알고리즘으로 생성되었는지 저장한다. Payload : 사용자, 토큰에 대한 정보를 저장한다. (표준은 키를 3글자로 지정한다.) Signature : Header와 Payload 값을 서버에 있는 개인 키를 활용해 암호화해 저장한다..
사지방에서 Spring 공부하기 - 기존 프로젝트에 Spring Security 적용기
·
Spring/Spring Security
기존 프로젝트는 유저 이름과 비밀번호를 DB에 저장한 후, 스프링 인터셉터와 httpSession을 이용해 인증과 인가를 구현했다. DB에 저장한 아이디, 비밀번호와 세션을 사용하는 기존 프로젝트의 인증, 인가 방식을 그대로 유지하며 Spring Security를 적용해보았다. 1. build.gradle 에 Spring Security 추가 dependencies { . . . //Spring Security 추가 implementation 'org.springframework.boot:spring-boot-starter-security' testImplementation 'org.springframework.security:spring-security-test' } 2. 보안 설정 - Security..
사지방에서 Spring 공부하기 - Spring Security란?
·
Spring/Spring Security
스프링 시큐리티란? 인증, 인가 그리고 보편적인 공격들을 방어해주는 웹 보안 관련 스프링 하위 프레임워크이다. 작동 방식 스프링 시큐리티는 Servlet Filter기반으로 작동한다. 그리고 SecurityFilterChain 라는 이름의 스프링 빈으로 Security 설정을 관리한다. 그러나 Spring Bean은 스프링 컨테이너(Application Context)에서 관리되는데 Servlet Filter는 서블릿 컨테이너(톰캣)에서 관리하므로 서로의 생성주기가 다르다. 즉 스프링 빈으로 설정한 내용을 Servlet Filter에서 사용할 수 없다. 그래서 스프링 시큐리티는 서블릿 필터에서 서블릿 필터를 구현한 스프링 빈에게 요청을 위임하는 DelegatingFilterProxy를 사용해서 실제로 동..