프론트 엔드와 백엔드가 분리 된 웹 애플리케이션을 빌드 할 때, 로그인 뒤에 배치하는 한 가지 방법은 JSONWebToken을 사용하는 것입니다. 2010 년 초에 처음 소개되었을 때 매우 인기가 있었던 개념입니다. 이 글에서는 JSON 웹 토큰 (JWT)의 정의, 작동 방식 및 Node.js 애플리케이션에 통합하는 방법에 대해 설명합니다.
https://dev.to/_marcba/secure-your-node-js-application-with-json-web-token-4d4e
간단히 말해서 JSON 웹 토큰
"JSON 웹 토큰은 공식 웹 사이트를 인용하여 공개적으로 업계 표준 방식으로 양 당사자 간의 청구를 표현합니다." 즉, 서버는 클라이언트가 보낸 정보 (JSON 형식)가 수정되지 않았으며 해당 서버에서 효과적으로 발행했는지 여부를 확인할 수 있습니다.
토큰에는 무엇이 포함됩니까?
해싱 알고리즘이 SHA256이면 서명이 다음과 같이 생성됩니다.
HMACSHA256(
base64UrlEncode(header)
+ "."
+ base64UrlEncode(payload)
,secret)
결국 세 부분은 모두 "."으로 구분되어 연결됩니다.
<Header>.<Payload>.<Signature>
다음은 JWT의 예입니다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZDM5YzI4MjdhZDgyMjBmMTJiMGZkMWIiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE1NjUyNzE4NzUsImV4cCI6MTU2NjQ4MTQ3NX0.NmcvfTBmUw1cdEI1cNRHzq6q5W0HmPELoh8rd_7EFAc
jwt.io로 가서 토큰을 붙여 넣으십시오. 포함 된 모든 정보가 표시됩니다 (서명 제외).
JWT 토큰은 어떻게 작동합니까?
JWT는 암호화 된 데이터를 교환하기 위한 것이 아닙니다. 비밀번호와 같은 합리적인 정보를 포함해서는 안됩니다. JWT의 핵심은 토큰 확인에 있습니다. 변조 된 토큰을 확인하려고 하면 (사용자 ID가 교환 되었을 수 있음) 토큰이 거부됩니다.
왜? 내용이 더 이상 서명과 일치하지 않기 때문입니다. 따라서 서명을 해시하는 데 사용하는 비밀을 얻을 때를 제외하고는 다른 사람이 유효한 토큰을 만들 수 없습니다.
어떤 이유로 JWT 비밀이 해킹되는 경우 즉시 변경해야 합니다. 그때부터 이미 존재하는 모든 토큰은 유효하지 않습니다. 로그인 한 일부 사용자에게는 약간 성가신 일이지만 아무도 응용 프로그램에 유효한 토큰을 생성 할 수 없도록 할 수 있습니다.
서버에서 JWT 워크 플로우는 어떻게 생겼습니까?
우리는 일반적으로 JWT에 대해 잘 알고 있으므로 클라이언트-서버 교환에서 어떻게 작동하는지 예를 살펴 보자.
Node.js 애플리케이션의 JWT
이 글에서는 Node.js에서 웹 서버가 어떻게 작동하는지 자세히 설명하지 않겠습니다. 그러나 JavaScript 서버 환경에서 JWT를 사용하는 방법을 보여 드리겠습니다. 예비
예비
JWT로 작업하기 위해 편리한 jsonwebtoken 라이브러리를 사용할 수 있습니다. 다음과 같이 설치하십시오.
npm install jsonwebtoken
토큰 만들기
클라이언트가 올바른 로그인 자격 증명을 제공했는지 확인한 코드 위치 (아마도 데이터베이스를 확인한 직후)에서 JSON 웹 토큰을 만들 수 있습니다.
const token = jwt.sign(<Your payload>, <Your JWT secret>, { expiresIn: <Expiration Time> })
실제 예에서 다음과 같이 보일 수 있습니다.
const jwt = require('jsonwebtoken')
const token = jwt.sign({ _id: user._id, admin: true }, process.env.JWT_SECRET, { expiresIn: '1 week' })
두 가지 사항에 유의하십시오.
토큰 확인
클라이언트는 인증 헤더를 다음과 같이 설정해야 합니다. Bearer :. 따라서 먼저 문자열에서 "Bearer :"부분을 제거해야 합니다.
const token = req.header('Authorization').replace('Bearer ', '')
(req.header ( 'Authorization')는 인증 헤더를 읽는 Express.js 방법입니다)
그런 다음 제공된 토큰을 다음과 같이 확인할 수 있습니다.
const jwt = require('jsonwebtoken')
try{
const payload = jwt.verify(token, process.env.JWT_SECRET)
console.log(payload._id)
} catch(error) {
console.error(error.message)
}
토큰이 유효하면 페이로드 변수에서 모든 페이로드 데이터에 액세스 할 수 있습니다. 토큰이 유효하지 않은 경우 JWT 라이브러리는 처리 할 수 있는 오류를 발생 시킵니다.
요약
보시다시피 JWT를 사용하는 것은 그렇게 복잡하지 않습니다. 가장 중요한 점은 JWT가 데이터를 암호화하지 않으므로 합리적인 정보를 교환하는 데 사용하지 않는 것입니다.
JSON 웹 토큰은 누군가가 주장하는 정보가 실제로 진짜인지 여부를 확인하는 훌륭한 기술입니다. 즐거운 코딩 되세요!
등록된 댓글이 없습니다.