Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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 使用nonce进行无状态cookie身份验证的最佳实践_Java_Php_Jakarta Ee_Nonce - Fatal编程技术网

Java 使用nonce进行无状态cookie身份验证的最佳实践

Java 使用nonce进行无状态cookie身份验证的最佳实践,java,php,jakarta-ee,nonce,Java,Php,Jakarta Ee,Nonce,我一直在读关于使用cookie进行身份验证的文章。这似乎很有挑战性,因为cookie可能会从浏览器缓存中被盗,或者在HTTP消息中被截获 我想到用nonce来做这个。我喜欢它是因为有人偷了它,一旦真正的用户再次尝试访问WebApp,他就会失去访问权限。要想继续偷它,他必须离用户有点近 但我找不到合适的算法。Wordpress nonce实现使用用户id,它的身份验证cookie生成器有点复杂(我会继续阅读它,但我想要更简单的实现) 以下是我被迫使用的约束条件: 它不需要在DB或HD上编写,因为

我一直在读关于使用cookie进行身份验证的文章。这似乎很有挑战性,因为cookie可能会从浏览器缓存中被盗,或者在HTTP消息中被截获

我想到用nonce来做这个。我喜欢它是因为有人偷了它,一旦真正的用户再次尝试访问WebApp,他就会失去访问权限。要想继续偷它,他必须离用户有点近

但我找不到合适的算法。Wordpress nonce实现使用用户id,它的身份验证cookie生成器有点复杂(我会继续阅读它,但我想要更简单的实现)

以下是我被迫使用的约束条件:

  • 它不需要在DB或HD上编写,因为它不值得这么复杂
  • 它不能使用会话,它必须是无状态的,这意味着服务器不能保存任何类型的数据,所有数据(登录和nonce)必须通过cookie发送给客户端,客户端必须将cookie数据发送回
  • 在cookie中添加login是可以的,类似于“login | nonce”,因此当我收到cookie时,我可以将其子串为login和nonce,并验证它
  • 它必须在PHP和Javaservlet中实现!如果它使用其中任何一个的核心功能,我必须在另一个上实现该功能,或者找到替代功能,但它们不需要可互换
  • 它是一个nonce,因此对于每个HTTP响应,我都会生成一个新的nonce,它只会有效一次,如果再次尝试使用,它就会变得无效
  • 如果一个nonce只能在下一个请求中使用就好了,但我认为这需要将这个nonce存储在某个地方并检索它以进行比较,我仍然认为打破无状态是不值得的,所以我认为一个时间限制就足够了(时间限制意味着使用
    time()/($nonce\u-life/2)
    作为nonce的参数之一,因此它只能在这段时间内使用
我们的想法是使用一种无状态、仅限cookie的方式来知道谁登录了。$nonce_寿命可以是1天,因此用户在第一天访问期间登录,并一直登录到一天结束


正如我在Wordpress中所看到的,没有一种真正的方法可以知道一个nonce只使用一次,它所做的所有验证就是它是否在它的生命周期内被使用。因此,如果$nonce_寿命为1天,Wordpress nonce可以在这一天无限期地使用。我认为这是有风险的,也许最好将nonce存储在HD文件中,断开状态s、 但是确保一个nonce只使用一次。我可以使用一个简单的rand()来创建它。

我终于理解了Wordpress
\u auth\u cookie()
,我缺少了旧的PHP
extract()
explode()
。它的cookie值包含
$cookie=$user->user\u login.|'.$expiration.|'.$hash;
和$hash包含许多信息,如登录名、密码和过期时间


就像我想用“登录|暂时”做的那样,但它会增加过期时间。

一次只有一个有效的Nonce也意味着您不能同时使用多个选项卡。这太糟糕了。Nonce和无状态非常不一致。您必须有一个已使用的Nonce列表或一个当前有效的Nonce列表,否则服务器无法证明它是否是我们不管是不是ed。“Cookie身份验证”和“无状态”本质上是相互矛盾的。这完全是以假乱真。请看这篇文章:为什么要否定我和关闭?我回答了我的问题!!这就是我问题的答案!如果我回答了,怎么不能合理地回答呢?!