지난 번엔 Token 시스템에 대한 이해, 장점, 작동 방식 등에 대해 이해해 보았다. 이번 글에서는 Token 시스템에서 주로 활용되는 JWT(Json Web Token), CSRF(Cross Site Request Forgery)에 대해 내용을 작성해 보려 한다.
JWT(Json Web Tokens) 란?
클라이언트와 서버 간의 유저의 정보를 담은 Json 데이터를 암호화 해서 보낼 때, HTTP 헤더에 JSON 토큰을 넣어 전달하는 방식. 서버는 별도의 인증 과정 없이 헤더에 포함되어 있는 JWT Token 정보로 인증함.
JWT의 구조
구조는 Header, Payload, Signature 세 부분으로 구성되며, Signuature 부분만 암호화 되어 전송.
- Header : 토큰의 타입과 해시 암호화 알고리즘으로 구성
- Payload : 전송되는 데이터 (HTTP body와 유사), 데이터(base64url로 인코딩), 만료시간
- Signature : 발행된 Token에 대한 인증서(검증 부분), 시그니처 부분이 실제로 암호화되는 부분
위 값이 전송될 때 Header의 Authorization key값으로 전송되고 value는 앞에 Bearer가 붙는다.
따라서 실제 전송시 { Authorization : Bearer <token> } 형태로 전송된다.
JWT 작동 방식
1. 클라리언트가 로그인 요청시 서버는 DB에서 정보 확인
2. Signature(서명)의 Secret key를 통해 access token, refresh token를 클라이언트에게 발급
3. 클라이언트는 발급된 JWT(Json Web Token)을 로컬 저장소에 저장
4. 클라이언트는 요청시 Access Token을 Header에 포함하여 서버로 보내며 서비스 요청과 권한을 확인한다.
5. 서버에서 가진 Signature(서명)로 access token을 복호화하여 및 유효 기간을 검증
6. 유효하면 payload의 유저 정보를 해석해서 요청에 대한 응답 전달
7.1 만약 Access Token이 유효하지 않을시 서버에서 Token이 만료되었다는 응답 진행
7.2 클라이언트가 해당 응답을 받으면 Refresh Token을 보내, 서버에서 Refresh Token에 대한 유효성 체크를 진행한다.
7.3 서버에서 Refresh Token 인증시 새로운 Access Token을 발급한다.
7.4 클라이언트는 새로 받은 Access Token을 기존의 Access Token에 재등록
JWT 장단점
장점
- 쿠키에 비해 보안성이 좋음
- Session 처럼 별도의 저장소관리가 필요하지 않음 (상태 정보를 저장하지 않으므로 확장성이 좋음)
단점
- 토큰 자체에 정보를 담고 있어 (Self-contained) 해킹시 정보가 넘어 갈 수 있음
- JWT의 Stateless 특성 때문에 서버에서 토큰을 가진 클라이언트가 진짜 클라이언트인지 확인 불가능
- Payload가 단순 base64url 기반이라 디코딩시 데이터 확인 가능 (상황에 따라 추가 JWE 암호화 필요)
- 토큰으로 넘기는 정보가 많아지면 토큰의 길이가 늘어나 네트워크에 부하를 줄 수 있다.
Access Token, Refresh Token
https://yubi5050.tistory.com/170
Session, Cookie, Token 비교
https://yubi5050.tistory.com/171
CSRF (Cross Site Request Forgery)
👉 CSRF 란?
사용자(유저, 해킹당한 사람) 의지와 무관하게 공격자의 의도대로 서버에 특정 요청을 하게 함. ex. 인스타그램과 비슷한 페이지를 만들어 사용자가 가입하게 하고, 해당 페이지에 글을 유저가 작성하게 되면 해당 요청을 카피해서 실제 인스타그램에 공격자의 의도대로 글을 작성하게 함.
👉 CSRF Token 이란?
서버에 들어온 요청이 실제 서버에서 허용한 요청이 맞는지 확인하기 위한 토큰. 서버에서 View 페이지 발행시 Token을 같이 주어 사용자 세션에 저장 해두고, 사용자에게 작업 요청이 들어올 때 해당 Token이 맞는지 확인하여 위조 요청이 아님을 확인. 사용된 Token은 바로 폐기 후 View 페이지 발행시마다 새로 생성됨.
'기술 정리 & CS > 인증, 인가' 카테고리의 다른 글
[Authentication] Session/Cookie vs Token 차이 (0) | 2022.09.05 |
---|---|
[Authentication] JWT Token - Access Token과 Refresh Token (0) | 2022.09.05 |
[Authentication] Token 기반 시스템이란? (0) | 2022.06.09 |