我应该使用中间件或防护程序通过 Auth0 和 Nestjs 进行身份验证吗?

Nic*_*ges 5 authentication middleware node.js auth0 nestjs

我陷入了困境。

我开始使用 NestJS 构建一个良好的老式 REST API todo 服务器。然后我使用这篇文章将 Auth0 添加到其中,您可以使用AuthGuard

https://auth0.com/blog/developing-a-secure-api-with-nestjs-adding-authorization/

然而,我从来没能让事情正常工作,总是出错401 Unauthorized。这很令人沮丧。

然后我找到了这篇文章:

https://auth0.com/blog/full-stack-typescript-apps-part-1-developing-backend-apis-with-nestjs/

这让我构建了中间件来使用 Auth0 和 JWT 进行身份验证。你瞧,它成功了。

但这感觉不对——我觉得我应该能够利用NestJS 装饰器的优点@UseGuards来完成整个授权工作。AuthGuard

所以我想我的问题有两个:我在使用中间件而不是 NestJS 装饰器方面犹豫不决是错误的吗?有没有人有一个在 NestJS 中使用装饰器的简单有效的例子?

M U*_*M U 4

它有点基于意见,但是,其中很大一部分在文档中,并且是推荐的良好实践,所以我会尝试回答。

我强烈建议使用@Guard. NestJS 几乎所有事情都使用装饰器。它肯定是固执己见的,但它在某种程度上是基于世界各地使用的 Spring 的。装饰器使代码变得非常冗长,因为您可以清楚地看到什么适用于类或特定方法。

我从来没有遇到过 NestJS 中的 JWT Guards 等问题。

看看这里:https://docs.nestjs.com/techniques/authentication#implementing-passport-jwt

它对我来说就像一种魅力。

无论如何 - 您也可以尝试使用自定义的 JWT Guard,例如https://github.com/auth0/node-jwks-rsa。当然,调试起来应该更容易,但是,据我所知,内置的 JWT 防护可以为您提供良好的日志。

我建议使用中间件来处理与每个响应或请求交互的东西,并使用警卫来处理所有身份验证的东西。