Spring Security 5.1.0.M2 发布

发布 | Rob Winch | 2018 年 7 月 30 日 | ...

我很高兴代表社区宣布 Spring Security 5.1.0.M2 发布。此版本关闭了 100 多个工单

一如既往,我们期待您的反馈!您可以在下方找到亮点:

OAuth2

OAuth2 Resource Server

已添加对 OAuth2 Resource Servers 的基本支持。参见 oauth2resourceserver

Authorization Code Flow

用户现在可以使用 OAuth 2.0 授权码模式获取访问令牌。参见 authcodegrant 示例。

WebClient 和 OAuth2 支持

现在内置了对 OAuth2 和 WebClient 的支持。该支持允许:

  • 将访问令牌添加到请求中

  • 访问令牌过期时自动刷新

  • 解析要使用的访问令牌

例如,在 Servlet 环境中,您可以像这样配置一个 Bean:

@Bean
WebClient webClient(OAuth2AuthorizedClientRepository repository) {
    ServletOAuth2AuthorizedClientExchangeFilterFunction filter =
        new ServletOAuth2AuthorizedClientExchangeFilterFunction(repository);
    return WebClient.builder()
        .filter(new OAuth2AuthorizedClientExchangeFilterFunction())
        .apply(filter.oauth2Configuration())
        .build();
 }

现在您可以通过多种不同的方式添加 OAuth 令牌。如果需要,您可以使用 Spring MVC 支持解析 OAuth2AuthorizedClient。如果授权服务器返回了刷新令牌且访问令牌即将过期,Spring Security 将透明地更新访问令牌并提交更新后的访问令牌。

@GetMapping("/users")
Mono<String> users(@RegisteredOAuth2AuthorizedClient("client-id")
        OAuth2AuthorizedClient authorizedClient) {
    return this.webClient.get()
        .uri("https://api.example.com/user")
        .attributes(oauth2AuthorizedClient(authorizedClient))
        .retrieve()
        .bodyToMono(String.class);
}

您还可以通过 WebClient 解析访问令牌。例如:

Mono<String> users() {
    return this.webClient.get()
        .uri("https://api.example.com/user")
        .attributes(clientRegistrationId("client-id"))
        .retrieve()
        .bodyToMono(String.class);
}

如果您使用 OAuth2 登录或 OIDC 进行了身份验证,则可以在无需用户交互的情况下应用默认访问令牌。

Mono<String> users() {
    // if Authenticated with OIDC
    // OAuth2 Log In use the access token associated to log in
    return this.webClient.get()
        .uri("https://api.example.com/user")
        .retrieve()
        .bodyToMono(String.class);
}

WebFlux OAuth2 登录支持 OIDC

WebFlux 应用现在可以使用 OAuth2 和 OIDC 进行身份验证。参见 oauth2login-webflux 示例。

从 OIDC 发现创建 ClientRegistration 的能力

之前,希望与 OIDC 提供商集成的用户需要配置所有端点。例如,在 Spring Boot 中看起来像这样:

spring:
  security:
    oauth2:
      client:
        registration:
          okta:
            client-id: okta-client-id
            client-secret: okta-client-secret
        provider:
          okta:
            authorization-uri: https://foo.oktapreview.com/oauth2/v1/authorize
            token-uri: https://foo.oktapreview.com/oauth2/v1/token
            user-info-uri: https://foo.oktapreview.com/oauth2/v1/userinfo
            user-name-attribute: sub
            jwk-set-uri: https://foo.oktapreview.com/oauth2/v1/keys

现在用户只需配置发行者 uri 即可。例如:

spring:
  security:
    oauth2:
      client:
        registration:
          okta:
            client-id: okta-client-id
            client-secret: okta-client-secret
        provider:
          okta:
            issuer-uri: https://foo.oktapreview.com/oauth2/default/

支持自定义授权请求

通过添加 OAuth2AuthorizationRequestResolver,现已支持自定义授权请求。例如,如果用户想从请求中添加/删除作用域,现在可以轻松实现。

单一 ClientRegistration 现在会在登录时重定向

当使用单一提供商配置 OAuth2 / OIDC 登录时,默认行为已从仅显示一个提供商更改为立即重定向到该提供商。

配置改进

现代化默认登录页面

默认登录页面已现代化为 HTML5,使其更具视觉吸引力。

默认注销页面

由于添加了 CSRF 注销保护,默认应用程序没有注销的方式。现在,如果正在使用默认登录页面(即未配置任何登录页面),那么也会有一个默认注销页面,该页面提供一个注销表单。

简化 RequestCache 配置

用户现在可以通过将其暴露为 @Bean 来配置使用的默认 RequestCache。HttpSessionRequestCache 已更新,不再要求其值必须是 DefaultRequestCache

强化您的应用

跨站追踪 & HTTP 动词篡改保护

Spring Security 5.1 添加了跨站追踪HTTP 动词篡改保护。

密码编码升级

用户可以实现 UserDetailsPasswordService 并将其暴露为 @Bean,在认证成功时,Spring Security 的 DaoAuthenticationProvider 将会:

  • 使用新的 PasswordEncoder.upgradeEncoding 方法检查密码存储机制是否需要更新。例如,如果密码使用 sha256 编码,则默认情况下 Spring Security 将建议将其升级到 BCrypt。

  • 如果密码编码需要升级,它将使用当前的 PasswordEncoder 对密码进行编码

  • UserDetails 和新密码将被传递给 UserDetailsPasswordService,以便使用升级后的密码编码保存。

依赖更新

我们已将依赖项更新到最新版本,以确保我们的传递依赖项也是最新的。

项目网站 | 参考文档 | 帮助

获取 Spring 邮件列表

通过 Spring 邮件列表保持联系

订阅

领先一步

VMware 提供培训和认证,助您快速进步。

了解更多

获得支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将到来的活动

查看 Spring 社区所有即将到来的活动。

查看全部