问题描述
我一直在用 nestjs 开发微服务应用程序。我使用 Auth0 作为我的身份验证 * RBAC 提供者,尽管这些细节与这个问题无关。
为了便于论证,假设我有 2 个服务,一个 users
服务和 accounts
服务。假设我的身份验证发生在 users
服务中,但这两个服务都需要利用如下所示的身份验证保护。
import { AuthGuard } from '@nestjs/passport';
...
@UseGuards(AuthGuard('jwt'))
@Get()
findAll() {
return this.userService.findAll();
}
如果我在使用它的服务中对通行证进行所有配置,它就可以工作。这是完整的配置。
auth.module.ts
import { Module } from '@nestjs/common';
import { PassportModule } from '@nestjs/passport';
import { JwtStrategy } from './jwt.strategy';
@Module({
imports: [PassportModule.register({ defaultStrategy: 'jwt' })],providers: [JwtStrategy],exports: [PassportModule],})
export class AuthModule {}
jwt.strategy.ts
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt,Strategy } from 'passport-jwt';
import { passportJwtSecret } from 'jwks-rsa';
@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
constructor() {
super({
secretorKeyProvider: passportJwtSecret({
cache: true,rateLimit: true,jwksRequestsPerMinute: 5,jwksUri: `{AUTH0_ISSUER_URL}/.well-kNown/jwks.json`,}),jwtFromrequest: ExtractJwt.fromAuthHeaderAsBearerToken(),audience: {AUTH0_AUDIENCE},issuer: {AUTH0_ISSUER_URL},algorithms: ['RS256'],});
}
validate(payload: unkNown): unkNown {
console.log('payload: ',payload);
return payload;
}
}
app.module.ts
import { Module } from '@nestjs/common';
import { AuthModule } from './auth/auth.module';
import { UserModule } from './users/users.module';
...
@Module({
imports: [
AuthModule,UserModule,],controllers: [...],providers: [...],})
export class AppModule {}
同样,这一切正常,如果在尝试访问端点时未登录,我会收到 401。但是,当我将 auth.module.ts
和 jwt.strategy.ts
拉出到 npm 模块中并以完全相同的方式包含它时...我得到 500 并出现以下错误。
[nest] 30616 - 06/08/2021,11:07:03 AM [ExceptionsHandler] UnkNown authentication strategy "jwt" +2291212ms
Error: UnkNown authentication strategy "jwt"
at attempt (/Users/me/projects/svc-users/node_modules/passport/lib/middleware/authenticate.js:190:39)
at authenticate (/Users/me/projects/svc-users/node_modules/passport/lib/middleware/authenticate.js:367:7)
at /Users/me/projects/svc-users/node_modules/@nestjs/passport/dist/auth.guard.js:87:3
at new Promise (<anonymous>)
at /Users/me/projects/svc-users/node_modules/@nestjs/passport/dist/auth.guard.js:79:83
at MixinAuthGuard.<anonymous> (/Users/me/projects/svc-users/node_modules/@nestjs/passport/dist/auth.guard.js:48:36)
at Generator.next (<anonymous>)
at /Users/me/projects/svc-users/node_modules/@nestjs/passport/dist/auth.guard.js:20:71
at new Promise (<anonymous>)
at __awaiter (/Users/me/projects/svc-users/node_modules/@nestjs/passport/dist/auth.guard.js:16:12)
这是我用于私有 npm 模块的 package.json
...
{
"name": "@my-project/auth","version": "1.0.0","description": "nestJS npm package starter","author": "John Biundo <johnfbiundo@gmail.com>","license": "MIT","readmeFilename": "README.md","main": "dist/index.js","files": [
"dist/**/*","*.md"
],"scripts": {
"start:dev": "tsc -w","build": "tsc",...
},"keywords": [
"nestjs"
],"publishConfig": {
"access": "public"
},"repository": {
"type": "git","url": "https://github.com/nestjsplus/nestjs-package-starter"
},"bugs": "https://github.com/nestjsplus/nestjs-package-starter","peerDependencies": {
"@nestjs/common": "^7.0.0"
},"dependencies": {
"@nestjs/passport": "^7.1.5","auth0": "^2.35.0","jwks-rsa": "^2.0.3","passport": "^0.4.1","passport-jwt": "^4.0.0"
},"devDependencies": {
"@nestjs/common": "^7.6.15","@nestjs/config": "^0.6.3","@nestjs/core": "^7.6.15","@nestjs/platform-express": "^7.6.15","@nestjs/testing": "^7.6.15","@types/express": "^4.17.11","@types/jest": "^26.0.22","@types/node": "^14.14.36","@types/supertest": "^2.0.10","@typescript-eslint/eslint-plugin": "^4.19.0","@typescript-eslint/parser": "^4.19.0","eslint": "^7.22.0","eslint-config-prettier": "^8.1.0","eslint-plugin-prettier": "^3.3.1","jest": "^26.6.3","prettier": "^2.2.1","reflect-Metadata": "^0.1.13","rxjs": "^7.0.1","supertest": "^6.1.3","ts-jest": "^26.5.4","ts-loader": "^8.0.18","ts-node": "^9.1.1","tsc-watch": "2.2.1","tsconfig-paths": "^3.9.0","tslint": "5.16.0","typescript": "^4.2.3"
},"jest": {
"modulefileExtensions": [
"js","json","ts"
],"rootDir": "src","testRegex": ".*\\.spec\\.ts$","transform": {
"^.+\\.(t|j)s$": "ts-jest"
},"collectCoverageFrom": [
"**/*.(t|j)s"
],"coverageDirectory": "../coverage","testEnvironment": "node"
}
}
...最后,我将它保存为依赖项,供本地使用到我的 users
服务中。
"dependencies": {
"@my-thing/auth": "../pkg-auth",...
}
任何帮助将不胜感激,似乎我只是错过了一些小事。提前致谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)