Application 개발 시 회원제로 사용되는 App이라면 login process는 반드시 필요하다.
login 요청 시 access token을 발행하여 사용자에게 전달하는데 이때 refresh token을 하나 더 전달한다.
JWT 토큰으로 발급되고 이후 결제나 개인정보 열람 등 사용자 인증이 필요한 부분에 사용되는 인증토큰이다.
Access Token을 통한 인증방법은 보안에 취약하다는 단점이 있다.
이 단점을 보완하기 위해 로그인 요청 시 Refresh Token을 추가로 발급한다.
Refresh Token은 Access Token과 같은 JWT 토큰으로 발급되고 Access Token 만료 시 Access Token을 새로 발급해주는 역할을 한다.
Refresh Token이 Access Token을 새로 발급해주므로 Access 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')
}