在 gRPC 方法上将 Auth0 与 NestJS 结合使用

Using Auth0 with NestJS on gRPC Methods

我正在尝试为我的 gRPC 服务实现 NestJS Guards 的身份验证和授权,这是在 NestJS 中实现的。

@GrpcMethod(USER_SERVICE_NAME, 'GetUser')
private getUser(req: GetUserRequest): Promise<GetUserResponse> {
    return this.userService.getUser(req);
}

到现在为止,我发现了如何为常规 HTTP 请求实现它,遵循 this tutorial。 但据我所知,这是从常规 http 请求中获取 JWT。

现在我该如何将其应用于 gRPC 请求。我也找到了 this package,但在这里我不确定如何设置缓存、速率限制和哈希算法选项。

Now how can I apply that to gRPC requests. I also found this package, but here I am not sure how I would set the cache, rateLimit, and hash-algorithm options.

在您链接到的那个包中,您可以在自述文件中看到您需要实现自己的 IAuthService

他们提供了一个示例,其中他们使用通过 params 参数提供给 IAuthService 的令牌调用 jwt.verify 方法。

JWT 令牌是从 gRPC 请求的 元数据 中提取的,如 here.

所示

您可以select您想要在jwt.verify函数的第三个options参数中使用的算法

// Extract taken from the package's readme.
const options = {
  // For example...
  algorithms: ['HS256', 'HS384']
};

return new Promise(function (resolve, reject) {
  jwt.verify(token, getKey, options, (err, decoded) => {
    if (err) reject(err);
    resolve(decoded);
  });
}).then((user) => user);

关于 缓存 我不明白你的意思,也许 jwt.verify 函数上的 maxAge 选项?

maxAge: the maximum allowed age for tokens to still be valid. It is expressed in seconds or a string describing a time span zeit/ms.

关于速率限制,您可以使用 NestJS 文档中的 this exampleController 方法之上实现它。