领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多我谨代表社区宣布 Spring Security 5.0.0 M1 的发布。此版本包含错误修复、新功能,并基于 Spring Framework 5.0.0 RC1。此版本的亮点包括
遵循 Spring Framework 5.0 的主要主题之一,Spring Security 5.0 将通过构建在 Spring 的响应式支持之上来添加对响应式应用程序的支持。第一个里程碑专注于建立主要的底层架构。
在 Spring Security 示例中,可以在 hellowebflux 找到使用 Spring Security 保护 Spring WebFlux 应用程序的完整示例。
下面可以找到代码的快速亮点
@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 登录”的用例,并通过利用 授权码授予 流程来实现,如 OAuth 2.0 授权框架 中所指定。
学习如何使用 *OAuth 2.0 登录* 的最佳起点是遵循 指南 和相关的 示例。本指南将引导您完成使用 Google、GitHub、Facebook 和 Okta 设置 *OAuth 2.0 登录* 的过程。
对 OAuth 的支持目前分散在以下 Spring 项目中
在 Spring Security 5 中,未来的主要方向是在 Spring Security 本身中构建对 OAuth 2.0 授权框架、OpenID Connect 1.0、JWT 和 JOSE(JWS/JWE/JWK)的一流支持。目标是让 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 构建更多支持。我们非常感谢您对这些新功能的任何反馈,如果您有任何希望优先考虑的事项,请创建一个 问题。