단방향 암호화(Hash) <-> 양방향암호화
평문을 암호화는 가능하지만 암호화된것은 평문화가 불가능
암호화된 평문을 다시 복호화가 가능
패키지 설치
yarn add @nestjs/jwt passport-jwt
yarn add @types/passport-jwt --dev
프론트에선 api가 Header에 담은 JWT정보를 꺼내와 사용한다
api를 아무나 실행못하게 막아주는 방어막같은것
@nestjs/passport
를 사용해서
@UseGuards(AuthGuard)
와같이 데코레이터로 사용한다.
/commons/auth/jwt-access.strategy.ts
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
export class JWtAccessStrategy extends PassportStrategy(Strategy, 'aaa') {
constructor() {
super({
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
secretOrKey: 'myAccessKey',
}); // 검증부
}
// 검증이 완료되면 해당부분이 실행된다.
validate(payload) {
console.log(payload);
}
}
PassportStrategy(Strategy, Name)
: 어떤 인가를 쓸건지와 어떤이름으로 사용할건지를 정한다.
super({...})
: 패스포트의 가드를 설정해준다 어떤 리퀘스트를받는지, 비밀키가 무엇인지
validate
: 위의 검증부가 끝나면 해당 검증완료부분의 함수가 실행된다.
그래프큐엘같은경우에는 REST API와는 다르게 Guard를 따로 설정해줘야한다.
순서
1. user.resolver.ts에서 데코레이터로 설정해둔 api호출
2. gql-auth.guard.ts가 실행
3. jwt-access.strategy.ts에서 검증후 validate가 실행된다.