Spring Login API

2023. 12. 3. 14:59카테고리 없음

 

 

 

MSA를 위한 로그인 API를 생각하자. Oauth 와 일반적인 로그인에 대해 고려해야한다.

Oauth같은 경우 정보를 대조해서 DB에 없으면 기본 정보들을 담은채로 회원가입 페이지로 redict 시키고

회원가입 페이지에서 부가적인 정보가 완전히 입력되었을때 DB에 회원을 넣는다.

이후 Oauth 로그인을 할때는 정보를 암호화하고 나의 웹에 키를 바탕으로 JWT token을 생성한다.

일반적인 로그인 같은 경우 DB에 있다면 똑같이 정보를 가져오고 암호화한 후 JWT token을 생성한다.

 

목표

id, password 혹은, Oauth를 통해 회원 DB에 있다면 그 정보를 바탕으로 JWT토큰 생성하고 반환하는 API를 만들것이다.

 

 

기본적으로 id와 패스워드를 로그인 API 에 요청한다고 하자.

로그인 API는 Access token과 refreshtoken을 json에 담아 응답하고 (JWT token)

사용자는 받은 access token을 통해 여러 API를 호출한다.

 

다른 API는 JWT token을 통해 각 SecurityContext에 JWT Authentication Token을 넣는다.

* JWT에 대해 간략히 설명하면, 유저의 권한과 이름 같은 정보, 토큰 정보 등 여러 정보를 디코딩, 인코딩할 수 있음.

 

구분해야할것.

처음부터 JWT 토큰이 들어오는 경우, 초기 로그인에서 ID, password가 들어오는 경우.

각각의 경우 AuthenticationProvider에서 JWT, 혹은 2번 과정의 AuthenticationToken이 들어오게됨.

따라서 각각의 AuthenticationProvide를 정의해야함.

 

Authenticationfilter

JWT 인증, 요청에 대한 헤더값을 검증. AuthenticationManeger 이용

 

AuthenticationManeger

인증을 처리하는 방법을 정의

 

AuthenticationProvider

특정 유형의 인증을 수행

 

실습 환경

스프링 2.7.9 버전

jdk 11

 

스타터

starter-web

starter-security

lombok

devtools

 

jwts

jjwt-api

jjwt-impl

jjwt-jackson

 

gson - json 다루기위한 라이브러리

gson

 

dto -validation

starter-validation

 

application.yml

jwt:

secretKey: 

refreshKey:

 

각 키는 32byte 이상.

 

WebConfig - WebMvcConfigurer의 구현체

- CORS설정 (호출할 ip)

 

SecurityConfig 

 

 

Spring Security

Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications. Spring Security is a framework that focuses on providing both authentication and authoriz

spring.io

 

SecurityFilterChain filterChain을 정의

- http 에 대한 설정(권한별로 할수있는 요청 범위 지정, 보안설정 등등)

PasswordEncoder 정의

- 암호를 어떻게 인코딩할 것인가 정의 (디코더에 맞게)

 

AuthenticationManagerConfig

provider를 주입받아야함.

각 필터는 인증 처리 방법을 정의한 manager를 사용해야하고, 

manager는 provider를 사용해야한다.

 

해야할것.

응답 데이터를 쿠키로 만들어서 리턴하기

리플래시 토큰을 DB에서 관리하기(만료되지않았는데 access가 아닌 refresh token을 요청한 경우 둘다 만료시키기)

json 내부 값 암호화

 

JWT에서 Refresh Token은 왜 필요한가?

개인 프로젝트 중 JWT를 사용하는 SimpleTodoList 에서는 회원가입 후 로그인 시 아래처럼 JWT를 발급해준다.이 토큰은 애플리케이션 전반에서 사용자를 인증하는데 사용된다. 기존의 세션과는 달리

velog.io