查看原文
其他

Spring Authorization Server 0.2.3发布,增加联合身份认证DEMO

程序猿DD 2022-05-14

The following article is from 码农小胖哥 Author 请关注星标

很快啊Spring Authorization Server又发新版本了,现在的版本是0.2.3。本次都有什么改动呢?我们来了解一下。

0.2.3版本特性

本次更新的新特性不少。

为公开客户端提供默认的设置

根据RFC6479,包含授权码(authorization_code)授权并且客户端认证方式ClientAuthenticationMethod只有一种,为none的客户端都是公开(Public)客户端,反之就是机密(Confidential)客户端。

0.2.3中,为公开的客户端提供了客户端默认配置ClientSettings

   if (this.clientSettings == null) {
    ClientSettings.Builder builder = ClientSettings.builder();
    if (isPublicClientType()) {
     // @formatter:off
     builder
       .requireProofKey(true)
       .requireAuthorizationConsent(true);
     // @formatter:on
    }
    this.clientSettings = builder.build();
   }

这里多说点,公开客户端现在不单纯是authorization_code模式授权,必须加上PKCE,关于什么是PKCE可以通过我的专栏[1]进行了解。

OAuth2ClientAuthenticationProvider被细分

Spring Authorization Server目前支持的客户端认证方式有:

  • client_secret_basic
  • client_secret_post
  • client_secret_jwt
  • private_key_jwt
  • none

之前由OAuth2ClientAuthenticationProvider 一手包办,现在职责分离了。

JwtClientAssertionAuthenticationProvider

负责private_key_jwtclient_secret_jwt,具体细节请关注我的专栏。目前胖哥已经实现了完整的private_key_jwt认证的DEMO[2]。

ClientSecretAuthenticationProvider

默认的client_secret_basicclient_secret_post由它负责。

PublicClientAuthenticationProvider

处理上面所说的公开客户端的认证方式。

InMemoryOAuth2AuthorizationService优化

主要优化了对未完成授权信息OAuth2Authorization存储的淘汰策略,如果内存中存储的数量超过100,会把最老存储的信息淘汰掉。

增加了联合身份的DEMO

Federated Identity Pattern (联合身份模式)举个例子,你同时对接了好几个身份提供商(IDP),你都需要跳不同的授权服务器页面并输入对应的密码,现在这些IDP可以都放在Spring Authorization Server下面,委托给Spring Authorization Server来处理身份认证授权。这样你不用跳来跳去了,只需要维护Spring Authorization ServerIDP的关系了。

本次增加了相关的DEMO,请注意该功能不是Spring Authorization Server本身自带的功能。

OAuth2TokenGenerator

0.2.3抽象了OAuth2Token的的生成模型:

@FunctionalInterface
public interface OAuth2TokenGenerator<T extends OAuth2Token> {
 
 @Nullable
 T generate(OAuth2TokenContext context);

}

OAuth2授权码使用统一的Token生成模型

授权码授权中的code的生成现在也需要由OAuth2TokenGenerator实现,实现类为OAuth2AuthorizationCodeGenerator

OAuth2刷新Token使用统一的Token生成模型

OAuth2刷新令牌 OAuth2RefreshToken现在同样需要由OAuth2TokenGenerator实现。

JWT的生成使用统一的模型

现在JWT的生成也由OAuth2TokenGenerator来实现,具体的实现类为JwtGenerator

支持不透明令牌

现在你可以自定义一个OAuth2TokenGenerator并注入到Spring IoC来实现自定义的令牌生成逻辑,这意味着不透明令牌也可以通过自定义来实现。

令牌自省过滤器配置现在可以自定义

0.2.3版本之前令牌自省[3]的配置由OAuth2AuthorizationServerConfigurer负责,现在它由独立的配置类OAuth2TokenIntrospectionEndpointConfigurer负责。

依赖升级

0.2.3也对部分的依赖进行了升级,具体为:

  • 更新到Reactor  2020.0.16
  • 更新到Spring Security 5.5.5
  • 更新到Spring Framework 5.3.16
  • 更新到Spring Boot 2.5.10

胖哥也将持续跟进,对依赖进行逐步升级。

参考资料

[1]我的专栏: https://blog.csdn.net/qq_35067322/category_11691173.html

[2]DEMO: https://gitee.com/felord/spring-security-oauth2-tutorial

[3]令牌自省的配置: https://felord.blog.csdn.net/article/details/123634847

最后,给大家推荐下DD好朋友小胖哥的专栏《Spring Security与OAuth2》(https://blog.csdn.net/qq_35067322/category_11691173.html

小胖哥也是一直专注与前沿技术的研究与分享的。与其他一些抄来抄去,洗来洗去的付费专栏不同,小胖哥的这个内容中有很多前沿的,其他专栏没有的内容。所以给大家重点推荐一下,正好在学习这块的小伙伴可以选择这个。

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取

推荐阅读

··································

你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书、创过业、国企4年互联网6年。10年前毕业加入宇宙行,工资不高、也不算太忙,业余坚持研究技术和做自己想做的东西。4年后离开国企,加入永辉互联网板块的创业团队,从开发、到架构、到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。

点击阅读原文,送你免费Spring Boot教程

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存