본문 바로가기

Spring

Spring Security의 인증 과정과 주요 모듈 1. Spring Security 인증 과정 1) 로그인 요청 사용자가 폼에 아이디, 패스워드를 입력하면 HttpServletRequest에 아이디, 비밀번호가 전달된다. AuthenticationFilter가 넘어온 아이디, 비밀번호의 유효성 검사를 실시한다. 2) Authentication 생성 유효성 검사 후 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨준다. 3) Authentication 전달 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManager에 전달한다. 4) UsernamePasswordAuthenticaionToken을 AuthenticationProvider에 전달 5) 유효.. 더보기
Spring Security의 개념과 Spring Security Filter Chain 1. Spring Security api실행 시 마다 사용자를 인증해야 하는데, 이를 구현한 것이 스프링 시큐리티이다. 스프링 기반의 어플리케이션의 보안(인증, 권한, 인가) 등을 담당하는 스프링의 하위 프레임워크이다. 즉, 인증과 인가를 담당하는 프레임워크! 주로 서블릿 필터와 이로 구성된 필터체인으로 구성된 위임 모델을 사용한다. 보안과 관련해 체계적으로 많은 옵션을 제공하기 때문에 보안 관련 로직을 작성하지 않아도 된다는 장점이 있다. 2. 기본 용어 인증(Authentication) 사용자의 신원을 입증하는 과정으로 로그인하는 과정이라고 생각하면 된다. 인가(Authorization) 권한 부여나 허가와 같은 의미로 사용되고 어떤 대상이 특정 목적을 실현하도록 허용하는 것이다. 권한에 따른 상이한.. 더보기
OAuth 2.0의 개념과 동작 방식 1. OAuth 2.0의 개념 웹 및 어플리케이션 인증 및 권한 부여를 위한 개방형 표준 프로토콜이다. 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대해 웹사이트나 어플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임을 위한 개방형 표준이다. third-party 어플리케이션이 사용자의 리소스에 접근하기 위한 절차를 정의하고 서비스 제공자의 api를 사용할 수 있는 권한을 부여하였다 third-party 어플리케이션은 OAuth를 통해 사용자의 소셜 미디어 프로필 정보에 접근할 수 있다, 네이버, 구글, 카카오와 같은 소셜 미디어 간편 로그인이 있다. 2. 구성 역할 리소스 소유자(resource owner) OAuth 2.0프로토콜을 사용.. 더보기
토큰(Token)과 JWT 1. 토큰 인증 클리아언트가 서버에 접속하면 서버에서 해당 클라이언트에게 "인증되었다는 의미"로 토큰을 부여한다. 토큰은 유일하고, 토큰을 발급받은 클라이언트는 또 다시 서버에 요청을 보낼 때 요청 헤더에 토큰을 심어 보낸다. 서버에서는 클라이언트로 받은 토큰을 서버에서 제공한 토큰과의 일치 여부를 체크해 인증 과정을 처리한다. 앱에는 쿠키와 세션이 없기 때문에 앱과 서버가 통신 및 인증할 때 가장 많이 사용한다. 2. 기존 세션 기반의 인증 방식을 개선한 토큰 인증 방식 기존 세션 기반의 인증은 서버가 파일이나 데이터베이스에 세션 정보를 갖고 있어야 하고 이를 조화하는 과정이 필요해 많은 오버헤드가 발생한다. 토큰은 세션과 달리 서버가 아닌 "클라이언트"에 저장되기 때문에 메모리나 스토리지 등을 통해 .. 더보기
쿠키(Cookie)와 세션(Session) 1. HTTP 프로토콜의 특징 Connectionless 프로토콜, 연결 지향 클라이언트가 서버에 요청했을 때, 그 요청(request)에 맞는 응답(response)을 보낸 후 연결을 끊는 처리 방식이다. HTTP 1.1 버전에서 커넥션을 계속 유지하고 요청을 재활용하는 기능이 디폴트 옵션으로 추가되었다. → HTTP header에 keep alive 옵션으로 커넥션을 재활용 하게 된다. HTTP가 연결 지향인 TCP 위에서 구현되었기 때문에 연결 지향적이라고 할 수 있다고 하지만, 아직까지는 네트워크 관점에서 keep alive는 옵션으로 두고, 서버 측에서 비연결 지향적인 특성으로 커넥션 관리에 대한 비용을 줄이는 것을 명확한 장점으로 보기 때문에 비연결 지향으로 본다. Stateless 프로토콜 .. 더보기
[인프런 워밍업 클럽] 미니프로젝트 1단계 🖊️구현해야 할 기능 🖊️데이터베이스 MySql을 이용해 데이터베이스를 만들었다. 테이블은 team과 employee로 구분해 만들어줬다. team 테이블 create table team ( id bigint auto_increment, name varchar(40), manager_name varchar(20), member_count bigint, primary key (id) ); employee 테이블 create table employee ( id bigint auto_increment, name varchar(20), team_id bigint, role varchar(20), birthday date, work_start_date date, primary key (id) ); 🖊️팀 등록, .. 더보기
[인프런 워밍업 클럽] BE - 2주차 회고록 [2주차 학습 내용] 진도표에는 32강까지 수강하라고 안내 되어있지만, 36강까지 듣고 섹션 1, 2 강의를 다시 들으면서 복습하는 시간을 가졌습니다. 강의를 다시 돌려보면서 놓쳤던 부분이 뭐였는지를 체크하고, 강사님께서 제공해주시는 강의 자료에 추가 필기를 하며 내용 복기를 했습니다. [미션 수행] 6번째 과제 : https://yestruly.tistory.com/96 7번째 과제 : https://yestruly.tistory.com/97 지난 4번째 과제에서 연장되어 강의 내용을 적용해보는 과제였습니다. controller-service-repository로 분리하고 JPA를 적용하면서 "기존에는 이렇게 작성되어있는 걸 이런 식으로 작성하고 진화하게 되었구나!"를 직접 느껴볼 수 있었어요. 6, .. 더보기
[인프런 워밍업 클럽] 7번째 과제 - JPA 사용하기 🔑문제 1 과제 6은 아래 링크에서 확인 할 수 있다. https://yestruly.tistory.com/96 🔑코드 Entity package com.group.libraryapp.domain.fruit; import java.time.LocalDate; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Fruit { @Id @GeneratedValue(strategy = GenerationType.I.. 더보기

728x90