LTS 버전 : 안정적이고 신뢰되는 버전 

최근 버전은 모듈이 호환이 안되는 경우가 많다.

 

EC2는 명령어를 통해 설치를 해야한다.

데이터 베이스는 전부다 올리면 안된다. > gitignore을 통해 올리지 않는다.

 

JWT

를 하기 전에 알아야하는 개념은 OAuth에 대해 알아야한다.

OAuth(Open Authorization)

- 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 어플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는 접근 위임을 위한 개방형 표준 

- 즉, 서드파티 어플리케이션이 사용자의 계정에 접근할 수 있는 권한을 부여하기 위한 프로토콜

 

현재는 OAuth 2.0을 사용하고 있다.

 

- JWT는 웹 애플리케이션에서 정보를 안전하게 전송하기 위한 간단한 방법

- 인증된 사용자를 식별하거나 데이터에 서명을 하여 변조를 방지하는 데 사용

- 모두가 열어봐서 확인할 수 있기 때문에 중요한 정보(EX 비밀번호)는 담으면 안된다.

- 암호화는 되어 있지만 언제든지 해석할 수 있다.

 

JWT 구성

- Header

- Payload

- Signature : 위의 두개의 조합에 비밀 키를 사용해 생성

 

작동 방식

주요함수

sign : 서버측에서 JWT를 생성할 때 사용

jwt.sign(payload, secretOrPrivateKey, [options, callback])

verify : 클라이언트나 서버에서 받은 JWT의 유효성을 검증할 때 사용

jwt.verify(token, secretOrPrivateKey, [option, callback])

사용하기

npm i jsonwebtoken

 

jwt 해보기

npm init -y

npm i express jsonwebtoken

으로 express와 jsonwebtoken을 설치하고 아래와 같이 적은 후

import express from 'express';
import jwt from 'jsonwebtoken';
const app = express();
const SECRET = 'secretkey'

app.use(express.urlencoded({extended:true}))
app.use(express.json())

app.post('/login', (req, res)=>{
    const { id } = req.body;
    const token = jwt.sign({id}, SECRET);
    console.log(token);
})

app.listen(8080, ()=>{
    console.log('연결')
});

서버를 연다 그 이후엥 포스트 맨에서 객체 형태로 보내면

vscode에 다음과 같은 문장이 온다 이를 jwt에 입력하면 어떤 것을 받았는지 확인할 수 있다.

 

토큰을 보내는 방법

저기서 토큰에 받은 토큰을 보내면 된다. 전부다 받을려면 

req.headers로 더 많은 정보를 맏을 수 있고, 토큰 값만 받을려면

app.post('/verify', (req, res) => {
    console.log(req.headers.authorization);
    const auth = req.headers.authorization;
    const token = auth.split(' ');
});

이와 같이 입력하고 다시 보내면 된다.

 

jwt 를 검증하는 코드

app.post('/verify', (req, res) => {
    console.log(req.headers.authorization);
    const auth = req.headers.authorization;
    const token = auth.split(' ');
    if( token[0] === 'Bearer') {
        jwt.verify(token[1], SECRET, (err, decoded) => {
            if( err ) {
                return res.send({result : false, message : '검증 실패'});
            }
            res.send({result : true, user : decoded});
        });
        // 여기서 바로 옆 애를 변수 선언하고 리턴을 할 경우 트라이캐치문으로 받아야하기 때문에 콜백함수 형태로 사용한다
    }else {
        res.send({ result : false, message: '올바른 인증 방식이 아닙니다.' })
    }
});

err의 명확한 상태값을 보내주기 위해선 

.status(오류 상황에 대한 숫자)

를 적으면 된다.

 

 

+ Recent posts