【发布时间】:2022-12-24 10:48:01
【问题描述】:
我有一个提供 JWT 令牌的外部服务。在 Nestjs 中,我首先拥有 JwtGuard 类:
@Injectable()
export class JwtGuard extends AuthGuard('JWT_STRATEGY') {
constructor() {
super();
}
getRequest(context: ExecutionContext) {
console.log('JwtGuard');
const ctx = GqlExecutionContext.create(context);
return ctx.getContext().req;
}
}
然后是护照策略:
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy, 'JWT_STRATEGY') {
constructor(private configService: ConfigService) {
super({
secretOrKeyProvider: passportJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: configService.get<string>('ADFS_KEYS_URL'),
}),
ignoreExpiration: false,
jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
audience: configService.get<string>('ADFS_AUDIENCE'),
issuer: configService.get<string>('ADFS_ISSUER'),
algorithms: ['RS256'],
});
}
validate(payload: unknown): unknown {
console.log('jwt strategy');
console.log(payload);
return payload;
}
}
好像是先运行JwtGuard,再运行策略。但是如果我想做额外的保护和检查,比如角色。在哪里做?我是否需要另一个警卫来执行护照策略?我有两个角色“用户”和“管理员”。
【问题讨论】:
标签: nestjs passport.js