NodeJS(4기) 26일차

형집·2022년 12월 20일

NodeJS(4기)

목록 보기
35/56
post-thumbnail

웹 어플리케이션에서 로그인을 구현하는 방법

  1. 쿠키, 세션 이용
  • 서버에서 세션아이디 기록 브라우저에서 쿠키를 저장
  1. 토큰을 이용
  • 토큰을 발행 토큰의 유효성 검증

JWT

토큰을 이용하는 방식
오픈소스 라이브러리 사용
jsonwebtoken 라이브러리 사용

모듈 설치

npm init
npm install jsonwebtoken -s

데이터 암호화

const jwt = require("jsonwebtoken");

const token = jwt.sign({userId:user.userId}, "sparta-secret-key");

암호화 된 데이터는 api서버에 요청을 할 때 인증 양식에 맞기 보내 인증 시도

Access Token, Refresh Token

AccessToken

사용자 권한이 확인 - 사용자를 인증하는 용도로 발급
Stateless - node.js서버가 죽었다 살아나도 동일한 동작을 함

RefreshToken

특정한 사용자가 AccessToken 발급 받기 위한 용도
서버에서 특정 토큰 만료 할 때 제거

Access Token, Refresh Token 발급하는 API

let tokenObject = {}; // Refresh Token을 저장할 Object
//set-token api - accesstoken refreshtoken 발급받는 부분
//사용자가 GET /set-token/:id API를 호출했을때 Access Token과 Refresh Token을 2개 발급
app.get("/set-token/:id", (req, res) => {
    const id = req.params.id;
    const accessToken = createAccessToken(id);
    const refreshToken = createRefreshToken();

    //refreshtoken이 어떤사용자의것인지 확인 위해서
    tokenObject[refreshToken] = id; // Refresh Token을 가지고 해당 유저의 정보를 서버에 저장합니다.
    res.cookie('accessToken', accessToken); // Access Token을 Cookie에 전달한다.
    res.cookie('refreshToken', refreshToken); // Refresh Token을 Cookie에 전달한다.
	//accessToken, refreshToken이라는 Key로 Cookie를 2개 발급
    return res.status(200).send({ "message": "Token이 정상적으로 발급되었습니다." });
})

Access Token 생성

function createAccessToken(id) {//id받아서
    const accessToken = jwt.sign(
    			//jwt토큰 만들고
        { id: id }, 
        // JWT 데이터  id라는 키를 가지고:전달받은id를 벨류로 저장
        SECRET_KEY, // 비밀키
        { expiresIn: '10s' }) // Access Token이 10초 뒤에 만료되도록 설정합니다.

    return accessToken;
}

Refresh Token 생성

function createRefreshToken() {
    const refreshToken = jwt.sign(
        {}, // JWT 데이터
        SECRET_KEY, // 비밀키
        { expiresIn: '7d' }) // Refresh Token이 7일 뒤에 만료되도록 설정합니다.
    //accesstoken을 재발급하는 용도로 쓰기 때문에 만료기간이 길어도 괜찮

    return refreshToken;
}

미들웨어

웹서버의 요청을 공통적으로 처리
ex) 모든 요청에 로그 남겨 확인, 승인된 사용자만 API 접근

Express.js에도 있다.

//urlencoded라는 미드웨어를 통해서 들어온 데이터를 파싱해준다 그 후 해당하는 라우터로가라
app.use("/api", express.urlencoded({ extended: false }), router);
app.use(express.static("assets"));//assets서빙하기위한 전역미드웨어

미들웨어는 위에서 아래로 넘어간다

Express.js의 미들웨어가 실행되는 경우
app.use(Middleware) : 모든 요청에서 미들웨어가 실행된다.
app.use(’/api’, Middleware) : api로 시작하는 요청에서 미들웨어를 실행한다.
app.post(’/api’, Middleware) : api로 시작하는 POST 요청에서 미들웨어를 실행한다

로그인기능 구현 회원가입 api 구현 도 다 함

세션 쿠키 잘 모르겠다. 숙지 요망

mysql강의 조금 남았고
개인과제시작
회원가입, 로그인, 댓글 추가 수정 삭제
만들기
1. erd 작성
2. 몽구스를 musql로 변경
3. 토큰으로 인증받기

profile
개발자

0개의 댓글