Coding 67

Spring Security : OAuth2.0 #Day27

OAuth2.0 RFC OAuth 2.0 : 신뢰할 만한 써드파티에서 사용자의 인증을 대신 처리해주고 Resource에 대한 자격 증명용 토큰을 발급한 후, Client가 해당 토큰을 이용해 써드 파티 애플리케이션의 서비스를 사용하게 해주는 방식 OAuth2.0 인증 컴포넌트(구성요소) Provider : 인증과 리소스를 제공하는 서버(서비스) Resource Server : Client 요청을 수락하고 resource를 제공하는 서버, Client가 Resource Server에 접근할 수 있는 권한을 부여 Authorization Server : 리소스 저장 서버, Access Token으로 접근 Client : resource에 엑세스하는 서버 (web 애플리케이션 서버) Resource Owner..

Spring Security : JWT #26

token : 광범위하게 사용되는 용어, 암호화된 데이터 → 쿠키 세션 : 서버와 클라이언트가 반씩 가져감 FormLogin 쿠키 : 클라이언트가 가짐(브라우저에서 관리할 수 있는 아이템, 토큰은 문자열일 뿐인데 쿠키에 담아서 운영하는 것) -> id/pwd를 최초로 적용해서 해당 필터를 거친 후 토큰(2덩이)를 받아 추후에는 토큰 값만 던짐 JWT(Json Web Token) : 토큰방식에서 대표적인것이지 = 토큰은 아님 XXXX.YYYY.ZZZZ : 암호화되어있음(Base64 URL 인코딩 사용) header payload : 인증되어야할 정보. 디코딩하면 바로 보이기 때문에 민감한 정보가 들어가면 안됨 signature //실제 헤더에 토큰값이 담기는 모습 // Http header >> key :..

Spring Security : Authorization 2/2 #Day25

https://docs.spring.io/spring-security/reference/servlet/architecture.html 권한, 인가의 의미이며 member - role -privilege의 관계 authentication이 완료된 후에 authorization 설정 진행 loadUserByUsername 인터페이스 내에 SimpleGrantedAuthority를 사용해 Role 베이스 형태의 권한을 지정 @RequiredArgsConstructor @Service public class CustomUserDetailsService implements UserDetailsService { private final MemberService memberService; @Override publi..

Spring Security : Authentication 1/2 #Day24

Spring Security 개요 Spring MVC 기반 애플리케이션의 인증(Authentication)과 인가(Authorization) 기능을 지원하는 보안 프레임워크로써, Spring MVC 기반 애플리케이션에 보안을 적용하기 위한 사실상의 표준 다양한 유형(폼 로그인 인증, 토큰 기반 인증, OAuth 2 기반 인증, LDAP 인증)의 사용자 인증 기능 적용 애플리케이션 사용자의 역할(Role)에 따른 권한 레벨 적용 애플리케이션에서 제공하는 리소스에 대한 접근 제어 민감한 정보에 대한 데이터 암호화 SSL 적용 일반적으로 알려진 웹 보안 공격 차단 이 외에도 SSO, 클라이언트 인증서 기반 인증, 메서드 보안, 접근 제어 목록(Access Control List) 같은 보안을 위한 기능들을 지..

보안 기초 : 쿠키(Cookie) & 세션(Session) #Day23

HTTPS : 보안인증서가 있는 http 암호화 : 클라이언트와 서버가 데이터를 암호화하여 주고받기 위해 비대칭키 방식과 대칭키 방식 혼용하여 사용 인증서 : rootCA로 부터 서버의 신원을 보증 HTTPS 사설인증서 발급 및 서버 구현 자바에서 지원하는 인증서 형식 PKCS12 (public key cryptographic standards #12) :여러 인증서와 키를 포함할 수 있으며, 암호로 보호된 형식(널리 사용) JKS (Java KeyStore) : PKCS12와 유사. 독점 형식이며 Java 환경으로 제한 1. 인증서 생성 mkcert : PKCS12형태의 사설인증서 생성 라이브러리 brew install mkcert //로컬을 인증된 발급기관으로 추가 mkcert -install //p..

gitAction 자동배포 #Day22

AWS EC2에 git변경 시 자동 배포 : github commit/push(trigger point) ⇒ (최종) AWS EC2에 컨테이너 배포 local git → (commint/push) github repo → (자동 : gitaction) docker hub img 생성 → (자동 : gitaction) aws 컨테이너 배포 Step 1(수동배포). gitAction을 사용해 github push 되면 docker hub에 이미지 생성 github action 활성화 (IntelliJ) .github>workflows>main.yml (github Settings) Secrets and variables > Actions : main.yml에서 사용한 secret 변수 설정 DOCKER_HU..

Docker란? 컨테이너 생성하고 구동하기 #Day21

Docker : 컨테이너를 관리하는 프로그램 Docker가 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징 컨테이너 : 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함될 수 있음 가상화와 차이점 가상머신(VM) : 서버 하드웨어를 가상화(또는 직접 관리할 필요성을 제거) 컨테이너는 서버의 운영 체제를 가상화. Docker는 컨테이너를 위한 운영 체제(또는 런타임). 컨테이너를 실행하려는 각 서버에 Docker Engine이 설치되어 컨테이너를 구축, 시작 또는 중단 등이 가능 → 컨테이너만 있으면 환경이 그대로 유지됨 → 컨테이너 통째로 배포(업로드) 가능함 → 내려받아서 그대로 사용가능 ⇒ 여러 곳에 배포가 가능하고, 휴먼에러 방지함(언제든지 동일한 환경 ..

Spring API문서화 2/2 Spring RestDocs #Day20

Controller의 슬라이스 테스트를 통해 테스트가 통과(”PASSED”)되어야지만 API 문서가 정상적으로 생성됨 API 스펙 정보와 API 문서 정보의 불일치로 인해 발생하는 문제를 방지 Swagger는 애너테이션 내에 API 스펙 정보를 문자열로 입력하기 때문에 API 스펙 정보와 API 문서 내의 정보가 불일치 할 수 있음 Swagger처럼 API를 호출해볼 수 있는 툴의 역할은 없음 Spring Rest Docs사용을 위한 설정 슬라이스 테스트 코드 작성 →API 스펙 정보 코드 작성 →test 태스크 실행 →API 문서 스니펫 생성스니펫을 포함한 API 문서 생성.adoc 파일의 API 문서를 HTML로 변환 Spring Rest Docs를 사용해서 API 문서를 생성하기 위해서는 .adoc..

Spring API문서화 1/2 Swagger #Day19

API 문서화(=API 스펙/사양/Specification) : REST API 백엔드 애플리케이션에 요청을 전송하기 위해서 알아야 되는 요청 정보(요청 URL(또는 URI), request body, query parameter 등)를 문서로 정리한 것 Spring에서 자주사용하는) API 문서 작성 방법 Spring rest docs 테스트코드에 annotation 작성(테스트코드가 전부 통과되어야 함) 테스트코드를 짜야하므로 바로 결과를 보기는 어렵다 문서의 역할만 함 Swgger 컨트롤러 클래스에서 annotation 형태 - java에서도 많이 사용 가독성이 떨어짐 간편하게 문서화할 수 있음 문서에서 바로 테스트 가능 Swagger : http://localhost:8080/swagger-ui/..

Spring View-Thymeleaf #Day16

Thymeleaf Spring에서 MVC의 View를 구현하기 위해 사용하는 방법 중 하나(mustche → 좀더 간단) BE에서 FE까지 구현하는 방식이며 SSR : 서버 사이드 랜더링(view) dependencies { ... //타임리프 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' } ~APIController : API 컨트롤러 @RestController ~ViewController : 화면제어 컨트롤러 @Controller getmapping만 사용 : post/put/delete 방식은 데이터를 처리하기 위한 메서드 → 일반 주소창에는 데이터를 실을 수가 없어서 오류가 남 파일명을 return해줌 → 템플릿..