OAuth 2.0 和 OpenID Connect 中的 JWT 安全性

JWT security in OAuth 2.0 and OpenID Connect

我决定加入潮流并开始使用 OAuth 2.0 和 OpenID Connect 对我的下一个项目进行身份验证和授权,但我正在努力了解 JWT 的安全性。

我使用 Angular 8 作为前端和 node.js 后端,Auth0 作为我的身份服务提供商(错误的术语,我知道。忘记了。)

我看过两三门关于这些主题的 PluralSight 课程,但 none 确实在 node.js 后端上使用 JWT,他们大多专注于 .NET 堆栈,这需要很多时间我猜是其中的劳动。

我的问题是:我如何确定发送到我的 API 的 JWT 令牌是来自 Auth0 的令牌?我知道令牌有一个签名,我想 Auth0 有一些他们用来签署 JWT 的私人秘密,但是什么是防止一些恶意实体创建具有完全相同内容的 JWT 并使用不同的秘密签名并将其发送到我的API?在我见过的 .NET 示例中,我没有看到检查签名的秘密是否与 Auth0 的秘密相对应的提及。在 API — .NET、node.js 或其他方面需要进行哪些检查以确保 JWT 是真实的?

这如何与 nodejs 一起工作?

我不确定我是否理解正确或什么,但 JWT 是由相同的秘密签名和验证的(如果使用 HMAC 算法),所以你第一个问题的答案是:

  • 如果它被篡改,您将在验证期间收到通知,因为使用不同的秘密签名会泄露它,即令牌已被泄露。

不确定您使用的是什么库,但是对于 Node.js,jsonwebtoken package 有一个 jwt.verify(token, secret) 函数,它将您的令牌和秘密值作为参数。这基本上就是您需要和可以用来验证的全部内容。