본문 바로가기

프로그래밍/기타62

[JWT+JAVA] JWT(Json Web Token)에 대해서 자세히 알아봅시다 - 실습편 안녕하세요. 이전 포스팅에서 JWT의 이론적인 측면에 대해서 자세히 다뤄보았습니다. 오늘은 JWT를 java에서 생성해보고 검증하는 코드를 실제로 작성해보도록 하겠습니다. 오늘 실습한 내용은 github에 올려두어 직접 테스트를 진행해보실 수 있습니다. 실습 코드 github Link 환경 아래가 오늘 jwt 실습에 사용할 라이브러리입니다. jjwt를 사용합니다. jjwt를 사용하는 이유는 라이브러리를 선택할 때 아래의 기준으로 선택되었습니다. 표준 스펙을 대부분 지원하는가 ? project가 가장 star의 수가 많은가 ? 문서가 잘 되어있는가 ? implementation("io.jsonwebtoken:jjwt-api:0.11.5") runtimeOnly("io.jsonwebtoken:jjwt-imp.. 2023. 2. 27.
[JWT] JWT(Json Web Token)에 대해서 자세히 알아봅시다 - 이론편 안녕하세요. 오늘은 JWT와 그 기본적인 스펙에 대해 자세히 알아보는 시간을 가져보도록 하겠습니다. 저의 옛날 포스팅에 보면 JWT에 대해서 간단히 설멍했던 글이 있습니다. [REST API] REST API의 Security With JWT 하지만 너무 단순한 개념적인 부분만 설명드렸기 때문에 이번 기회로 제대로 정리해보고자 합니다. JWT 란 무엇인가 ? JWT는 Json Web Token의 약자로써 서로다른 기기에 데이터를 전달할 때 사용하는 방법중 하나입니다. 구성은 기본적으로 Base64포맷이며 Header와 Body(claim 이라고 부르기도 합니다) 그리고 Signature 부분으로 나뉘어집니다. 실제로 JWT는 아래처럼 생겼습니다. .을 기준으로 slice하면 첫번째 부분부터 Header,.. 2023. 2. 19.
[Spring Security] 인증 Filter를 기준으로 Custom Filter 추가와 변경 안녕하세요. 오늘 포스팅에서는 인증 Filter의 추가와 변경하는 방법에 대해서 알아보도록 하겠습니다. Filter Spring Securtiy는 기본적으로 Filter를 기반으로 동작합니다. 따라서 Spring Security Framework를 이해하기 위해서는 Filter에 대해서 이해하는것이 필수입니다. Filter는 요청을 수신하고 그 논리를 실행하고 최종적으로 다음 Filter로 요청을 전달하는 역할을 합니다. 아래의 이미지는 여러 필터가 동작하는 방식을 나타냅니다. Filter 1에서 로직을 실행하고 Filter 2로 전달, Filter 3으로 전달하고 마지막에는 Controller에서 Request를 받아서 처리합니다. 그리고 Controller의 Response가 만들어지고 이렇게 만들어.. 2023. 1. 18.
[Spring Security + JPA] JPA를 사용해서 Spring Security User 인증 서비스 만들기 안녕하세요. 오늘은 유저 정보를 MySQL에 저장하고 JPA를 활용하여 이 정보를 기준으로 Spring Security에서 유저의 인증을 확인하는 샘플을 만들어보도록 하겠습니다. 오늘 구현할 부분은 아래의 이미지에서 색깔로 칠해져 있는 부분입니다. 이부분들을 커스터 마이징하면 DB에서 유저를 가져와서 이를 인증에 이용할 수 있게 됩니다. 오늘 구현한 샘플은 github에 올려두었습니다. 전체 코드가 궁금하신 분들은 github repository에 접근하시면 확인이 가능합니다. 구현 필요 부분 오늘 실습에서 Spring Security의 Interface를 이해하고 있어야하는 부분은 아래와 같습니다. 해당 Interface가 하는 역할 및 구현 부분에 대한 정의는 이전 포스팅[Spring Security.. 2022. 12. 28.
[Spring Security] Spring Security에서 UserDetailsService와 PasswordEncoder Interface 분석하기 안녕하세요. 이전시간에 Spring Security의 전체적인 아키텍쳐와 기본적인 샘플에 대해서 알아보았습니다. 아래가 Spring Security의 전체적인 이미지였습니다. 오늘은 이어서 UserDetailsService와 PasswordEncoder의 디테일한 부분에 대해서 알아보도록 하겠습니다. UserDetailsService와 UserDetailsManager interface UserDetailsService는 이전시간에 사용자에 대한 세부 정보를 가져오는 역할을 한다고 했습니다. 실제로 인터페이스를 확인해서 UserDetailsService는 어떻게 활용해야하는지 확인해보도록 합시다. /** * 유저의 데이터를 가져오는데 사용하는 Core Interface * * 이 인터페이스는 read-o.. 2022. 12. 18.
[Spring Security] Spring Security 기본 아키텍처, 맛보기 샘플, 그리고 default 값 안녕하세요. 이전시간에 서비스의 일반적인 보안 취약성 이라는 주제로 개발하면서 지켜야할 기본적인 보안에 대해서 알아보는 시간을 가져보았습니다. 오늘은 Spring Security를 이용하여 실전으로 서비스의 보안을 강화해 보는 시간을 가져보도록 하겠습니다. 오늘은 그 첫 시간으로 Spring Security의 기본에 대해서 알아보는 시간을 가져보겠습니다. Spring Security 란 Spring Security는 인증(authentication)과 인가(authorization) 그리고 일반적인 서비스 공격을 막아낼 수 있는 프레임워크입니다. 이 프레임워크는 servlet 서비스 뿐만 아니라 reactive 서비스 역시 사용 가능하며 Spring 기반 어플리케이션 보안의 사실상 표준입니다. 최고의 장.. 2022. 12. 4.
[기타] 서비스의 일반적인 보안 취약성 - 2편 안녕하세요. 오늘 포스팅은 이전 포스팅에서 다루지 않았던 서비스의 일반적인 보안 취약성 4가지에 대해서 알아보는 시간을 가져보겠습니다. 리마인드 해보면 이전 시간에 다루지 않은 기본 취약성 4가지는 아래와 같습니다. 주입 (Injection) 기밀 데이터 노출 메서드 접근 제어 부족 알려진 취약성이 있는 종속성 이용 주입 (Injection) Injection 공격은 여러 범위에서 사용할 수 있는 공격입니다. 이는 서비스의 시스템에 특정 데이터를 집어넣어 서비스에서 기본적으로 제공하지 않는 정보를 취득할 수 있는 공격입니다. 여러 유형이 있으며 앞어 확인했었던 XSS 역시 주입 공격의 일종이라고 할 수 있습니다. 대표적으로는 SQL Injection, OS Command Injection 등이 있습니다... 2022. 11. 12.
[기타] 서비스의 일반적인 보안 취약성 - 1편 안녕하세요. 1달 정도만에 새로운 포스팅으로 찾아 뵙습니다. 오늘은 웹 어플리케이션의 일반적인 보안 취약성에 대해서 알아보는 시간을 가져보고자 합니다. 이렇게 보안 취약성을 알아 본 후 Spring Security의 사용으로 이를 방어하는 방법까지 알아보도록 하겠습니다. 개요 웹 어플리케이션을 개발함에 있어서 목표로 하는 비즈니스를 문제를 해결하는 기능을 개발하는 것은 중요합니다. 하지만 이러한 기능적인 부분 뿐만 아니라 비기능적인 개발또한 중요합니다. 비기능적인 부분이라는 것은 실제 기능에는 영향이 없지만 부수적으로 고려해야할 사항을 말합니다. 대표적으로 성능, 확장성, 가용성, 그리고 보안이 있는데요. 이 중 오늘 이야기하고자하는 보안에 대해서 이야기해보자면 이를 중요하게 생각하지 않으면 어플리케이션.. 2022. 11. 8.
Open API Spefication 활용하기 - 4편 ( yaml 파일 기반으로 자동으로 retrofit2 코드 생성하기 ) 안녕하세요. 오늘은 Open API Specification 활용하기 마지막편입니다. 오늘 알아볼 내용은 3편에서 자동으로 만든 Open API Specification yaml을 기반으로 자동으로 retrofit2 코드를 만들어보도록 하겠습니다. 환경 Client의 환경은 이전 프로젝트와 동일하게 Spring Boot, Kotlin 환경으로 진행하도록 하겠습니다. kotlin 1.6.21 Spring Boot 2.7.3 gradle kotlin dsl 7.5 yaml 파일 자동으로 만들어낼 client Open API Specification 파일은 아래와 같습니다. 아래 파일은 이전 시간 3편에서 자동으로 만들어낸 yaml 파일과 동일한 파일입니다. 3개의 API Operation을 가지고 2개의 D.. 2022. 9. 15.
Open API Spefication 활용하기 - 3편 ( Spring Boot 에서 yaml 파일 자동으로 만들기 ) 안녕하세요 ! 오늘은 Open Api Specification 3번째 시간입니다. 오늘 포스팅할 주제는 Spring Boot에서 Controller Class를 만들고 이렇게 만들어진 Controller Class를 기반으로 자동으로 yaml 파일을 만들어보도록 하겠습니다. 환경 간단하게 서버의 환경을 말씀드리면 아래와 같습니다. 저는 테스트를 kotlin 기반으로 작성했지만 Java로도 충분히 동일한 결과를 얻어내실 수 있을 것입니다. kotlin 1.6.21 Spring Boot 2.7.3 build.gradle.kts plugins spring boot의 Controller 코드를 자동으로 변환하기 위해서는 아래의 plugin이 추가로 필요합니다. 해당 플러그인을 추가해주세요. 1.4.0 버전은 2.. 2022. 9. 12.
Open API Spefication 활용하기 - 2편 ( yaml 파일 분석하기 ) 안녕하세요. 오늘은 Open API Specification 2편입니다. 이전시간에 yaml 파일과 json 파일을 샘플로 확인했었습니다. 오늘은 해당 샘플 파일을 뜯어보면서 Open API Spefication의 구성요소들에 대해서 알아보는 시간을 가져보도록 하겠습니다. 샘플 아래는 이전 시간에 확인했던 Open API Specification의 전체 yaml 파일입니다. 파일을 보면 위에서부터 버전, 정보, 그리고 server의 주소 및 각 path에 대한 정보가 담겨져있습니다. 더보기 openapi: 3.0.1 info: title: OpenAPI definition version: v0 servers: - url: http://localhost:8080 description: Generated s.. 2022. 9. 9.
Open API Spefication 활용하기 - 1편 ( Overview ) 안녕하세요. 오늘부는 Open API Specification에 대해서 알아보고 Client와 Server의 API를 일치시키는 자동화 과정에 대해서 알아보도록 하겠습니다. 이번 시간에는 기본적으로 OPen API Spescification이란 무엇이며 어떻게 구성되어있으며 어떻게 사용할 수 있을지에 대해서 알아보며, 이후 시간에는 yaml 파일을 분석해보도록 하겠습니다. 그리고 나서 실습으로 OpenAPI Specification Tool을 이용하여 클라이언트 소스를 생성해보기도 하고 서버코드를 기반으로 OpenAPI Specification을 작성해보도기도 하겠습니다. OpenAPI Specification 이란 OpenAPI Specification은 HTTP API의 인터페이스를 정의하는 문서입니.. 2022. 9. 2.