19/11/2023

heyjk2212·2023년 11월 19일

TodayILearned

목록 보기
4/8
post-thumbnail
  • 쿠키에 JWT를 저장하고 클라이언트에 전달하면, 클라이언트와 서버 간의 모든 요청에서 해당 쿠키가 자동으로 요청 헤더에 포함된다.

  • 이를 통해 서버는 각 요청에서 쿠키에 저장된 JWT를 확인하여 사용자를 인증하고 권한을 부여할 수 있습니다.

  • 쿠키를 통해 JWT를 클라이언트에 저장하지 않고, 바로 JWT를 클라이언트에 전송하면 클라이언트가 다음 요청을 보낼 때 request header에는 해당 JWT가 없을 것입니다. 대신에, 클라이언트가 JWT를 request header에 추가하여 서버에게 전달해야 합니다. 보통 Bearer 토큰을 사용하여 JWT를 request header에 포함시킵니다.
  • JWT를 쿠키에 저장하면 클라이언트가 요청을 보낼 때 매번 해당 쿠키가 자동으로 request header에 포함됩니다. 따라서 서버 측에서 테스트할 때 프론트엔드 코드 없이도 해당 쿠키가 포함된 요청을 보낼 수 있어서 쉽게 테스트할 수 있습니다.
  • 그러나 JWT를 클라이언트에 직접 전송하면, 클라이언트는 매 요청마다 해당 JWT를 request header에 수동으로 추가해야 합니다. 이 경우에는 테스트하기 위해서는 클라이언트 코드가 필요하게 됩니다.
  • JWT를 쿠키에 저장하는 것은 쿠키에 JWT를 보관하는 것을 의미합니다

  • 서버 측에서는 인증 미들웨어를 사용하여 req.headers.authorization을 통해 클라이언트가 전달한 JWT를 추출하고, 해당 JWT의 유효성을 확인하여 사용자를 인증합니다.

export default function authMiddleware(req, res, next) {
  try {
    const secretKey = process.env.SECRET_KEY;
    const token = req.headers.authorization; // 헤더에서 토큰 추출

    if (!token) {
      return res.status(401).json({ errorMessage: "인증되지 않은 사용자입니다." });
    }

    const verifiedToken = jwt.verify(token, secretKey);

    req.user = verifiedToken;

    next();
  } catch (error) {
    return res.status(401).json({ errorMessage: "유효하지 않은 토큰입니다." });
  }
}
router.post("/login", async (req, res, next) => {
  try {
    // ... 로그인 로직 (생략) ...

    const token = jwt.sign(
      {
        userId: user.userId,
      },
      secretKey
    );

    return res.status(200).json({ userInfo: token }); // userInfo라는 이름으로 JWT 전달
  } catch (err) {
    next(err);
  }
});
profile
She can do it, He can do it, Why not me?

0개의 댓글