본문 바로가기

Spring Boot

jwt 2

 

필터들 구현하면서 실수 할 수 있으니까 인터페이스로 JwtProperties를 만든다.

 

 

쓰는 곳 예시

0. 회원가입

 

 

1. 로그인 요청

2. 토큰 반환

JTW TOKEN을 헤더에 담아서 응답한다.

 

a header -> Base64

b payload -> Base64

c secret(펭귄악어)->(a.b+secrete)를 해쉬 

(a.b를 hash 

(a.b + 팽귄악어)를 해쉬한 값이랑 c를 디코드한 값이랑 똑같으면 서명 완료.

 

 

3. 이 header값을 보관.

웹브라우저는 Local Storage에 보관(보안을 위해서 expire를 6시간으로 하길 바람)

안드로이드는 sharedpreparance 에 보관

리액트는 Local Storage보관

 

웹브라우저에

쿠키에 보관해도 되지만 쿠키에 보관할려면 세션기반이여야만 저장한다.

http only 속성하면 자바스크립트 요청을 막을 수 있다.

그럼 Local Storage에 보관하기를 추천한다. Session Storage에 보관해도 되지만

단점은 브라우저 닫으면 날아간다. 장점은 높은 보안. 그말은 자동로그인 안되고 다시 로그인 요청을해야한다.

그래서  Local Storage에 보관하기를 추천하는데 기한을 6시간 정도로 설정하면 보안을 더 신경 쓸 수 있다.

 

4. 인가 요청(토큰)

권한

Local Storage의 값을 꺼내서 header에 담은 뒤 요청하면 된다.

 

5. 토큰 검증

JwtAuthorizationFilter extends BasicAuthenticationFilter

 

JWT에 들어가면 안되는 값들
공백
== <패딩값
=

String token = request.getHeader(JwtProperties.HEADER_STRING)
			// jwt token에는 공백들어있으면 안되고 == 이렇게 생긴 패딩이 들어오면 안된다. (url로 하다보면 공백이나 =이 들어와있을 수가 있다)
			.replace(JwtProperties.TOKEN_REFIX, "") //프리픽스 bearer도 날림. 그래야 딱 토큰만 남아요.
			.replace("", "")
			.replace("=", "");

 

토큰 검증이 인증이기 때문에 AuthenticationManager도 필요 없고

 

//내가 SecurityContext에 직접 접근해서 자동으로 UserDetailsService에 있는 loadByusername이 호출된다.
//(a.b + 팽귄악어)를 해쉬한값이랑 c를 디코드한 값이랑 똑같으면 서명 완료.

 

a header

b payload withClaim으로 비공개 클레임에 내가 필요한거 넣으면 된다.

c 시그니쳐 - 서버 비밀값

 

6. 유저 ID로 SELECT

 

7. Authentication 객체 생

 

 

8. 세션 저장

 

하지만 주석 처리한 이유는 우리는 세션에 객체 저장하고 꺼내쓰지 않고 Authentication객체에서 영속성이 있는 유저객체에서 데이터를 아래와 같이 쓸 수 있다!

9. 자원 응답

 

@LoginUser

 

어노테이션 만드는 법 배울 예정

또 아래 어노테이션도 배울 예정

@Vlidate
@bind result

다음주 월요일
로그 관리하는 거 센트리? 배울 

 

 

 

 

'Spring Boot' 카테고리의 다른 글

cors정책  (0) 2020.08.11
JSP에서  (0) 2020.08.11
JWT 1 (session)  (0) 2020.08.07
OAuth 네이버 로그인  (0) 2020.08.04
Optional  (0) 2020.08.04