본문 바로가기

Spring/Spring Security8

[OAuth2] OAuth2 란? / OAuth2의 동작 방식 OAuth2 : 특정 애플리케이션(Client) 에서 사용자의 인증을 직접 처리하는 것이 아닌, 사용자 정보를 보유하고 있는 신뢰할만한 3rd party 애플리케이션 (Github, Google, Facebook 등) 에서 사용자 인증을 대신 처리 Resource에 대한 자격 증명용 토큰을 발급 Client가 해당 토큰을 이용해 써드파티 애플리케이션의 서비스를 사용하게 해주는 방식 ➡ 사용자의 크리덴셜이 클라이언트 서비스 애플리케이션에 직접적으로 제공되지 않아도 됨! ex) 사용자의 Google Calendar 일정 기능을 이용하는 A 애플리케이션 로그인 자체는 구글 로그인 인증, 로그인 성공시 AccessToken 발급, 구글 Calendar API 이용 위해 AccessToken 이용 ⬇ A 애플리케.. 2022. 11. 28.
[JWT] (수정중) Spring Security에서의 JWT 인증 코드 정리 📁 디렉토리 * 🌳 = 클래스, 🌱 = 해당 클래스 내 메서드, 내부 클래스 JWT 적용을 위한 사전 작업 : JWT 적용 코드를 작성하기 전에 기초적인 Spring Security 설정 작업을 한다. - build.gradle 에 의존 라이브러리 추가 (jjwt) - UserDto의 Post 내부클래스에 password 필드 추가 - Member 엔티티 클래스에 password 필드 추가 - MemberService 클래스에 사용자 등록시 패스워드+권한정보 함께 DB에 저장되도록 관련 코드 추가 (PasswordEncoder, CustomAuthorityUtils DI) *🌳CustomAuthorityUtils : 메모리, DB에 저장된 Role 기반으로 권한 정보 생성해주는 Util 이다. - 🌳 S.. 2022. 11. 25.
[JWT] JWT(JSON Web Token)란? JWT(JSON Web Token) : 데이터를 안전, 간결하게 전송하기 위해 고안된 인터넷 표준 인증 방식 토큰 인증 방식에서 가장 범용적으로 사용됨 *간략 순서 JSON 포맷의 토큰 정보를 인코딩 ⬇ 인코딩 된 토큰 정보를 Secret Key로 서명(Sign)한 메세지를 Web Token으로써 인증 과정에 사용 JWT의 종류 1. 액세스 토큰 (Access Token) 2. 리프레시 토큰 (Refresh Token) : 클라이언트가 로그인 시 두 가지 모두 받음 Access Token - 보호된 정보들에 접근할 수 있는 권한 부여에 사용 - 짧은 유효기간 (Access Token 탈취 될 경우 오래 쓰지 못하게 하려고) ⬇ Refresh Token - Refresh Token 을 이용하여 새로운 Ac.. 2022. 11. 23.
[JWT] 자격 증명 방식 : 세션 기반 vs 토큰 기반 * 세션? : HTTP 가 비연결성(Connectionless), 비상태성(Stateless)의 특성을 가지고 있기 때문에 인증된 사용자 request의 상태를 유지하기 위한 수단! 세션 기반 자격 증명 방식? : 서버 측에 인증된 사용자의 정보를 세션 형태로 세션 저장소에 저장 클라이언트한테 요청이 들어오면, 세션 저장소에 저장된 세션 정보 = 사용자가 제공하는 정보가 일치하는지 확인 세션 기반 자격 증명의 특징 인증된 사용자 정보 : 서버 측 세션 저장소에서 관리 세션 ID (=사용자 세션의 고유 ID) 쿠키에 저장되어 인증된 사용자 증명 수단으로 사용 상대적으로 적은 네트워크 트래픽 (서버 측에서 세션 정보 관리) 세션 불일치 문제 발생 가능성 ⬆ (서버의 확장성 면) 세션 데이터 ⬆, 서버의 부담.. 2022. 11. 23.
[Spring Security] 웹 요청의 일반적 처리 흐름 / Spring Security 의 인증 & 권한 부여 처리 흐름 Spring Security에서 제공하는 컴포넌트들이 애플리케이션 내부에서 User의 인증, 권한에 대한 처리를 알아서 진행해준다! (filter chain) but, Spring Security 의 동작 방식을 조금 더 잘 알기 위해서는 각각의 흐름 잘 아는 것이 중요하다. Spring Security 의 주요 기능이 1. 인증, 2. 인가(권한 부여) 이므로 이에 대한 흐름을 알아보도록 한다! 웹 요청의 일반적인 처리 흐름 (1)에서 사용자가 보호된 리소스를 요청 ➡ 사용자 김보리가 A사이트의 그룹 B에 가입된 회원들만 볼 수 있는 글을 보려고 함 (2)에서 인증 관리자 역할을 하는 컴포넌트가 사용자의 크리덴셜(Credential)을 요청 * 사용자의 크리덴셜 = 신원 증명 정보 (password) .. 2022. 11. 22.
[Spring Security] Spring Security 란? + 용어 정리 ✨ Section 3에서 만들었던 샘플 애플리케이션에 없는 요소들 : - 인증(Authentication) 기능 : 로그인 기능 - 인가(Authorization) 기능 : API 대한 권한 부여 기능 - 웹 보안 취약점 대비 Spring Security 란? : Spring MVC 기반 애플리케이션의 인증(Authentication), 인가(Authorization) 기능을 지원하는 보안 표준 프레임워크 Spring Security로 할 수 있는 보안 강화 기능 다양한 유형의 사용자 인증 기능 적용 ex) 폼 로그인 인증, 토큰 기반 인증, OAuth 2 기반 인증, LDAP 인증 애플리케이션 사용자의 역할(Role)에 따른 권한 레벨 적용 애플리케이션에서 제공하는 리소스에 대한 접근 제어 민감한 정보.. 2022. 11. 22.
[Spring Security] Spring Security의 기본 구조, 동작 방식 (2) - Database User [Spring Security] Spring Security의 기본 구조, 동작 방식 (1) -InMemory User Spring Security 흐름 적용을 위해 CSR 방식이 아닌 SSR 방식을 이용함 각각의 화면에 맞는 html 파일이 있다! (타임리프 방식) 화면 설명 ⬇ 커피 보기 화면 - 모든 사용자 접근 가능 전체 주문 목록 보기 wlikeoxy.tistory.com 이 글에 이어서 작성! 애플리케이션 사용자에 Spring Security 를 적용시키는 방법을 두 가지 배웠다. 이번에는 InMemory User 가 아닌 DB에 저장되는 User 인증 방식을 정리한다. Custom UserDetailsService : User의 인증정보를 테이블에 저장, 테이블에 저장된 인증 정보를 이용해 .. 2022. 11. 21.
[Spring Security] Spring Security의 기본 구조, 동작 방식 (1) - InMemory User Spring Security 흐름 적용을 위해 CSR 방식이 아닌 SSR 방식을 이용함 각각의 화면에 맞는 html 파일이 있다! (타임리프 방식) 화면 설명 ⬇ 커피 보기 화면 - 모든 사용자 접근 가능 전체 주문 목록 보기 화면 - admin only 마이페이지 화면 - 일반사용자(user) only Spring Security 적용하기 1. 의존 라이브러리 추가 : spring-boot-starter-security 2. spring security 디폴트 로그인 페이지로 이동 username : user password : 로그에 출력됨 디폴트 페이지가 아닌 만들어둔 html 파일로 로그인하고 싶다? ➡ Spring Security Configuration 적용 : 원하는 인증방식, 웹 페이지 접.. 2022. 11. 21.