再见,Spring Security OAuth!!
点击关注公众号,Java干货及时送达
官宣新品
最近,Spring 官方又推出了《Spring Authorization Server》项目:
本次将 《Spring Authorization Server》项目正式上线,去掉了之前的体验状态,此举恰逢 0.2.0 版本发布,这也是第一个正式支持的生产就绪版本。
项目前身
首先来看一则 2019 年 的 Spring Security OAuth 2.0 路线更新图说明:
Spring Security OAuth 2.0 Roadmap Update
https://spring.io/blog/2019/11/14/spring-security-oauth-2-0-roadmap-update
大概的意思是:
Spring Security 项目用来支持授权服务器不是一个合适的选择,因为授权服务器需要一个库来进行构建,而 Spring Security 作为一个框架,不适合用来参与构建库或产品,市面上又有大量商业和开源授权服务器可以选择,因此,Spring Security 团队决定不再提供对授权服务器的支持。。
另外,在 2018 年初,Spring 就宣布了 Spring Security OAuth 项目正式进入维护模式,并且计划在不久的将来会彻底停止支持。
我们进入 Spring Security OAuth 项目主页:
https://projects.spring.io/spring-security-oauth/docs/oauth2.html
可以看到弃用通知:
Spring Security OAuth 项目已经被弃用了,最新的 OAuth 2.0 支持由 Spring Security 项目提供,有关更多详细信息,请参阅 OAuth 2.0 迁移指南:
https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Migration-Guide
即使 Spring Security OAuth 项目被 Spring Security 项目接管了,但 Spring Security 依旧不再包含对授权服务器的支持,你可以用商用的、开源的,或者自己搭建,反正 Spring 不再提供了,纯粹的只做框架了。。
项目背景
Spring 弃用授权服务器之后,社区、博客上的反馈、Gitter 中的讨论和 GitHub 中的评论反响热烈,一致强烈要求 Spring 提供对授权服务器的支持,Spring 估计也是顶不住压力了,或者真的意识到 Spring 生态确实是需要授权服务器这玩意。。
于是在 2020/04/15 这天,Spring 团队又宣布新起《Spring Authorization Server》项目,以继续提供对 Spring 授权服务器的支持。
https://spring.io/blog/2020/04/15/announcing-the-spring-authorization-server
这是由 Spring Security 团队领导的社区驱动项目,专注于为 Spring 社区提供授权服务器支持,该项目也开始替换了 Spring Security OAuth 提供的对于 Authorization Server 的支持。
完整功能列表:
The OAuth 2.0 Authorization Framework Authorization Code Grant HTTP Basic HTTP POST Authorization Code Client Credentials Refresh Token Authorization Grant Client Authentication User Consent Proof Key for Code Exchange by OAuth Public Clients (PKCE) OAuth 2.0 Token Revocation OAuth 2.0 Token Introspection OAuth 2.0 Authorization Server Metadata JSON Web Token (JWT) JSON Web Signature (JWS) JSON Web Key (JWK) OpenID Connect Core 1.0 Authorization Code Flow OpenID Connect Discovery 1.0 Provider Configuration Endpoint OpenID Connect Dynamic Client Registration 1.0 Client Registration Endpoint
即将到来的功能:
JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens OpenID Connect Core 1.0 UserInfo Endpoint OAuth 2.0 Token Exchange
这部分这里就不展开介绍了,后续栈长有时间会进行详细的理论+实战,关注公众号Java技术栈,第一时间推送。
为什么需要授权服务器?
这个你需要了解下 OAuth2.0 协议,它定义了四个角色:
Client:客户端,即请求授权用户资源的第三方应用程序;
Resource Owner:资源所有者,授权 Client 访问其帐户的用户;
Authorization server: 授权服务器,即服务商用于处理用户授权认证的服务器;
Resource server:资源服务器,即服务商提供用户受保护资源的服务器;
另外,OAuth2.0 支持四种运行模式:
授权码模式 隐式授权模式 密码模式 客户端模式
但一般我们使用较多的还是授权码模式。
授权码模式运行流程如下:
流程说明:
1、客户端请求用户给予授权;
2、用户同意给予客户端授权,并返回授权码;
3、客户端通过授权码再向认证服务器申请令牌;
4、认证服务器对客户端进行认证并返回令牌;
5、客户端使用令牌向资源服务器获取资源;
6、资源服务器验证令牌,并返回资源;
如流程所示,OAuth2 授权码模式的运行流程就少不了 Authorization Server(授权服务器),授权服务器用于授权认证,以及对 Access Token(令牌)的发放、管理、吊销等。
授权服务器可以和资源服务器在不同的服务器,也可以是同一台服务器。
总结
Spring 官方在 2020/04 才宣布搞《Spring Authorization Server》这个项目,才一年多时间就可以上线使用了,效率杠杠的啊,团队的目标也很明确,就是要使《Spring Authorization Server》项目最终成为 Java 平台上 OAuth 2 Authorization Server 事实上的标准框架。
好了,今天的分享就到这了,后面栈长还会陆续解读更多的 Java 主流技术,关注公众号Java技术栈第一时间推送。另外,我也将 Spring 系列主流面试题和参考答案都整理好了,关注公众号Java技术栈回复关键字 "面试" 进行刷题。
最后,觉得我的文章对你用收获的话,动动小手,给个在看、转发,原创不易,栈长需要你的鼓励。
版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重大家的劳动成果和知识产权,抄袭必究。
关注Java技术栈看更多干货