@Controller
public class TestController {
@GetMapping("/")
public String test(@AuthenticationPrincipal UserDetailsImpl userDetails) {
}
}
설정 가격 변경 부분 - 현업이라면 UserDetailsImpl를 가져온 다음에 이 id로 이 상품이 실제 이 로그인한 사용자의 것인지 확인한 다음에 업데이트를 할것같다
secret key 를 통해서 암호화가 되고 복호화가 된다.
인증에 대한 처리를 해준다.
- JWT란?
WT(Json Web Token)는 웹표준 (RFC 7519)으로
JSON 포맷을 이용해 정보를 가볍고 안전하게 전송하기 위한 Claim 기반의 Web Token.
서버가 1대인 경우
서버가 2대 이상인 경우
Session 마다 다른 Client 로그인 정보를 가지고 있을 수 있음
Client 1 로그인 정보를 가지고 있지 않은 Sever2 나 Server3 에 API 요청을 하게되면 어떻하지?
해결방법
1) Sticky Session: Client 마다 요청 Server 고정
2) 세션 저장소 생성
세션 저장소 저장
JWT 사용
모든 서버에서 동일한 Secret Key 소유
Secret Key 통한 암호화 / 위조 검증 (복호화 시)
JWT 장/단점
JWT 구조
→ 결국 JWT 는 **Read only 데이터**
HEADER / PAYLOAD / VERIFY SIGNATURE
JWT 사용 흐름
1) Client가 username, password로 로그인 성공 시
2) Client 에서 JWT 통해 인증하는 방법
JWT 를 API 요청 시마다 Header 에 포함
Content-Type: application/json
Authorization: Bearer
Server에서 Client 가 전달한 JWT 위조 여부 검증 (Secret Key 사용) / JWT 유효기간이 지나지 않았는지 검증
검증 성공시, JWT → "로그인 정보" (UserDetailsImpl) 만들어 사용
추후에 스프링 시큐리티에 대해 자세히 뜯어봐야하는 블로그 기록 1
추후에 스프링 시큐리티에 대해 자세히 뜯어봐야하는 블로그 기록 2 - 더 중요