Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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令牌反序列化cookie无法正确反序列化_Java_Spring_Spring Boot_Kotlin_Spring Security - Fatal编程技术网

Java 身份验证期间使用JWT令牌反序列化cookie无法正确反序列化

Java 身份验证期间使用JWT令牌反序列化cookie无法正确反序列化,java,spring,spring-boot,kotlin,spring-security,Java,Spring,Spring Boot,Kotlin,Spring Security,我在使用Spring Security为无状态应用程序反序列化cookie时遇到问题 呼叫https://localhost:8080/login和成功身份验证将生成一个cookie,其中包含JWT令牌和一些其他字段,尤其是安全,HttpOnly,SameSite=None。例如,它看起来如下所示(令牌仅在本地工作,已过期且不包含有用信息,可以随意窃取): 我使用了自签名证书和.jks文件将https添加到本地主机调用中,以测试身份验证流。我还测试了这款饼干在《失眠/邮递员》中的设置是否正确 我

我在使用Spring Security为无状态应用程序反序列化cookie时遇到问题

呼叫
https://localhost:8080/login
和成功身份验证将生成一个cookie,其中包含JWT令牌和一些其他字段,尤其是
安全
HttpOnly
SameSite=None
。例如,它看起来如下所示(令牌仅在本地工作,已过期且不包含有用信息,可以随意窃取):

我使用了自签名证书和.jks文件将https添加到本地主机调用中,以测试身份验证流。我还测试了这款饼干在《失眠/邮递员》中的设置是否正确

我的Spring安全配置现在要求每个请求都有一个带有有效令牌的cookie。这个很好用。但是,当我试图要求令牌在请求中具有与设置时相同的字段时,我遇到了一个问题:

require(cookieContainingToken.isHttpOnly
                && cookieContainingToken.secure
                && cookieContainingToken.name == "token")
使用调试器,我可以看到cookie存在并包含正确的令牌,但不再是httpOnly且不安全。路径为空,域为空,最大值为-1。此外,Spring使用的
javax.servlet.http.Cookie
类似乎没有sameSite属性。显然,cookie的反序列化并不完全有效


有没有办法使传入请求上的cookie反序列化正常工作?或者我应该简单地忽略传入请求的这些属性而只是验证令牌吗?

HttpOnly
Max Age
Secure
si的相关性而言,这些属性的存在有助于减轻主要来自客户端的风险,比如客户端脚本访问受保护的cookie(如果浏览器支持),用于通过安全通信进行传输,并通过Javascript限制访问

你肯定需要像我们的spring boot应用一样在源代码处设置这些。我不知道操纵cookie道具背后的原因,但无论如何,除了jwt令牌声明和签名之外,你不会验证这些道具

签名jwt的美妙之处在于,即使有人能够窃取它,除非他拥有签名密钥,否则它也无法使用。因此,您的代币在您身边是安全的

IMHO JWT不是为客户端读取/解密或使用它而设计的,只是您应该接收它,从而验证调用方

为了增加您的安全性,您可以使用
org.jasypt.util.text.StrongTextEncryptor
对您的
签名jwt
进行加密,这样它对除您之外的任何人都毫无价值


此外,如果您使用,
access
refresh
令牌,您可以保留不同的签名密钥。

HttpOnly
Max Age
Secure
的相关性而言,这些设置有助于减轻主要来自客户端的风险,如客户端脚本访问g受保护的cookie(如果浏览器支持),用于通过安全通信进行传输,并通过Javascript限制访问

你肯定需要像我们的spring boot应用一样在源代码处设置这些。我不知道操纵cookie道具背后的原因,但无论如何,除了jwt令牌声明和签名之外,你不会验证这些道具

签名jwt的美妙之处在于,即使有人能够窃取它,除非他拥有签名密钥,否则它也无法使用。因此,您的代币在您身边是安全的

IMHO JWT不是为客户端读取/解密或使用它而设计的,只是您应该接收它,从而验证调用方

为了增加您的安全性,您可以使用
org.jasypt.util.text.StrongTextEncryptor
对您的
签名jwt
进行加密,这样它对除您之外的任何人都毫无价值

此外,如果使用,您还可以为
access
refresh
令牌保留不同的签名密钥

require(cookieContainingToken.isHttpOnly
                && cookieContainingToken.secure
                && cookieContainingToken.name == "token")