领先一步
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 就说明了这一点。这意味着身份验证机制也可以轻松扩展。
这对你意味着什么?假设你有一个更复杂的安全配置,并希望在公司内部共享它。你可以允许工程师在任何地方复制粘贴配置。或者,你可以创建自己的 SecurityConfigurerAdapter 实现,让开发人员专注于你公司的自定义 DSL。
我们提供的示例配置非常简单,但它未能展示在更实际情况下如何操作。在我们觉得 OAuth 支持进一步巩固之前,我们不会撰写关于这些内容的博客。但是,如果你希望尝试一下,还有其他示例可以帮助你入门。
如果你遇到 Bug、有改进想法等,请不要犹豫提出来!我们希望听取你的意见,以便在代码正式发布之前确保一切正确。尽早试用新功能是回馈社区的一种良好而简单的方式。这也确保了你想要的功能存在并能按你期望的方式工作。
请将任何问题或功能请求记录到 Spring Security JIRA 中,类别选择 "Java Config"。记录 JIRA 后,我们鼓励(但非强制)你提交拉取请求来提供你的修改。你可以在 贡献者指南 中阅读更多关于如何操作的信息。
如果你对如何做某事有疑问,请使用 Spring Security 论坛 或在 Stack Overflow 上使用 spring-security 标签提问(我会密切关注这些地方)。如果你对这篇博客有具体的评论或问题,欢迎留言。使用适当的工具将有助于让每个人都更容易。
Spring Security Java 配置使用了 OAuth 支持作为概念验证,以确保其已准备好进行扩展。未来,OAuth 支持将得到巩固,并成为 XML 配置的替代方案。在我的上一篇博文中,我讨论了 Spring Security Java 配置的可读性。