如何访问 JwtToken 以检查 nestjs 护照策略中的黑名单?

     2023-02-19     24

关键词:

【中文标题】如何访问 JwtToken 以检查 nestjs 护照策略中的黑名单?【英文标题】:How to get access to JwtToken to check with blacklist within nestjs passport strategy? 【发布时间】:2021-01-10 03:06:22 【问题描述】:

我正在尝试在 JWTStrategy 中检查列入黑名单的 JWT 令牌。 jwtFromRequest 不带异步功能,所以我不能在那里检查。

validate 函数允许访问 JWT 有效负载而不是令牌。

下面是我的示例代码。

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) 
  constructor(
    private readonly configService: ConfigService<AppJWTSettings>,
    @Inject(CACHE_MANAGER) private readonly cache: Cache,
  ) 
    super(
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), // Returns the encoded JWT string or null.
      ignoreExpiration: false, // validate the expiration of the token.
      // https://docs.nestjs.com/techniques/authentication#implementing-passport-jwt
      // PEM-encoded public key
      secretOrKey: configService.get<string>('JWT_PUBLIC_KEY'),
      algorithms: ['RS256'],
    );
  

  /**
   * Passport will build a user object based on the return value of our validate() method,
   * and attach it as a property on the Request object.
   *
   * @param payload JWT payload
   */
  async validate(payload: JwtPayload): Promise<JwtUser> 
    const user =  id: payload.sub, iat: payload.iat ;
    return user;
  

【问题讨论】:

【参考方案1】:

创建新令牌时,我将令牌存储在 cookie 中并通过 AJAX 调用传递令牌,有时通过查询字符串请求传递它。您应该能够通过 cookie(标头)、查询字符串等传递用户使用的任何令牌...在控制器上,对其进行验证,如果列入黑名单,则在未经授权的情况下返回重定向 url 或字符串,并通过 JavaScript 重定向。

【讨论】:

在控制器中验证不遵循 DRY 方法。在每个受保护的路由中,都需要添加此检查。我什至可以创建一个单独的 Guard 来检查列入黑名单的 JWT,并在 UseGuards 中作为额外的保护传递。我希望在这个 Guard 中解决问题。 通常,每个策略的 validate() 方法的唯一显着区别是您如何确定用户是否存在并且是否有效。例如,在 JWT 策略中,根据需求,我们可能会评估解码后的 token 中携带的 userId 是否与我们的用户数据库中的记录匹配,或者与已撤销的 token 列表匹配。这是 NestJs 官方文档的摘录。 docs.nestjs.com/techniques/…我正在寻找他们推荐的匹配已撤销令牌的方式。

GraphQL + NestJS - 我如何在警卫中访问@Args?

】GraphQL+NestJS-我如何在警卫中访问@Args?【英文标题】:GraphQL+NestJS-howcanIaccess@Argsinaguard?【发布时间】:2020-12-1413:27:42【问题描述】:我需要以某种方式从警卫内部的@Args访问objectId,以检查发件人是否将objectId分配给他的帐户。... 查看详情

访问 Apollo 服务器以进行 NestJS GraphQL 测试

】访问Apollo服务器以进行NestJSGraphQL测试【英文标题】:AccesstoApolloserverforNestJSGraphQLtest【发布时间】:2019-09-2403:27:30【问题描述】:测试ApolloGraphQL服务器的标准方法是使用Apollotestclient。createTestClient方法需要server参数。在NestJS/Typ... 查看详情

NestJS - 如何使用 @Body() 装饰器访问帖子正文?

】NestJS-如何使用@Body()装饰器访问帖子正文?【英文标题】:NestJS-Howtoaccesspostbodyusing@Body()decorator?【发布时间】:2018-10-0911:27:49【问题描述】:importController,Post,Bodyfrom\'@nestjs/common\';importMyServicefrom\'my.service\';importMyDtofrom\'./dt 查看详情

AWS Lambda 上的 Nestjs(无服务器框架)|如何访问事件参数?

】AWSLambda上的Nestjs(无服务器框架)|如何访问事件参数?【英文标题】:NestjsonAWSLambda(ServerlessFramework)|Howtoaccesstheeventparameter?【发布时间】:2021-03-2016:14:39【问题描述】:我在AWSLambda上托管Nestjs应用程序(使用无服务器框架)。... 查看详情

如何在 NestJS GraphQL 解析器中访问 Response 对象

】如何在NestJSGraphQL解析器中访问Response对象【英文标题】:HowtoaccessResponseobjectinNestJSGraphQLresolver【发布时间】:2021-07-2706:15:40【问题描述】:如何将@Res()传递到我的graphql解析器?这不起作用:@Mutation(()=>String)login(@Args(\'loginInpu... 查看详情

如何检查用户是不是经过身份验证以访问特定路径(MEAN STACK)

】如何检查用户是不是经过身份验证以访问特定路径(MEANSTACK)【英文标题】:Howtocheckifauserisauthenticatedtoacesscertainpath(MEANSTACK)如何检查用户是否经过身份验证以访问特定路径(MEANSTACK)【发布时间】:2020-09-2803:30:53【问题描述... 查看详情

如何从 NestJS/TypeORM 中 Parent 的 join 字段访问关系 ID

】如何从NestJS/TypeORM中Parent的join字段访问关系ID【英文标题】:HowtoaccessrelationshipIDfromParent\'sjoinedfieldinNestJS/TypeORM【发布时间】:2019-06-0709:01:30【问题描述】:我正在设置一个使用TypeORM的NestJSGraphQLAPI,但在实现实体之间的关系时... 查看详情

Nestjs websocket网关,如何从握手中解析签名cookie以进行保护授权?

】Nestjswebsocket网关,如何从握手中解析签名cookie以进行保护授权?【英文标题】:Nestjswebsocketgateway,howtoparsesignedcookiesfromhandshakeforguardauthorization?【发布时间】:2020-04-1318:27:57【问题描述】:我的守卫包含以下代码:letclient:Socket=c... 查看详情

如何测试 Nestjs 拦截器?

】如何测试Nestjs拦截器?【英文标题】:HowtotestNestjsinterceptor?【发布时间】:2020-01-0321:47:00【问题描述】:我找不到任何关于如何在NestJS中测试拦截器的解释这个简单的例子截取了一个POST查询以向正文中提供的示例模型添加一... 查看详情

如何手动检查 json web token 是不是有效?

...?【发布时间】:2019-02-1112:25:01【问题描述】:我想确定JWTToken在[AllowAnonymouse]]端点中是否有效编辑我有一个端点,任何人(授权和未经授权的人)都可以访问,然后:如果该用户有http授权标头或者他在 查看详情

如何使用 NestJS 和 TypeORM 转换输入数据

】如何使用NestJS和TypeORM转换输入数据【英文标题】:HowtotransforminputdatawithNestJSandTypeORM【发布时间】:2019-11-0808:07:05【问题描述】:我想创建可以在传入数据到达数据库之前对其进行转换的功能。假设我们要确保在创建新用户时... 查看详情

如何以正确的方式将@admin-bro/nestjs 与@admin-bro/typeorm 和postgres 一起使用?

】如何以正确的方式将@admin-bro/nestjs与@admin-bro/typeorm和postgres一起使用?【英文标题】:Howtouse@admin-bro/nestjswith@admin-bro/typeormandpostgresinarightway?【发布时间】:2021-05-2404:04:12【问题描述】:admin-bro-nestjs存储库包含一个综合示例,其... 查看详情

在没有实际访问数据库的情况下测试使用 Prisma 的 NestJS 服务

...间】:2022-01-1016:22:42【问题描述】:我见过的大多数关于如何测试Prisma注入的NestJS服务的示例(例如testing-nestjs中的prisma-sample)都是用于“端到端”测试 查看详情

如何在 Nestjs 中创建 mongodb 连接提供程序

】如何在Nestjs中创建mongodb连接提供程序【英文标题】:HowtocreateamongodbconnectionproviderinNestjs【发布时间】:2020-06-0607:34:35【问题描述】:我正在尝试在Nestjs中为MongoDB创建一个数据库连接提供程序。我通过放置断点检查了user.controll... 查看详情

如何在 NestJS 中提供静态图像

】如何在NestJS中提供静态图像【英文标题】:HowtoservestaticimagesinNestJS【发布时间】:2020-12-0507:44:06【问题描述】:我开始学习MEAN堆栈,当我去Express时,我看到express框架中存在一个额外的层,称为NestJS。它拥有我想要的一切,并... 查看详情

我可以在我的 graphql 查询中访问请求标头,在 nestjs 中吗?

...查询中访问用户的IP地址。但我无法获得任何标题信息。如何在我的graphql请求中访问我在工厂中创建的上下文?//app.module.ts...@Module(im 查看详情

NestJS - 从 Guard 访问用户

】NestJS-从Guard访问用户【英文标题】:NestJS-AccessuserfromGuard【发布时间】:2021-10-1220:41:57【问题描述】:我一直在关注NestJS的官方文档。我已成功设置JWT护照身份验证。我可以从控制器中的@Req访问用户详细信息,但我在从自定义... 查看详情

使用 NestJs 和 Mysql 检查连接是不是成功

】使用NestJs和Mysql检查连接是不是成功【英文标题】:CheckifconnectionwassuccessfulusingNestJsandMysql使用NestJs和Mysql检查连接是否成功【发布时间】:2021-07-0418:18:51【问题描述】:标题不言自明,我开始学习NestJS,我想知道是否有可能,... 查看详情