领先一步
VMware 提供培训和认证,助您快速提升技能。
了解更多我代表社区高兴地宣布 Spring Security 5.1.0.M2 发布。此版本已修复 100 多个问题。
一如既往,我们期待收到您的 反馈!您可以在下面找到亮点
已添加对 OAuth2 资源服务器的基本支持。请参阅 oauth2resourceserver
用户现在可以使用 OAuth 2.0 授权码授权方式获取访问令牌。请参阅 authcodegrant 示例。
现在内置了对 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 进行身份验证。请参阅 oauth2login-webflux 获取示例。
以前,想要与 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
,已添加对自定义授权请求的支持。例如,如果用户想要向请求中添加/删除范围,他们现在可以轻松地做到这一点。
当使用单个提供程序配置 OAuth2/OIDC 登录时,默认设置已更改为立即重定向到提供程序,而不是仅显示一个提供程序。
默认登录页面已现代化为 html5,外观更美观。
自从添加 CSRF 注销保护以来,默认应用程序无法注销。现在,如果正在使用默认登录页面(即未配置登录页面),则还有一个默认注销页面显示注销表单。
用户现在可以通过将其公开为@Bean
来配置使用的默认 RequestCache。HttpSessionRequestCache
已更新,不再需要其值为DefaultRequestCache
。
Spring Security 5.1 为 Spring Security 添加了跨站追踪和HTTP动词篡改防护。
用户可以实现UserDetailsPasswordService并将其公开为@Bean
,在身份验证成功后,Spring Security 的DaoAuthenticationProvider
将
检查密码存储机制是否需要使用新的PasswordEncoder.upgradeEncoding方法进行更新。例如,如果它使用 sha256 编码,则 Spring Security 默认会建议将其升级到 BCrypt。
如果需要升级密码编码,它将使用当前的PasswordEncoder
对密码进行编码。
UserDetails
和新密码将传递给UserDetailsPasswordService
,以便可以使用升级后的密码编码保存它。
我们已将依赖项更新到最新版本,以确保我们的传递依赖项是最新的。