领先一步
VMware 提供培训和认证,以加快您的进度。
了解更多这是我的五篇系列博客文章的第四篇,介绍了 Spring Security Java 配置。在这篇文章中,我们将通过 Spring Security OAuth Java 配置支持来讨论如何扩展 Spring Security Java 配置。
虽然 Spring Security Java 配置对于非常基本的配置效果很好,但这只是一个概念验证。我们尚未确保 XML 命名空间中所有可用的功能都存在于其 Java 配置支持中。确保 Spring Security 的 Java 配置能够很好地与 Spring 扩展一起工作非常重要。但是,我们不想等到在扩展中实现所有配置功能后再发布 Spring Security Java 配置。将来,我们计划巩固 Spring Security OAuth Java 配置,但目前它更像是一个概念验证,而不是一个完整的解决方案。
Spring Security 的 OAuth Java 配置支持基本的 OAuth 2 服务器配置。其最简单的形式如下所示:
@Configuration
@EnableWebSecurity
public class HelloOAuth2ServerConfiguration
extends OAuth2ServerConfigurerAdapter {
private static final String RESOURCE_ID = "photos";
@Autowired
public void registerGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.apply(new InMemoryClientDetailsServiceConfigurer())
.withClient("my-client")
.resourceIds(RESOURCE_ID)
.authorizedGrantTypes("authorization_code","implicit")
.authorities("ROLE_USER")
.scopes("read","write")
.secret("secret");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeUrls()
.anyRequest().authenticated()
.and()
.apply(new OAuth2ServerConfigurer())
.resourceId(RESOURCE_ID);
}
}
通过此配置,我们现在能够处理 OAuth 请求。但是,它有一些限制,在许多情况下无法正常工作。
撇开这些问题不谈,让我们来看看发生了什么。OAuth2ServerConfigurer 是 SecurityConfigurer 的一个实例。在实现 SecurityConfigurer 时,建议扩展 SecurityConfigurerAdapter,它是 SecurityConfigurer 的基本实现。
通过允许 HttpSecurity 接受 SecurityConfigurer,我们可以添加扩展(如 OAuth),这些扩展可以更复杂的方式更新 HttpSecurity 对象。事实上,像 HttpSecurity.formLogin() 这样的方法也是使用 SecurityConfigurerAdapter 实现来实现的。不同之处在于它们是 Spring Security 核心模块的一部分,因此有一些方便的方法可以为我们执行 apply(SecurityConfigurerAdapter)。
我们不仅可以将 SecurityConfigurer 应用于 HttpSecurity 对象,还可以将其应用于 AuthenticationManagerBuilder。InMemoryClientDetailsServiceConfigurer 就说明了这一点。这意味着身份验证机制也可以轻松扩展。
这对您意味着什么?假设您有一个更复杂的 Security 配置,并希望在公司内部共享它。您可以允许工程师在任何地方复制粘贴配置。或者,您可以创建您自己的 SecurityConfigurerAdapter 实现,允许开发人员专注于您公司的自定义 DSL。
我们提供的示例配置非常简单,但它并没有说明在更实际的情况下该怎么做。在我们觉得 OAuth 支持得到进一步巩固之前,我们不会对此进行博客记录。但是,有一些额外的示例可以帮助您入门,如果您想尝试一下。
如果您遇到错误,有改进的想法等,请随时提出!我们想听听您的想法,以便确保在代码普遍可用之前将其纠正。尽早尝试新功能是回馈社区的一种简单而有效的方法。这也确保了您想要的特性存在并按照您认为应该的方式工作。
请在“Java 配置”类别下将任何问题或功能请求记录到Spring Security JIRA。记录 JIRA 后,我们鼓励(但不要求)您在拉取请求中提交更改。您可以在贡献者指南中阅读更多关于如何执行此操作的信息。
如果您对如何执行某些操作有疑问,请使用Spring Security 论坛或带有 spring-security 标签的 Stack Overflow(我将密切关注它们)。如果您对这篇博客有具体的评论或问题,请随时留下评论。使用合适的工具将使每个人都更容易。
Spring Security Java 配置使用 OAuth 支持作为概念验证,以确保它已准备好进行扩展。随着时间的推移,OAuth 支持将被巩固为 XML 配置的替代方案。在我的上一篇文章中,我讨论了 Spring Security Java 配置的可读性。