slo*_*lon 3 ssl spring-boot spring-cloud-security
我有一个带有 spring-cloud-security 的项目。它是用于 oauth 授权的 auth 服务器。过去运行良好。
我添加了带有配置的 ssl 支持的 spring 配置文件:
security:
require-ssl: true
server:
ssl:
key-store: dev.p12
key-store-password: devpass
keyStoreType: PKCS12
keyAlias: calc
Run Code Online (Sandbox Code Playgroud)
使用此配置文件,身份验证工作正常,但是当我禁用它并通过 http 登录时,身份验证失败。
o.s.security.web.csrf.CsrfFilter : Invalid CSRF token found for http://localhost:8090/login
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
您的服务器启用了CSRF。在@EnableWebSecurity为中注明注释将默认启用CSRF文档。
使用 Java 配置默认启用 CSRF 保护。
有两种方法来“解决”这个,要么禁用CSRF或提交CSRF令牌做的时候PATCH,POST,PUT,和DELETE行动。
要禁用 CSRF,请在 Spring Security 配置中执行此操作
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
}
}
Run Code Online (Sandbox Code Playgroud)
要提交 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>
Run Code Online (Sandbox Code Playgroud)
取自 Spring Cross Site Request Forgery (CSRF) 文档的所有示例
在考虑是否禁用 CSRF 时,请考虑 Spring 的建议
[...] 对普通用户可以由浏览器处理的任何请求使用 CSRF 保护。如果您仅创建供非浏览器客户端使用的服务,您可能希望禁用 CSRF 保护。
| 归档时间: |
|
| 查看次数: |
11403 次 |
| 最近记录: |