Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js JWT令牌如何进行身份验证?_Node.js_Api_Security_Oauth_Jwt - Fatal编程技术网

Node.js JWT令牌如何进行身份验证?

Node.js JWT令牌如何进行身份验证?,node.js,api,security,oauth,jwt,Node.js,Api,Security,Oauth,Jwt,这让我感到困惑: 因此,当用户登录时,他们将被授予带有签名的JWT令牌。此签名与标头+有效负载+机密一起发生 现在用户有了一个令牌,他们可以访问受保护的资源 JWT如何知道令牌是有效的?由于在该流中服务器上没有存储任何内容,如何与签名进行比较?如果我使用JWT调试器,我可以创建一个同样有效的令牌。那么这部分是如何工作的呢 最后一点让我很困惑。我到处都能看到“支票签名”,但没有人详细解释 JWT基于服务器拥有的密钥创建客户端令牌。 JWT的设计理念是,如果没有服务器拥有的密钥,就无法生成这些客

这让我感到困惑:

  • 因此,当用户登录时,他们将被授予带有签名的JWT令牌。此签名与标头+有效负载+机密一起发生

  • 现在用户有了一个令牌,他们可以访问受保护的资源

  • JWT如何知道令牌是有效的?由于在该流中服务器上没有存储任何内容,如何与签名进行比较?如果我使用JWT调试器,我可以创建一个同样有效的令牌。那么这部分是如何工作的呢


最后一点让我很困惑。我到处都能看到“支票签名”,但没有人详细解释

JWT基于服务器拥有的密钥创建客户端令牌。 JWT的设计理念是,如果没有服务器拥有的密钥,就无法生成这些客户端令牌,因此,每个密钥都是安全的,而密钥始终是安全的。
此外,服务器使用密钥验证客户端令牌是否有效,并且只有该密钥才能验证它。

JWT基于服务器拥有的密钥创建客户端令牌。 JWT的设计理念是,如果没有服务器拥有的密钥,就无法生成这些客户端令牌,因此,每个密钥都是安全的,而密钥始终是安全的。
服务器还使用密钥来验证客户端令牌是否有效,并且只有该密钥才能验证它。

这里有很多相当普遍的问题,所以我将其细分了一些

  • JWT如何知道令牌是有效的而不是冒名顶替者令牌
  • 当您向服务器提交请求时,JWT会附加到该请求的头上。此JWT以前由服务器提供(在身份验证时),通常存储在localstorage或Cookie中,以便持久化会话

    然后可以使用“jsonwebstoken”包(服务器端)来确定令牌对特定资源的有效性。JWT包将解密令牌并比较其签名。这是通过比较秘钥来完成的,它永远不应该暴露在客户端这是一个可能导致令牌无效或有效的变量。另一种可能是令牌过期已超时。例如,如果攻击者窃取了其他人的令牌,他们可能会尝试将该令牌发送到您的服务器并模拟其他人。因此,有一个15m-1h的短有效期是很好的

  • 令牌如何对特定路由有效
  • 这就是变量无限的地方。JWT允许您在令牌内存储信息。例如,如果您有两个不同的用户组,则令牌中会存储一个值(最初签名时),说明用户是否属于特定的用户组。e、 g.userIsABuyer:false,或userIsABuyer:true。一个好的实践是编写一些中间件来拦截传入的每个请求,并检查令牌是否有效。如果有效,您可以附加一个头,例如,“authenticated:true”,为了进一步保护其他内部资源,您可以附加任意数量的头。例如,“userIsABuyer:false”

    -这是一个非常好的视频,深入了解了JWT


    -这是一个极好的资源,它还包括处理在前端应用程序中持久化会话的问题,当在内存中存储令牌时

    这里有许多相当普遍的问题,所以我对这些问题进行了一些细分

  • JWT如何知道令牌是有效的而不是冒名顶替者令牌
  • 当您向服务器提交请求时,JWT会附加到该请求的头上。此JWT以前由服务器提供(在身份验证时),通常存储在localstorage或Cookie中,以便持久化会话

    然后可以使用“jsonwebstoken”包(服务器端)来确定令牌对特定资源的有效性。JWT包将解密令牌并比较其签名。这是通过比较秘钥来完成的,它永远不应该暴露在客户端这是一个可能导致令牌无效或有效的变量。另一种可能是令牌过期已超时。例如,如果攻击者窃取了其他人的令牌,他们可能会尝试将该令牌发送到您的服务器并模拟其他人。因此,有一个15m-1h的短有效期是很好的

  • 令牌如何对特定路由有效
  • 这就是变量无限的地方。JWT允许您在令牌内存储信息。例如,如果您有两个不同的用户组,则令牌中会存储一个值(最初签名时),说明用户是否属于特定的用户组。e、 g.userIsABuyer:false,或userIsABuyer:true。一个好的实践是编写一些中间件来拦截传入的每个请求,并检查令牌是否有效。如果有效,您可以附加一个头,例如,“authenticated:true”,为了进一步保护其他内部资源,您可以附加任意数量的头。例如,“userIsABuyer:false”

    -这是一个非常好的视频,深入了解了JWT

    -在内存中存储令牌时,JWT(JSON Web令牌)是一种自包含的访问令牌,这意味着它包含应用程序使用它所需的所有信息(即JWT声明)和服务器验证它所需的所有信息(即JWT头和JWT签名)。所有这些都在一个令牌中

    服务器通过询问这两个问题来验证JWT

    JWT是否已过期?
    JWT有效负载是否被篡改?

    第一个:服务器查看JWT有效负载,以确定JWT是否过期。
    有关完整注册索赔的列表,请参阅