1123 TIL jwt token

냐하호후·2021년 11월 23일
0

TIL

목록 보기
63/101

보안 인증 서버는 왜 비동기로 쓸까?

findOne같은 sequelize 메서드들도 사용법을 보면 then을 써서 비동기로 사용하기도 하고
많은 요청이 들어오더라도 비동기를 이용해서 순차적으로 처리하기 위해서 사용하는 것이라고 이해했다. 요청을 처리하는 동안 다른 요청을 처리할 수 있다.

만약 비동기가 아니면 서버가 일을하다가 다른 요청을 받을 수 없을 것이다.

토큰에서 로그인시 db를 왜 뒤져보는거죠?

 const userInfo = await Users.findOne({
    where: { userId: req.body.userId, password: req.body.password },
  });

로그인 할때 findOne 메서드를 써서 일치하는 유저정보를 찾아보는 과정이 있었다.
테스트 파일에서는 accessToken에서 유저정보가 담겨있어서 그럼 굳이 db를 왜 뒤져보는걸까? 의문이 있었다. 하지만 실제로는 토큰에는 유저정보가 담겨있지 않다. 권한을 얻기위해 필요한 카드키같은 역할일 뿐이었다.
로그인시 클라이언트가 토큰을 갖고있다면, 서버에서 유저가 db에 존재하는 일치하는 유저인지 확인해보아야한다.

쿠키 전달방법

응답 헤더,바디중 헤더에 set-cookie:키 = 값 형태로 쿠키를 전달한다.

Node.js 예시

const server = http.createServer((req, res) => {
  res.setHeader('Content-Type', 'text/html');
  res.setHeader('X-Foo', 'bar');
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('ok');
});

express프레임워크를 이용해서도 할 수 있다.

express 예시 1

express-session 라이브러리를 이용해서 cookie설정을 할 수 있다.

const session = require('express-session');

app.use(
  session({
    secret: '@shhhh',
    resave: false,
    saveUninitialized: true,
    cookie: {
      domain: 'localhost',
      path: '/',
      maxAge: 24 * 6 * 60 * 10000,
      sameSite: "None",
      httpOnly: true,
      secure: true,
    },
  })
);

express 예시 2

express에서는 cookieParser모듈을 사용할 수 있다.

const cookieParser = require("cookie-parser");
app.use(cookieParser());

쿠키 생성시

res.cookie(key,value,{option})

형식으로 만들어주면 된다.

optional chaining

const authorization = req.headers.authorization
const token = authorization?.split(' ')[1]

authorization이 있으면 split해주고 없으면 undefined가 된다.

참고

MDN optional chanining
CORS는 왜이렇게 우리를 힘들게 할까
동일출처 정책은 samesite옵션과 다르다

profile
DONE is better than PERFECT

0개의 댓글

관련 채용 정보