REST API와 JWT-cookie를 이용한 상태 비저장 웹 아키텍처

REST API와 JWT-cookie를 이용한 상태 비저장 웹 아키텍처

반응형

상태 비저장 아키텍처는 확장성과 낮은 서버 로드를 제공하며 보안 쿠키(httpOnly)를 사용하여 구현할 수 있습니다.

API는 웹 사이트, 안드로이드 또는 iOS에서 작업하는 요즘의 모든 개발에 필수적인 부분입니다. API는 모두를 위한 단일 접점을 제공하기 때문에 매우 유용합니다.

예를 들어 다음 JSON 본문을 사용하는 단일 API 경로 "/api/login"이 있을 수 있습니다.

{username : value. Password: value}

모든 API는 요청 본문과 관련이 있다는 것을 알고 있으며, 요청 본문은 어디서 왔든 상관 없습니다. 따라서 모바일 앱/웹 사이트에서 이 단일 경로를 호출하여 백엔드에서 인증을 처리하고 적절한 응답을 제공할 수 있습니다. (인증 참/거짓).

다른 모든 엔드포인트에서도 마찬가지입니다. 이는 모든 애플리케이션에 대해 단일 단일 백엔드를 만들고 프런트엔드만 신경 쓸 수 있는 이점을 제공합니다.

API 설정

a. NodeJS 및 Express 사용JS 백엔드 - 몇 줄의 코드로 API를 빠르게 확장할 수 있습니다.

const express =require('express'); const app =express(); const port = port_no; app.use(express.json()) app.listen(port,() => { console.log(`App running on port ${port}.`) }) app.post('/login',(req,res)=>{ // Process the incoming request here })

여기서 요청 본문을 사용하여 데이터베이스에 대한 사용자의 유효성을 확인한 다음 사용자를 인증된 것으로 표시할 수 있습니다.(세션 또는 쿠키 기반 토큰 방법을 통해 수행할 수 있습니다.)

J 소개WT

상태 비저장 애플리케이션의 경우 json 웹 토큰(J)을 생성할 수 있습니다.WT)는 js로 이렇게 생겼을 것입니다.

const jwt = require("jsonwebtoken"); const dotenv = require("dotenv").config(); async function generateAccessToken(id) { return jwt.sign( { uid: id, role: "user" },process.env.JWT_TOKEN_SECRET, { expiresIn: process.env.JWT_VALIDITY } ); }

여기서는 구성 파일의 비밀 키를 사용하여 토큰에 사용자별 값을 서명합니다. 그런 다음 이 토큰을 httpOnly Cookie로 사용자에게 전달하여 여기서 수신되는 모든 요청에 이 쿠키를 포함시키고 성공적인 인증 시 비즈니스 로직을 라우팅하는 미들웨어를 사용하여 신속하게 분석 및 검증할 수 있습니다.

if (true) { // auth success from DB response .status(200) .cookie( process.env.TOKEN_NAME, await jwt.generateAccessToken(id), { secure: true, httpOnly: true, maxAge: process.env.JWT_VALIDITY, sameSite: "strict", path: "/", } )

이제 사용자는 매번 이 토큰을 전달하며 서버에는 매번 이 토큰의 유효성을 확인하는 미들웨어가 제공됩니다.

HttpOnly 쿠키

const authorization = (req, res, next) => { const token = req.cookies.access_token; if (!token) { return res.sendStatus(403); } try { const data = jwt.verify(token, process.env.JWT_TOKEN_SECRET); req.id= data.id; req.userRole = data.role; return next(); } catch { return res.sendStatus(403); } };

여기서 우리는 모든 API에 추가할 수 있는 토큰 검증을 위한 익스프레스 미들웨어를 만들었습니다.

app.post("/api/logout", jwt.authorization, auth.logout); // User Endpoints app.get("/api/userDetails", jwt.authorization, db.userDetails);

httpOnly 쿠키만 서버측에서만 관리되므로 로그아웃 프로세스가 나타납니다.

const logout = async (request, response) => { response .status(202) .clearCookie(process.env.TOKEN_NAME) .send( JSON.stringify({ login: 0, message: "Logout Success", }) ); logger.info(`Logout Success`); };

이제 모든 API가 보호되고 상태 비저장 애플리케이션의 모든 장점을 사용하고 있습니다.

이 기사를 읽어 주셔서 감사합니다. 당신의 제안을 듣고 싶습니다.

참조:

상태 저장 및 상태 비저장(redhat.com)

익스프레스 라우팅(expressjs.com)

from http://it-ground.tistory.com/202 by ccl(A) rewrite - 2021-09-23 03:26:22