API Token 认证策略
目录
作用于全局的固定Token认证方式
优点
- 可以给计划任务进行调用
- 可以给外部服务进行调用
- 整体实现简单,方便
缺点
- 不利于管理
- 不含角色,无法进行权限管理
实现
配置文件
config/app.config.ts
import { registerAs } from "@nestjs/config";
export default registerAs(
"app", () => ({
x_auth_token: "123456",
})
);
拦截器
common/guards/token-auth.guard.ts
import _ from 'lodash';
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { Observable } from 'rxjs';
@Injectable()
export class TokenGuard implements CanActivate {
constructor(
private readonly configService: ConfigService,
) {}
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const
request = context.switchToHttp().getRequest<Request | any>(),
xAuthToken = request.get(`X-AUTH-TOKEN`) || request.query[`X-AUTH-TOKEN`],
authorizers = [
xAuthToken === this.configService.get(`app.x_auth_token`),
process.platform && process.platform === `win32`,
];
return ! _(authorizers).filter().isEmpty();
}
}
拦截器使用
app.modules.ts
import from "./common/guards/token-auth.guard.ts";
@Module({
providers: [
{
provide: APP_GUARD,
useClass: TokenAuthGuard,
},
]
})
export class AppModule {}