使用 Spring Security 保护 REST 端点
Posted
技术标签:
【中文标题】使用 Spring Security 保护 REST 端点【英文标题】:Securing REST endpoint using spring security 【发布时间】:2016-03-04 08:11:26 【问题描述】:我正在尝试为 REST 端点提供安全性。我正在遵循this page 的指示。在我的情况下,我没有视图,因此我没有创建控制器来指定视图,也没有在我的 AppConfig.java 中添加 viewResolver
实施后,它会在调用安全 REST 端点时正确显示拒绝访问错误。但是,即使我在请求标头中指定了用户名/密码,我也会收到拒绝访问错误。我正在测试邮递员在基本身份验证中设置用户名/密码。我错过了什么?
【问题讨论】:
您可以先发布失败的请求和您正在提交的 HTTP 请求的调试日志 您能发布您的部分代码吗? @Milkyway 出于安全原因,我不愿意发布代码,但出于测试目的,可以从我提到的链接中使用代码,在那篇文章中必须忽略 UI 相关代码。 【参考方案1】:您遵循的示例是实现基于表单的身份验证。 为了将其更改为 http auth
(更适合 REST 服务),您需要查找以下 @987654323您的 security.xml 中的 @ 标记:
<form-login
login-page="/login"
default-target-url="/welcome"
authentication-failure-url="/login?error"
username-parameter="username"
password-parameter="password" />
只需将其更改为空的http-basic
标签:
<http-basic />
如果您没有更改任何其他内容,那么它应该可以完美运行。您还可以通过尝试访问您的页面从浏览器测试您的设置。如果您正确配置了所有内容,这次您将得到一个弹出窗口,而不是表单。这将是欢迎您的基于 HTTP 的身份验证。
由于您可能正在使用基于 Java 的配置,因此此更改的等效项是替换:
http.authorizeRequests()
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.antMatchers("/dba/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_DBA')")
.and().formLogin();
与:
http.authorizeRequests()
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.antMatchers("/dba/**").access("hasRole('ROLE_ADMIN') or hasRole('ROLE_DBA')")
.and().httpBasic();
【讨论】:
虽然您的答案是正确的,但告诉他将 SecurityConfig.java 文件中的 .formLogin() 替换为 .httpBasic() 可能会更有帮助,因为他使用的是 JavaConfig 而不是 xml- s. 你是对的。我想这是很明显的补充,但为了清楚起见,我把它放在那里。 你好。我怎么能在弹簧靴中做同样的事情。? , 因为我没有任何配置文件。只使用注释。你能告诉我在 Spring Boot 中该怎么做吗?请参考问题 - ***.com/questions/49728473/…以上是关于使用 Spring Security 保护 REST 端点的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Security 保护 REST API
使用 spring-security-oauth2 2.0.5.RELEASE 保护 Spring REST 服务
如何使用 Spring Security 和 Angularjs 保护 Spring Rest 服务?
使用 Spring Security Rest 插件保护 Grails Rest Api
Spring starter security or spring cloud security 如何保护整个微服务架构?