抢先一步
VMware 提供培训和认证,助您突飞猛进。
了解更多我很高兴代表社区宣布发布 Spring Security 5.0.0 M1。此版本包含错误修复、新功能,并基于 Spring Framework 5.0.0 RC1。该版本的亮点包括
沿袭 Spring Framework 5.0 的主要主题之一,Spring Security 5.0 将通过构建在 Spring 的响应式支持之上,增加对响应式应用程序的支持。第一个里程碑版本侧重于建立主要基础设施。
在 Spring Security 示例中可以找到使用 Spring Security 保护 Spring WebFlux 应用程序的完整示例,路径为 hellowebflux。
下面是代码的快速亮点
@Bean
WebFilter springSecurityFilterChain(ReactiveAuthenticationManager manager) {
HttpSecurity http = http();
http.authenticationManager(manager);
http.httpBasic();
AuthorizeExchangeBuilder authorize = http.authorizeExchange();
authorize.antMatchers("/admin/**").hasRole("ADMIN");
authorize.antMatchers("/users/{user}/**").access(this::currentUserMatchesPath);
authorize.anyExchange().authenticated();
return http.build();
}
如果您使用过 Spring Security 基于 Web 的授权支持,这段代码应该看起来很熟悉。
需要注意的一点是,在响应式应用程序中,access
允许注入一个接口而不是一个 String
。这使得可以使用 lambda 表达式或方法引用来实现自定义授权逻辑。例如,currentUserMatchesPath
看起来像这样
Mono<AuthorizationDecision> currentUserMatchesPath(
Mono<Authentication> authentication, AuthorizationContext context) {
return authentication
.map( a -> context.getVariables().get("user").equals(a.getName()))
.map( granted -> new AuthorizationDecision(granted));
}
显然,我们可以直接使用 lambda 表达式而不是方法引用,但这(尤其是当规则更多时)更易于阅读。
我们非常高兴能在 Spring Security 5 中引入对 OAuth 2.0 授权框架和 OpenID Connect 1.0 的新支持。M1 版本中的初步支持主要侧重于 OAuth 客户端角色,提供针对 OAuth 2.0 提供商(例如,Facebook)或 OpenID Connect 1.0 提供商(例如,Google)对最终用户进行身份验证的能力。
OAuth 2.0 登录功能基本上实现了“使用 Google 登录”或“使用 Facebook 登录”的用例,并通过利用 授权码授权(Authorization Code Grant)流程实现,该流程在 OAuth 2.0 授权框架中指定。
学习如何使用OAuth 2.0 登录的最佳方法是遵循指南和相关的示例。该指南将引导您完成使用 Google、GitHub、Facebook 和 Okta 设置OAuth 2.0 登录的过程。
对 OAuth 的支持目前分散在以下 Spring 项目中
在 Spring Security 5 中,未来的主要方向是将对 OAuth 2.0 授权框架、OpenID Connect 1.0、JWT 以及 JOSE (JWS/JWE/JWK) 的一流支持构建到 Spring Security 本身中。目标是让 Spring Security “容纳”低级协议流程的核心逻辑,例如“授权码授权”流程,然后需要它的各种 Spring 项目(例如 Spring Social)可以重用该逻辑。许多协议流程逻辑已在 Spring Security OAuth 中实现,但是,我们决定在将其整合到 Spring Security 本身中时进行重写。话虽如此,Spring Security OAuth 项目目前处于维护模式,我们正在限制新功能,只专注于错误修复和次要增强。我们未来的工作将集中在 Spring Security 内部构建支持。
新增的 OAuth 2.0 和 OpenID Connect 1.0 支持的最终目标是在本质上复杂的低级协议流程之上提供易于使用的抽象。为了快速推进并保持同步,我们在内部实现中利用了 Nimbus OAuth 2.0 和 OIDC SDK。在我们进行重写之前,一个关键的初步步骤是,我们研究和评估了开源社区中可用的现有 OAuth 2.0 和 OpenID Connect 1.0 Java 库,并将我们的发现记录在此处。评估阶段的结果是,我们发现 Nimbus OAuth 2.0 和 OIDC SDK 是目前最成熟和最全面的 Java 库,因为它为所有相关规范提供了广泛的支持。
在即将发布的 5.0.0 M2 版本中,我们计划进一步构建对基于响应式的安全以及 OAuth 2.0 和 OpenID Connect 1.0 的支持。我们非常感谢您对这些新功能提供的任何反馈;如果您希望优先处理任何事项,请创建问题。