[TIL]9/30(JWT, validation)

Zam Oh!·2021년 10월 1일
0

TIL

목록 보기
1/1

주특기 심화주 프로젝트 발제
심화주차 강의 듣기 시작

JWT(JSON Web Token)

JSON형식의 데이터를 저장하는 토큰으로 헤더(HEADER)와 페이로드(PAYLOAD), 시그니처(SIGNATURE) 세부분으로 구성되어있다. 시그니처는 JWT secret_key로 만들어지며 이것이 노출되면 토큰을 위조할 수 있어 보안이 취약해진다. 따라서 secret_key는 철저한 보안이 필요하다. JSON형식의 데이터가 암호화되어 통신이 이루어 지긴 하지만 외부에 노출되기 때문에 비밀번호와 같은 중요한 데이터는 제외하여야 하며 주로 사용자의 이메일이나 ID 사용자의 권한등을 넣어 데이터베이스의 조회 없이도 사용자를 믿고 권한을 부여하는데 사용된다.
하지만 JWT 토큰의 단점은 용량이 크다는 점인데, 이는 토큰에 내용물이 포함되어, 매 요청시 토큰이 오고가며 데이터양이 증가되기 때문이다.
따라서 비용을 생각하여 매번 사용자 정보를 조회하는 작업의 비용과 JWT 토큰을 사용하여 발생하는 데이터 비용을 비교하여 더 효율적인 방법을 선택하면 좋을것이다.

jwt.sign 으로 토큰을 발급받은 클라이언트가 요청헤더에 쿠키처럼 토큰을 넣어 보내면 서버단에서는 jwt.verify로 토큰을 검증한다. 검증에서는 secret_key로 올바른 토큰인지를 검사하고 유효기간이 지나지 않았는지를 판별한다. 이렇게 판별이 완료된 토큰에는 사용자의 ID, 닉네임, 발급자, 유효기간등이 들어있다. 이러한 내용은 decoded를 통해 내용물을 사용할 수 있다.

Validation

Validation은 뜻 그대로 검증하는것이고 특별한건 없지만 개발을 함에 있어서 가장 중요한것중 하나이다. 아래와 같이 value값이 1인지 확인하는 함수도 validation이라 할 수 있고 앞서 언급한 JWTWebToken을 이용하는것 또한 검증을 위한 것이다.

function is1(value) {
	return value === 1;
}
profile
개발자를 향하여!

0개의 댓글