login process

SEOKWOO LEE·2022년 10월 27일

Application 개발 시 회원제로 사용되는 App이라면 login process는 반드시 필요하다.

login 요청 시 access token을 발행하여 사용자에게 전달하는데 이때 refresh token을 하나 더 전달한다.

Access Token

JWT 토큰으로 발급되고 이후 결제나 개인정보 열람 등 사용자 인증이 필요한 부분에 사용되는 인증토큰이다.

Refresh Token

Access Token을 통한 인증방법은 보안에 취약하다는 단점이 있다.
이 단점을 보완하기 위해 로그인 요청 시 Refresh Token을 추가로 발급한다.

Refresh Token은 Access Token과 같은 JWT 토큰으로 발급되고 Access Token 만료 시 Access Token을 새로 발급해주는 역할을 한다.

Refresh Token이 Access Token을 새로 발급해주므로 Access Token의 유효기간을 짧게하여 보안을 강화해준다.

Access Token, Refresh Token 발급

import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';

@Injectable()
export class AuthService {
  constructor(
    private readonly jwtService: JwtService, //
  ) {}

  getAccessToken({ user }) {
    return this.jwtService.sign(
      { email: user.email, sub: user.id }, // 페이로드 부분
      { secret: 'secret key', expiresIn: '1h' },
    );
  }
}

  setRefreshToken({ user, res }) {
    const refreshToken = this.jwtService.sign(
      { email: user.email, sub: user.id },
      { secret: 'secret key', expiresIn: '2w' },
    );

    // 개발환경
    res.setHeader('Set-Cookie', `refreshToken=${refreshToken}`);

    // 배포환경
    // res.setHeader('Set-Cookie', `refreshToken=${refreshToken}; path=/; domain=.mybacksite.com; SameSite=None; Secure; httpOnly;`)
    // res.setHeader('Access-Control-Allow-Origin', 'https://myfrontsite.com')
  }
profile
내가 보기위해 만든 나만의 공부 노트

0개의 댓글