node 에서 jwt 서명 및 token 검증 방법 사용

3247 단어 jwttoken
1.토 큰 이란 무엇 인가
token 은'영패'라 는 뜻 으로 서버 에서 생 성 된 문자열 로 클 라 이언 트 가 요청 한 표지 입 니 다.
token 은 서버 에서 생 긴 것 입 니 다.전단 에서 사용자 이름과 비밀 번 호 를 사용 하여 서버 에 인증 요청 을 보 내 면 서버 인증 이 성공 하면 서버 에서 token 을 전단 으로 되 돌려 줍 니 다.
전단 은 요청 할 때마다 token 을 가지 고 자신의 합 법 적 인 지 위 를 증명 할 수 있 습 니 다.만약 token 이 서버 에서 지속 된다 면,그 는 영원한 신분 영패 이다.
2.jwt 란 무엇 인가
jwt,즉 JSON Web Token 의 줄 임 말 은 개방 기준(RFC 7519)으로 각 분야 에서 JSON 대상 으로 정 보 를 안전하게 전송 하 는 치밀 하고 독립 적 인 방식 을 정의 했다.
jwt 는 세 부분 으로 구성 되 어 있 으 며,그것들 사 이 를 나 누 어 사용 합 니 다.보통 다음 과 같 습 니 다 xxxx.yyyy.zzzzz.
첫 번 째 부분 은 Header 이 고 두 부분 으로 구성 되 며 유형 과 알고리즘,예 를 들 어

{
 "alg": "HS256", //   
 "typ": "JWT" //   
}
두 번 째 부분 은 Payload 로 실제 전달 해 야 할 데 이 터 를 저장 합 니 다.JWT 는 선택 할 수 있 도록 7 개의 공식 필드 를 규정 했다.예 를 들 면:

{
 iss (issuer):   
 exp (expiration time):    
 sub (subject):  
 aud (audience):  
 nbf (Not Before):    
 iat (Issued At):    
 jti (JWT ID):   
}
공식 필드 를 제외 하고 이 부분 에서 개인 필드 를 정의 할 수 있 습 니 다.다음은 하나의 예 입 니 다.

{
 "sub": "1234567890",
 "name": "John Doe",
 "admin": true
}
token 에 대해 서 는 이 정 보 는 변경 되 는 것 을 방지 할 수 있 지만 누구나 읽 을 수 있 습 니 다.암호 화 되 지 않 는 한 비밀 정 보 를 JWT 의 Payload 나 Header 요소 에 넣 지 마 세 요.
세 번 째 부분 은 Signature 이 고 Signature 부분 은 앞 두 부분 에 대한 서명 으로 데이터 변경 을 방지 합 니 다.
우선 키(secret)를 지정 해 야 합 니 다.이 키 는 서버 에서 만 알 수 있 으 며 사용자 에 게 누설 할 수 없습니다.그리고 Header 에서 지정 한 서명 알고리즘(기본 값 HMAC SHA 256)을 사용 하여 아래 공식 에 따라 서명 합 니 다.

HMACSHA256(
 base64UrlEncode(header) + "." +
 base64UrlEncode(payload),
 secret)
서명 을 계산 한 후 Header,Payload,Signature 세 부분 을 하나의 문자열 로 맞 추고 각 부분 간 에'점'(.)으로 구분 하면 사용자 에 게 되 돌아 갈 수 있 습 니 다.
3.node 로 token 서명 발송
우선 jwt 의존 패 키 지 를 다운로드 해 야 합 니 다.npm install jsonwebtoken그리고 파일 에서 사용 합 니 다.

var jwt = require('jsonwebtoken')
const payload = {
   name: 'boom'
  }
const secret = 'JQREAD'
const token = jwt.sign(payload, secret) //   
console.log(token)
jwt.sign(payload, secret)을 사용 하면 token 을 서명 하고 전단 으로 돌아 갈 수 있 습 니 다.전단 은 되 돌아 온 token 을 localstorage 나 sessionstorage 에 저장 합 니 다.
4.노드 인증 토 큰 사용
사용자 가 로그 인 을 완료 하고 token 을 가 져 와 저장 한 후,요청 할 때마다 배경 에 token 을 요청 머리 에 놓 습 니 다.예 를 들 어:

  const guestToken = getStorage('token')
 if (guestToken) {
  config.headers['X-GuestToken'] = guestToken
 }
그리고 백 스테이지 에서 token 을 검증 합 니 다.

var token = req.headers['x-guesttoken']
const secret = 'JQREAD' // secret       
jwt.verify(token, secret, (err, decoded) => {
  if(err){
   console.log(err)
   return
  }
  console.log(decoded)
}
인증 에 실패 하면 Invalid Signature 가 출력 됩 니 다.
인증 이 성공 하면 발급 할 때의 payload 데 이 터 를 인쇄 한 후에 계속 조작 하여 데 이 터 를 되 돌려 줄 수 있 습 니 다.
총결산
위 에서 말 한 것 은 소 편 이 소개 한 node 에서 jwt 서명 과 token 을 검증 하 는 방법 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기