본문 바로가기

웹개발/보안9

jwt 토큰 - java로 생성하기 예제 jwt 토큰 - java로 생성하기 예제 1.스프링 프로젝트 생성 2.jwt 라이브러리 추가 io.jsonwebtoken jjwt 0.9.1 3.Utils 클래스 추가 JsonUtil.java import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import com.fasterxml.jackson.databind.ObjectMapper; @Component public class JsonUtil { @Bean public ObjectMapper objectMapper() { return new ObjectMapper(); } } JWTException.java public cla.. 2021. 3. 8.
JWT - JSON Web Token 이란 - 개념 JWT - JSON Web Token 개념 1. 전통적인 웹어플리케이션 기본 구조 문제점 1 - 이용자가 늘어나서 서버 등 장치를 더 늘려야 된다면? 클라이언트는 문제가 안된다. 웹어플리케이션도 문제가 안된다. Api server 도 스케일 아웃해서 늘리면된다. 문제는 Database 다. 스케일 아웃 해서 병렬처리 하면되는데, 비용이 많이 든다. 그래서 가장관리하기 귀찮은 데이터 베이스를 지울 수 있다면? 유저 데이터를 유저(클라이언트)가 직접관리하게 한다. 유저가 데이터를 볼 수는 있지만 수정은 불가능하다. 수정은 서버만 수정 할 수 있다. JWT를 이용한 웹애플리케이션 구조는 위와 같이 생겼다. 즉, 클라이언트에 필요한 유저 정보를 저장한다. 2.세션 기반 인증 방식 - (전통적인 방식) 서버가 인.. 2021. 3. 5.
카카오 로그인 OAuth2.0 - 사용자 정보 조회 카카오 로그인 OAuth2.0 - 사용자 정보 조회 지난 포스팅에서는 인가 코드 그랜트 유형 방식으로 카카오 OAuth 2 로그인 인증을 진행했다. 카카오 개발자 사이트에 앱을 등록 후, 나의 웹브라우저에서 카카오 코드(태그)를 요청하고, 나의 서버로 응답받는 작업까지 진행을 했다. ✅카카오 로그인 OAuth2.0 이번 포스팅에서는 엑세스토큰을 요청하고, 받은 엑세스 토큰으로 나의 카카오 사용자 정보를 얻는 방법을 살펴본다. 3단계 - 코드(태그)로 엑세스 토큰 교환 지금은 상황에서 코드(태그)는 클라이언트 화면이 가지고 있고, 서버 세션에도 등록되어 있다. 우리는 클라이언트에서 코드를 넘겨 받을것이므로 컨트롤러에 코드 파라미터를 받아주는 로직을 작성해준다. 그 다음 Spring restTemplate .. 2020. 12. 8.
카카오 로그인 OAuth2.0 카카오 로그인 OAuth2.0 지난 포스팅에서 OAuth2.0에 대한 개념과 인증방식 유형에 대해서 살펴보았다. 이번 포스팅에서는 OAuth2.0 인증 프로토콜을 사용해서, 카카오 로그인을 구현해 보도록 하겠다. 인증 코드 그랜트의 예제로 구현해 보자. 인가 코드 그랜트와 암시적 코드 그랜트의 개념에 대해서 아직 이해가 안된다면 아래 포스팅을 참고하면 좋다. ✅OAuth2 인증 - 인가 코드 그랜트 ✅OAuth2 인증 - 암시적 코드 그랜트 인가 코드 그랜트 적용단계 1단계 - 클라이언트 애플리케이션 등록 2단계 - 코드(태그) 얻기 3단계 - 코드(태그)로 엑세스 토큰 교환 4단계 - 엑세스토큰으로 나의 정보 얻기 1단계는 스프링으로 만든 나의 앱을 카카오 개발자 사이트에 등록한다. 2단계는 클라이언트.. 2020. 12. 8.
OAuth2 인증 - 인가 코드 그랜트 OAuth2 인증 - 인가 코드 그랜트 지난 포스팅에는 OAuth2 인증 - 암시적 코드 그랜트에 대해서 살펴보았다. 이번 포스팅에는 이어서 인가 코드 그랜트에 대해서 알아보자. OAuth2 인가 코드 그랜트를 이용해서 페이스북 친구 목록 요청 신뢰 클라이언트는 과 같은 기밀정보를 안전하게 저장할 수 있다. 따라서 등록 과정에서 저장할 자격증명을 발급 받는다. 아래는 OAuth2 인가 코드 그랜트를 이용해서 페이스북 친구 목록 요청하는 과정이다. 이번에도 페이스북의 사용자 동의 절차가 포함된다. 인증과정에서 1번-3번은 암시적 코드 그랜트와 과정이 동일하다. 굳앱이 유저를 페이스북으로 연결하고 페이스북은 유저에게 굳앱이 사용자 목록에 접근하는것을 허용할 것인지 물어본다. 사용자가 확인을 했다고 가정하고 .. 2020. 12. 5.
OAuth2 인증 - 암시적 코드 그랜트 OAuth2 인증에 대해서 OAuth2에 대해서 한 문장으로 정의한다면 인증 프로토콜이다. HTTP 통신 프로토콜 처럼 프로토콜이다. 프로토콜은 서로간의 약속이다. HTTP 통신을 할때 보내는 클라이언트, 받는 서버가 데이터를 주고 받을때 이러한 방식으로만 주고 받자고 약속을 해놓은 것 처럼, OAuth2 인증도 마찬가지로 인증이라는 행위를 할 때, 서로서로 우리 이런 방식으로 인증처리 권한 처리를 하자 라고 약속을 해놓은 기술이라고 할 수 있다. OAuth2 인증 종류 OAuth2는 인증을 위한 데이터 교환을 위해서 다양한 방법을 지원한다. 그 인증 방법에 따라서 동작 흐름도 달라진다. OAuth2 인증에서는 그것을 그랜트 유형이라고 부른다. 대표적으로 OAuth2 인증에는 두가지 유형의 그랜트가 있다.. 2020. 12. 5.
스프링 Session 쇼핑몰 방금 본 상품&권한체크 스프링 Session 쇼핑몰 방금 본 상품&권한 지난 시간에는 스프링 session으로 회원가입을 하고, 자동로그인을 코드로 구현해 보았다. 이전 포스팅과 이어지는 포스팅이라서 이전 포스팅을 참고하고 오면 좋을것 같다. 이번 시간에는 회원가입 후 가입한 내용으로 로그인 로직을 구현해보고, 쇼핑몰에서 방금 내가 봤던 상품을 띄워주는 로직과 사장님만 들어갈 수 있는 admin 페이지 비슷한 내용을 만들어 볼려고한다. loginPage 생성 먼저 아래와 같이 로그인 페이지를 생성해준다. login login 회원가입을 아직 안하셨나요? ${msg} UserRepository 유저 조회 UserRepository 클래스에서 유저정보를 찾는 로직을 작성한다. 없으면 없다는 메시지를 전달하기 위해서 Map을 이용해.. 2020. 12. 5.
스프링 Session으로 자동 로그인 구현하기 세션의 개념과 원리 - 몽실이의 아이폰12 구입하기 스프링 세션의 구현 지난 포스팅에서 세션에 대해서 몽실이가 아마존에서 아이폰12를 구입하는 과정을 예로들어서 설명을 했다. 세션이라는 기술이 존재하면, 어떤 편리함이 있는지 글로써 설명을 했다. 이번 포스팅에서는 글로 예시로든 내용을 코드로 구현해보자. 먼저 세션을 이용해서 2가지 문제를 해결하고자 한다. 첫번째로 로그인을 했는데, 창을닫고 다시 들어오면 또 다시 로그인을 해야되는 문제를 해결한다. 즉, 세션을 이용해서 자동로그인을 구현한다. 두번째는 쇼핑하다가 창이 닫혔는데, 방금 보았던 상품이 기억이 안나는 문제를 해결한다. 창을 닫고 들어와도 내가 클릭한 상품을 세션을 이용해서 띄워줄 수 있도록 해보자. 1.프로젝트 생성 스프링 프로젝트로 진행을 .. 2020. 12. 1.
세션의 개념과 단점 세션의 탄생 일상에서 웹브라우저를 열어서 무엇인가를 검색할때 세션이라고 하는 기술을 사용을 한다. 왜 세션이라는 기술을 사용할까? 그 이유는 웹브라우저는 사용자의 상태를 알지 못하기 때문이다. 좀 더 풀어서 말하면 HTTP 프로토콜은 TCP/IP라는 통신을 하는데, 이때 사용자는 어떤 검색어를 검색창에 입력하고 엔터를 누르면 웹브라우저에서 서버로 요청이 발생된다. 그리고 서버에서 응답을 한다. 그리고는 연결이 종료된다. 더 쉽게 예를 들어 보자. 1.몽실이가 아마존 사이트에 회원가입을 하고 로그인을 했다. 2.몽실이는 새아이폰을 구입하려고 아이폰12를 검색했다. 3.이때 아마존 웹사이트 화면에서 아마존 서버로 요청이 발생한다. (www.amazon.com/search?productname=ipone 대략.. 2020. 12. 1.