Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 如何在登录时获取csrf令牌?_Java_Spring Security_Postman - Fatal编程技术网

Java 如何在登录时获取csrf令牌?

Java 如何在登录时获取csrf令牌?,java,spring-security,postman,Java,Spring Security,Postman,使用Spring安全性,我的理解是,您可以在GET上获取csrf令牌,然后将其包含在任何后续POST、PUT、DELETE请求的头中。但是登录是一个帖子!那么,如何获取csrf令牌以便将其包含在登录请求的头中呢 我不想为登录路由禁用csrf 如果您使用的是springboot,那么csrf令牌将由CsrfRequestDataValueProcessor自动添加到响应中。Springboot默认情况下不会为GET添加csrf令牌,但对于POST,它将在修改状态时添加。要将令牌用于jsp实例,请执

使用Spring安全性,我的理解是,您可以在GET上获取csrf令牌,然后将其包含在任何后续POST、PUT、DELETE请求的头中。但是登录是一个帖子!那么,如何获取csrf令牌以便将其包含在登录请求的头中呢


我不想为登录路由禁用csrf

如果您使用的是springboot,那么csrf令牌将由
CsrfRequestDataValueProcessor
自动添加到响应中。Springboot默认情况下不会为GET添加csrf令牌,但对于POST,它将在修改状态时添加。要将令牌用于jsp实例,请执行以下操作:

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}"
    method="post">
  <input type="submit"
    value="Log out" />
  <input type="hidden"
    name="${_csrf.parameterName}"
    value="${_csrf.token}"/>
</form>
注意:这两个示例都来自文档本身


正式。

登录时不需要csrf。您已被用户名和密码授权。您可以在设置中忽略该路径

我不同意,多个联机线程共享不保护登录的风险。您的csrf令牌是代表您的令牌,而不是其他令牌。因此,您可以通过交换凭据来获取该令牌。这是使用您的凭据(用户名/密码)向服务器发出的第一个请求,这是登录表单。获得csrf令牌的唯一等待是您的用户名和密码。若攻击者想用csrf令牌欺骗你们,他必须知道你们的用户名和密码。若攻击者知道,那个么他可以自己登录。我错了。你是对的。这里有更多的阅读资料供感兴趣的人阅读。基本上,如果您使用的是cookie,则需要使用api进行csrf保护。如果没有,您就不需要它。(不包括HTTP基本身份验证)。很高兴看到它对您有所帮助。我在这里发布之前阅读了文档。根据文档,“\u csrf\u头”是“X-csrf-TOKEN”的变量。但是“_csrf”是什么变量呢。我使用的是api,而不是mvc模型。因此,我的登录是我第一次与服务器对话。我如何知道_csrf值?我可以点击它一次,得到一个403,然后将cookie从403复制到后续的请求头。这很有效。但是很明显,我不希望每次登录都有两个请求,期望第一个总是403。是的,如果是这样的话,就像没有显示登录页面一样。然后,您可以从csrf保护路径中删除登录RESTURL。您已经有用户名和密码被发送过来进行验证,spring建议在普通用户通过浏览器使用网站的情况下使用csrf保护。如果您有一个rest api,那么您可以选择不使用它,因为这样做可能没有危险。@KyleLaster CSRF是用于跨站点请求伪造预防的权利。因此,如果您没有可用于将用户重定向到恶意网站的浏览器公开ui,我看不出csrf如何影响您用于登录的rest api。此链接将解释为什么有必要这样做。如果您使用cookies来记住令牌,则需要csrf保护@KyleLaster为什么在第一个位置使用带有rest端点的cookie?Rest API应该是无状态的。。即使您有一个cookie来存储csrf令牌,RESTAPI通常也有其他机制,如用于验证用户的承载令牌或jwt令牌,因此可能不需要csrf。此外,链接中提供的用例并不适用于所有人,它完全取决于应用程序的体系结构。
$(function () {
  var token = $("meta[name='_csrf']").attr("content");
  var header = $("meta[name='_csrf_header']").attr("content");
  $(document).ajaxSend(function(e, xhr, options) {
    xhr.setRequestHeader(header, token);
  });
});