Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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
Java 服务器上的JWT登录流和令牌验证_Java_Angularjs_Rest_Jax Rs_Jwt - Fatal编程技术网

Java 服务器上的JWT登录流和令牌验证

Java 服务器上的JWT登录流和令牌验证,java,angularjs,rest,jax-rs,jwt,Java,Angularjs,Rest,Jax Rs,Jwt,在服务器上验证令牌的正确方法是什么 我正在我的应用程序中使用jwt令牌机制,以下是它目前的工作方式: 客户端使用用户名和密码登录 服务器检查用户名和密码,并使用RSA创建令牌 公钥和私钥,并使用有效负载向客户端发送新令牌 包含用户的电子邮件地址,然后将相同的令牌存储在 数据库 任何对服务器上资源的后续请求,客户机都会随之发送 然后,jwt令牌服务器使用中可用的令牌检查令牌 基于用户登录的电子邮件地址的数据库 然后将资源提供给客户端 我想我错过了一些东西。在阅读其他博客文章时,我看到令牌应该使用密

在服务器上验证令牌的正确方法是什么

我正在我的应用程序中使用jwt令牌机制,以下是它目前的工作方式:

  • 客户端使用用户名和密码登录
  • 服务器检查用户名和密码,并使用RSA创建令牌 公钥和私钥,并使用有效负载向客户端发送新令牌 包含用户的电子邮件地址,然后将相同的令牌存储在 数据库
  • 任何对服务器上资源的后续请求,客户机都会随之发送 然后,jwt令牌服务器使用中可用的令牌检查令牌 基于用户登录的电子邮件地址的数据库
  • 然后将资源提供给客户端
  • 我想我错过了一些东西。在阅读其他博客文章时,我看到令牌应该使用密钥进行验证

    我有几个问题:

  • 我不确定是否应该根据公钥或密码检查令牌 私钥
  • 在向客户端发送jwt令牌时,我是否必须向客户端发送公钥 当我使用RSA机制时,有效负载中的客户端?所以对于每个请求 对于资源,我必须解码令牌并检查公钥 反对私钥
  • 在哪种情况下,我需要在数据库中存储令牌?或者是 根本不需要在数据库中存储令牌
  • 当恶意用户在客户端获取令牌时会发生什么 然后用它登录
  • 注意:我使用香草java和jax rs(rest)作为后端,使用angularjs作为前端。谢谢

  • 服务器必须使用私钥对JWT进行签名。然后,当客户端接收回令牌时,它可以使用公钥以及服务器本身对其进行验证
  • 在发送令牌之前,客户端必须知道公钥
  • 您不需要在数据库中存储访问令牌,因为JWT是经过签名的。你可以用签名来验证它。如果令牌是使用任何其他私钥生成的,则无法使用您的公钥对其进行验证
  • 攻击者不能使用访问令牌登录。如果存在恶意获取令牌的风险,则必须为令牌设置较短的到期期限,并使用获取新令牌的。刷新令牌应该在服务器端持久化。如果刷新令牌被破坏,它可能会失效(用户应该能够撤销对该客户端的访问)。或者,您可以向JWT注入一个安全的随机数,并将该随机数存储在服务器端,以对抗用户。当用户发送令牌时,必须根据数据库中的安全随机数验证JWT中的安全随机数。然后,您可以通过更改数据库中的安全随机数使令牌无效