Nodejs 의 JWT 와 Session 사용

5047 단어 NodejsJWTSession
최근 프로젝트 는 node 서버 에서 사용자 로그 인 검사 와 권한 차단 을 해 야 합 니 다.전문 적 으로 사용자 인증 과 권한 수여 라 고 합 니 다.자 료 를 수집 한 결과 현재 자주 사용 되 는 것 은 두 가지 가 있 습 니 다.JWT 와 Session 입 니 다.
JWT 사용
JWT 는 Json WebTokens 의 약자 형식 으로 구체 적 으로 무엇 인지 상세 하 게 쓰 지 않 고 자 료 를 볼 수 있 습 니 다.
여기에 두 개의 플러그 인,express-jwt 와 JSonWebTokens 를 도입 합 니 다.-
  • JSonWebTokens:token 생 성
  • express-jwt:http 요청 을 지정 한 JSonWebTokens 의 유효성 을 검증 하 는 데 사 용 됩 니 다.유효 하 다 면 JSonWebTokens 의 값 을 req.user 에 설정 한 다음 에 해당 하 는 router
  • 로 이동 합 니 다.
    express-jwt 내부 에서 jsonwebtoken 을 인용 하여 패키지 에 사용 합 니 다.JWT 형식 으로 인증 과 권한 수 여 를 하 는 사고방식 은 다음 과 같다.

    jwt 인증 절차
    서버 에서 사용 하 는 방식 은 다음 과 같 습 니 다.
    
    //  
    npm i jsonwebtoken --save
    npm i express-jwt --save
    
    //  
    const jwt= require('jsonwebtoken');
    const expressJwt = require('express-jwt');
    
    //    
    const secret = 'salt';
    //  token
    const token = jwt.sign({
      name: 123
    }, secret, {
      expiresIn: 60 //     
    });
    //   token
    //eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoxMjMsImlhdCI6MTQ5MTQ3NTQyNCwiZXhwIjoxNDkxNDc1NDg0fQ.hYNC4qFAyhZClmPaLixfN137d41R2CFk1xPlfLK10JU
    
    //       token   
    app.use(expressJwt ({
      secret: secret 
    }).unless({
      path: ['/login', '/getUserInfo'] //      ,   URL     
    }));
    
    //   
    app.use(function (err, req, res, next) {
      // token            
      if (err.name === 'UnauthorizedError') {  
        //                (    err      )
        res.status(401).send('invalid token...');
      }
    });
    
    //      ,  token    
    app.get('/getUserInfo', function(req, res) {
      res.json({
        token: token
      })
    })
    클 라 이언 트 에서 token 을 사용 하 는 정확 한 형식 은 token 을 authorization 이라는 header 에 두 고 해당 하 는 값 을Bearer로 시작 한 다음 에 한 칸 을 비 우 는 것 입 니 다.
    
    authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiQmluTWFpbmciLCJkYXRhIjoiPT09PT09PT09PT09PSIsImlhdCI6MTUwMTgxNDE4OCwiZXhwIjoxNTAxODE0MjQ4fQ.GoxGlc6E02W5VvqDNawaOrj3MPO-4UYeFdngKR4bVTE
    
    //  axios     
    const instance = axios.create();
    const yourToken = 'sfsgagfdgd';
    //       
    instance.interceptors.request.use(function(config) {
      config.headers.authorization = `Bearer ${yourToken}` 
      return config;
    })
    
    
    세 션 사용
    전통 적 인 인증 과 사용자 식별 은 각각 다음 과 같은 형식 을 채택 한다
  • 서버:session 대상 을 만들어 사용자 로그 인 정보 와 상 태 를 저장 합 니 다.이 대상 은 유일한 ID 가 있 고 클 라 이언 트 에 게 쿠키 를 되 돌려 줍 니 다
  • 클 라 이언 트:api 를 요청 할 때 http 머리 에 쿠키 를 자동 으로 가 져 옵 니 다
  • 여기 서 쿠키 를 사용 하 는 방식 은 두 개의 플러그 인 을 도입 해 야 합 니 다.
  • express-session:node 엔 드 의 session 미들웨어 는 주로 session 의 속성 을 설정 하고 생 성 하 는 데 사 용 됩 니 다
  • cookie-parser:node 단 에서 쿠키 대상 분석
  • 사용 방향 과 JWT 의 차이 가 많 지 않 습 니 다.여기 서 주요 한 차이 점 은 클 라 이언 트 가 자원 을 요청 할 때 http 에서 요청 한 header 에 표 지 를 수 동 으로 추가 하지 않 아 도 됩 니 다.브 라 우 저 는 자동 으로 쿠키 를 추가 합 니 다.구체 적 인 사용 방식 은 다음 과 같 습 니 다.
    
    var express = require('express');
    var cookieParser = require('cookie-parser');
    var session = require('express-session');
     
    app.use(cookieParser('sessiontest'));
    app.use(session({
      secret: 'sessiontest',// cookieParser    
      resave: true,  //(    )             ,                session         。
      rolling: true,  //          cookie     ,       
      saveUninitialized:true,  //   session        。   true,   (    )       ,        。
      cookie: {
        maxAge: 60 * 1000 //    ,    
      }
    }));
    
    /**
     *        
     *                      
     */
    app.use(function(req, res, next) {
      let url = req.originalUrl;
      req.session.touch(); //  session    
      if (url !== '/login' && !req.session.user) {
        res.status(401).send('       ');
        return
      }
      next();
    })
    대비
    실천 파 인사 로 서 나 는 두 가 지 를 모두 시험 해 보 았 으 며,동시에 인터넷 의 블 로 그 를 결합 하여 다음 과 같은 대 비 를 귀납 하 였 다.
  • JWT 는 상태 가 없 으 며 확장 및 디 결합 이 가능 합 니 다.JWT 를 사용 하면 백 엔 드 를 기록 할 필요 가 없고 모든 token 은 독립 적 입 니 다.한편,session 의 탄생 은 http 무 상태 문 제 를 해결 하기 위 한 것 이다.이 는 서버 가 모든 사용자 가 대응 하 는 session 대상 을 저장 하고 확장 성 이 더욱 번 거 로 울 것 임 을 나타 낸다
  • .
  • 크로스 와 CORS.백 엔 드 로 요청 을 보 낼 때마다 JWT 를 점검 해 야 하 며,검증 이 통과 되면 요청 을 처리 할 수 있다.한편,Cookie 는 단일 영역 과 하위 영역 에서 만 역할 을 발휘 할 수 있다
  • .
  • JWT 생 성 은 일정한 메모 리 를 소모 하고 부피 가 크 며 가장 작은 것 은 쿠키 보다 큽 니 다.만약 에 JWT 에 많은 성명 이 포함 되 어 있 으 면 문제 가 심각 합 니 다.서버 에 요청 할 때마다 token 을 휴대 해 야 하기 때문에 너무 크 면 요청 이 느 릴 수 있 습 니 다
  • session 이 JWT 보다 좋 은 점 은 요청 할 때 브 라 우 저가 http 헤드 에 쿠키 를 자동 으로 가 져 오고 사용자 가 지속 적 으로 사용 할 때 session 의 만 료 시간 을 계속 갱신 하 며 브 라 우 저가 닫 힐 때 자동 으로 session 을 제거 하 는 데 있다.이에 비해 JWT 자 체 는 사용자 의 사용 에 따라 업데이트 되 거나 수 동 으로 제거 되 지 못 하고 자동 으로 만 료 될 수 있 습 니 다
  • 이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기