我正在使用Spring Security和java配置
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/*").hasRole("ADMIN")
.and()
.addFilterAfter(new CsrfTokenResponseHeaderBindingFilter(), CsrfFilter.class)
.exceptionHandling()
.authenticationEntryPoint(restAuthenticationEntryPoint)
.and()
.formLogin()
.successHandler(authenticationSuccessHandler)
.failureHandler(new SimpleUrlAuthenticationFailureHandler());
我正在使用PostMan测试我的REST服务。我成功获取了“csrf令牌”,并且我能够使用请求头中的X-csrf-token登录。但在登录后,当我点击post请求时(我在请求头中包含了用于登录post请求的相同令牌),我会收到以下错误消息:
HTTP状态403-无法验证提供的CSRF令牌,因为找不到您的会话。
谁能告诉我我做错了什么吗。
禁用CSRF保护是一个坏主意。
Spring将在每个请求后自动生成一个新的CSRF令牌,您需要将其包含在所有具有副作用的HTTP请求中(PUT、POST、PATCH、DELETE)
在Postman中,您可以在每个请求中使用测试将CSRF令牌存储在全局中,例如在使用CookieCsrfTokenRepository
时
pm.globals.set("xsrf-token", postman.getResponseCookie("XSRF-TOKEN").value);
然后将其作为标题包含在key和value中。
试试这个:@覆盖受保护的布尔值sameSource禁用(){返回true;}
@Configuration
public class WebSocketSecurityConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer {
...
// Determines if a CSRF token is required for connecting. This protects against remote
// sites from connecting to the application and being able to read/write data over the
// connection. The default is false (the token is required).
@Override
protected boolean sameOriginDisabled() {
return true;
}
}
来源:WebSocket安全:禁用WebSocket内的CSRF
根据spring.io:
什么时候应该使用CSRF保护?我们的建议是对普通用户可以通过浏览器处理的任何请求使用CSRF保护。如果您只创建非浏览器客户端使用的服务,您可能希望禁用CSRF保护。
所以要禁用它:
@Configuration
public class RestSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
}
}
注意:默认情况下,通过Java配置启用CSRF保护
问题内容: 我在CSRF令牌方面遇到问题。当我提交表单时,正在生成一个新的表单,但是我想我正在生成两个不同的令牌,这有点困惑。还有一个名为的令牌,因此我在开发人员工具中看到了两个不同的cookie(XSRF- TOKEN和_csrf),发布后它们没有变化。 我想要做的是为每个帖子请求生成一个新令牌,并检查它是否有效。我知道为了安全起见应该这样做,但是我坚持了下来。 漫长的一天,我是Express和
问题内容: 在我的rails应用程序中,我在向api的ajax发布中收到“警告:无法验证CSRF令牌的真实性”。 app / views / layouts / application.html.haml : ajax发布 : 问题答案: 假设您已使用Rails 标记设置了CSRF令牌,则请求的令牌将在meta标记中可用: 由于使用的是jQuery,因此可以通过为密钥调用以下值来将令牌传递给AJA
我正在做简单的身份验证(没有ajax或api),并得到一个CSRF真实性令牌的错误。检查下面的POST请求 根url指向,如下所示 Sign_in页面生成的html视图如下所示:
我试图张贴使用ajax在laravel 5.我得到CSRF令牌不匹配异常。我环顾四周,发现可能存在这样的问题,但在这种情况下,我确实包括了所有必要的代码。 请看一下我的代码。 看法 我已经在隐藏输入中提供了令牌,并将其包含在我的帖子中。 我有一个元在头如下。 下面是我的控制器。 这个只是测试用的,这里没什么。我的路线如下 请帮我解决这个问题 这是日志中的输出。 以下是我的浏览器控制台帖子标题和页面
重复的步骤 登录 注销 从服务器登录并获取422无法验证CSRF令牌的真实性 Gems 设计3.5.2 设计令牌\u验证0.1.36 根据其他线程,解决方案是在注销时返回一个新的csrf令牌,然后在客户端的注销成功处理程序中,将XSRF-TOKEN的cookie设置为接收的令牌。我使用的代码如下。有人能告诉我为什么它不起作用吗?最后一个登录请求看起来使用了新的令牌,所以棱角分明的看起来像是从coo