Swagger, Access/Refresh Token
1. Swagger
1) 정의
- RESTful API를 문서화하고 시각화하는 도구(api명세)
- API를 개발, 테스트, 공유를 용이하게 하여 협업 생산성 증가
- API를 문서화하기 위한 명세 언어인 OpenAPI Specification을 사용, 자동으로 API 문서를 생성하고, 명세서ui제공
2) swagger-autogen
- swagger의 기본 틀을 자동생성하는 node.js 라이브러리
3) 사용법
- npm i swagger-ui-express swagger-autogen
- app.js에
const swaggerUi = require("swagger-ui-express");
const swaggerFile = require("./swagger-output");
app.use("/swagger", swaggerUi.serve, swaggerUi.setup(swaggerFile));
- 원하는 위치에 swagger.js생성 후
// autogen 패키지 불러오기 및 실행
const swaggerAutogen = require("swagger-autogen")();
// 기본 설명 설정 알맞게 채워주세요
const doc = {
info: {
title: "My API",
description: "Description",
},
host: "localhost:3000",
schemes: ["http"],
};
const outputFile = "./swagger-output.json";
const endpointsFiles = [
"./app.js" //저희 최종 실행 파일인 app.js
];
swaggerAutogen(outputFile, endpointsFiles, doc);
- 이후 node ./swagger.js 실행
- 해당 url로 접속하여 확인
- 수정 시 swagger-output.json에서 변경
"/api/auth/login/user": {
"post": {
"tags": ["auth"],
"description": "로컬 유저 로그인",
"parameters": [
{
"name": "body",
"in": "body",
"schema": {
"type": "object",
"properties": {
"email": {"example":"jjm@jjm.com" },
"password": {"example":"1234abc"}
}
}
}
],
"responses": {
"200": {
"description": "로그인 성공",
"schema": {
"type": "object",
"properties": {
"message": { "example": "로그인 완료" }
}
}
}
}
},
},
2. Access/Refresh Token
1) Access Token
- 사용자의 권한이 확인(ex: 로그인) 되었을 경우 해당 사용자를 인증하는 용도로 발급
- Cookie로 jwt를 발급하고 설정한 Expires 기간이 지날 때 인증이 만료되게 하는것 또한 Access Token
- Stateless(무상태)상태 : Node.js 서버가 꺼졌다 켜져도 동일한 동작을하는 방식. jwt를 이용해 사용자의 인증 여부는 확인할 수 있지만 처음 발급한 사용자 본인인지 확인이 불가능
- 그 자체로 사용자를 인증하는 모든 정보를 가지고 있기 때문에 탈취된 시간이 길수록 피해가 큼
2) Refresh Token
- 특정한 사용자가 Access Token을 발급받기 위한 용도로 사용.
- 사용자의 인증정보를 사용자가 가지고 있는 것이 아닌, 서버에서 해당 사용자의 정보를 저장소(레디스 참조) 또는 별도의 DB에 저장하여 관리
-서버에서 특정 Token 만료가 필요할 경우 저장된 Token을 제거하여 사용자의 인증 제어가 가능, 사용자에게 발급한 Token이 탈취당할 경우 피해를 최소화 하기 위해서 사용
- 레디스 참고 링크(https://velog.io/@c1madang/Redis-Refresh-Token)
3. Refresh Token 적용
1) 5lv 적용 성공
2) 토큰 값을 주고 받는 과정에서 에러가 많이 발생(토큰 값을 전달해주는 방식과 토큰의 데이터 타입 등)
3) 리팩토링 진행 후 미니프로젝트에 반영 하였음(https://jujiprogram.tistory.com/60)
'항해14기 본과정 > 항해14기 개발일지' 카테고리의 다른 글
[항해 14기] 개발일지29 (미니 프로젝트 - 발제) (0) | 2023.05.05 |
---|---|
[항해 14기] 개발일지28 (Transaction, Returning) (0) | 2023.05.04 |
[항해 14기] 개발일지26 (5lv 리팩토링) (0) | 2023.05.02 |
[항해 14기] 개발일지25 (Node.js 5lv 과제) (0) | 2023.05.01 |
[항해 14기] 개발일지24 (Layered Architecture Pattern) (0) | 2023.04.29 |