当前位置: 首页 > 知识库问答 >
问题:

验证客户端?

夏侯涵映
2023-03-14
function generateToken(user) {
  return jwt.sign(user, secret, {
    expiresIn: 10080 // in seconds
  });
}

因此,为了实现这个逻辑,我认为我需要在客户端验证JWT令牌。Q1,这是一个明智的做法吗。

Q2,我正在使用的JWT库似乎需要一个公钥才能使用它的verify()函数。我似乎没有公钥,只有一个秘密,这是我刚刚编造的,所以它不是用一对生成的。我的公钥从何而来,或者是否有另一种方法来验证我的令牌而不使用此方法?

这一切似乎应该是显而易见的,我错过了一些东西,所以很抱歉,如果这是一个愚蠢的问题,但我似乎找不到答案?

共有1个答案

楚嘉胜
2023-03-14

DR

  1. 必须始终验证服务器中JWS的签名。
  2. 客户端签名验证没有什么作用,除非您有一个有意义的特定情况,否则不要这样做。
  3. 您不需要验证JWS令牌的签名来检查客户端中的过期。(除非您正在加密声明,也就是使用JWE,否则在这种情况下,您需要执行类似的操作,因为您需要一个密钥来解密声明)。
  4. 您也不需要验证JWS的签名来检查服务器中的过期,但是您应该这样做,因为这样可以确定没有人更改过期(否则验证将失败,因为如果声明更改,那么重新计算的签名将不同)
  5. 要读取未加密的声明,只需对其进行解码即可。您可以在客户机中使用jwt-decode。

我现在意识到,在令牌过期后,我的前端仍然允许用户请求我的apiendpoint[...]

“exp”(过期时间)声明标识了过期时间,在过期时间或过期时间之后,JWT不得接受处理。

在像您所说的web应用程序中,使用令牌是为了允许无状态服务器对客户机请求进行身份验证。可选过期声明的目标是允许服务器对生成的JWS有一定的控制(如果我们使用JWT进行身份验证,则必须对它们进行签名,因此我们应该讨论JWS)。

如果没有过期,令牌将永远有效,或者直到用于签名令牌的密钥更改(这将使验证过程失败)。顺便说一句,使会话无效是使用无状态身份验证最臭名昭著的缺点之一。

jwt.verify(token, secretOrPublicKey, [options, callback])

secretOrPublicKey是一个字符串或缓冲区,包含用于HMAC算法的秘密,或者用于RSA和ECDSA的PEM编码的公钥

我假设您两者都不使用,并且使用的是类似“shhhh”的字符串。

var token = jwt.sign({ data: '¿Donde esta Santiago?'}, 'shhhh');

那你应该做

var decoded = jwt.verify(token, 'shhhhh');
 类似资料:
  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

  • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

  • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一

  • 有时需要对某些网络资源(如Servlet、JSP等)进行访问权限验证,也就是说,有访问权限的用户才能访问该网络资源。进行访问权限验证的方法很多,但通过HTTP响应消息头的WWW-Authenticate字段进行访问权限的验证应该是众多权限验证方法中比较简单的一个。 通过HTTP响应消息头的WWW-Authenticate字段可以使浏览器出现一个验证对话框,访问者需要在这个对话框中输入用户名和密码,

  • 问题内容: 进行客户端或服务器端验证哪个更好? 在我们的情况下,我们正在使用 jQuery和MVC。 在我们的视图和控制器之间传递的JSON数据。 我所做的许多验证工作都是在用户输入数据时对其进行验证。例如,我使用该事件来防止文本框中的字母,设置最大字符数,并且该数字在一定范围内。 我想更好的问题是,与客户端相比,进行服务器端验证是否有任何好处? 真棒的答案大家。我们拥有的网站受到密码保护,并且用