헬스하고 집 가는 길에 너무 예뻤던 하늘!
JWT 더 어렵다...
Spring Security 기본 폼 로그인 인증 방식
은 Stateful 유지하므로 RESP API 이용한 CSR방식의 백엔드에는 부적합
- JWT: REST API 통신 사용하는 백엔드 서버 사용에 적합
JWT(JSON Web Token)
토큰기반 인증 사용 이유
세션기반 인증
: 서버 or DB에 유저 정보 담는 방식 -> 매번 가져오는건 비효율적 -> 이 부담을 클라이언트에게 넘겨주기!
- 유저 정보 암호화한 상태로 토큰에 담으므로 클라이언트에 담아도 ㄱㅊ
- JWT : JSON Web Token, Json 포맷으로 사용자 속성 저장하는 웹 토큰
JWT의 구조
aaaaaa.bbbbbb.ccccccc
- Header(a)
- 토큰 종류, 암호화하는 알고리즘
- JSON 형태로
- Payload(b)
- 유저의 정보(필요한 데이터), 권한
- 암호화되어있음(그래도 민감한건 넣지 말기)
- Signature(c)
- Header, Payload를 base64로 인코딩한 값에 salt값 추가한 값
토큰기반 인증 절차
- 클라이언트가 서버에 ID&PW 담아서 로그인 요청 보냄 -> 서버 : 아이디/비번 일치 확인 후 클라이언트에게 보낼 암호화된 토큰 하나 생성(JWT토큰 생성)해서 보내기 -> 클라이언트: 토큰 저장 -> 클라이언트 : HTTP Headers에 토큰 담아서 서버에 요청(GET 요청 같이 보냄) -> 서버 : 토큰 해독 후 맞으면, 클라이언트가 보낸 요청 처리 후 응답 보내줌
토큰기반 인증 장점
- 무상태성 & 확장성 (Statelessness & Scalability)
- 안정성
- 어디서나 생성 가능(토큰을 생성하는 서버가 꼭 토큰 안만들어도됨)
- 권한 부여에 용이