JWT(Json Web Token)

LEE_JUN_HA·2021년 2월 28일
0
post-thumbnail

JWT(Json Web Token)란?

•JWT 는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.

•전자 서명은 JSON 의 변조를 체크 할 수 있게되어 있습니다.

•JWT는 속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 입니다.

•JWT는 서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다.

•이때 사용되는 JSON 데이터는 URL-Safe 하도록 URL에 포함할 수 있는 문자만으로 만듭니다.

•JWT는 HMAC 알고리즘을 사용하여 비밀키 또는 RSA를 이용한 Public Key/ Private Key 쌍으로 서명할 수 있습니다.

JWT 토큰 구성

•JWT는 세 파트로 나누어지며, 각 파트는 점로 구분하여 xxxxx.yyyyy.zzzzz 이런식으로 표현됩니다.

•순서대로 헤더 (Header), 페이로드 (Payload), 서명 (Sinature)로 구성합니다.
Base64 인코딩의 경우 “+”, “/”, “=”이 포함되지만 JWT는 URI에서 파라미터로 사용할 수 있도록 URL-Safe 한 Base64url 인코딩을 사용합니다.

•Header는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있습니다. 첫째는 토큰의 유형 (JWT)을 나타내고, 두 번째는 HMAC, SHA256 또는 RSA와 같은 해시 알고리즘을 나타내는 부분입니다.

•Payload는 토큰에 담을 클레임(claim) 정보를 포함하고 있습니다. Payload 에 담는 정보의 한 ‘조각’ 을 클레임이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임 들을 넣을 수 있습니다.
클레임의 정보는 등록된 (registered) 클레임, 공개 (public) 클레임, 비공개 (private) 클레임으로 세 종류가 있습니다.

•마지막으로 Signature는 secret key를 포함하여 암호화되어 있습니다.

오늘의집 클론에서 쓰였던 Token

bcrypt.checkpw : 암호화된 비밀번호를 확인하는 함수이다. 로그인할 때 받은 패스워드와 데이터베이스의 패스워드가 같은지 확인한다

token : 위에서 비밀번호가 일치한다면 토큰을 발행해 주는데 토큰은 byte 타입이기 때문에 encode를 해주고, user_id를 user.id로 발행을 하고, secret_key와 algorithm을 필요로 한다.

profile
할 수 있다, 할 수 있다, 아자뵤!

0개의 댓글