文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring 新的授权服务器 Spring Authorization Server 入门

2024-12-02 17:42

关注

11月8日,Spring官方已经强烈建议使用Spring Authorization Server替换已经过时的Spring Security OAuth2.0[1],距离Spring Security OAuth2.0结束生命周期还有小半年的时间,是时候做出改变了。目前Spring Authorization Server已经进入生产就绪阶段,是时候学习它了。今天跟着胖哥的节奏搞一搞Spring Authorization Server授权服务器框架。

目前Spring Security的体系

在目前的Spring Security 5.x中将OAuth2.0 Client和OAuth2.0 Resource Server进行了模块化。Spring Security是一定要引入的。

  1.  
  2.             org.springframework.boot 
  3.             spring-boot-starter-security 
  4.          

如果你要增加OAuth2.0 Client支持,可以引入:

  1.  
  2.       org.springframework.boot 
  3.       spring-boot-starter-oauth2-client 
  4.    

如果需要OAuth2.0 Resource Server支持,可以引入:

  1.  
  2.             org.springframework.boot 
  3.             spring-boot-starter-security 
  4.          

现在如果你要增加OAuth2.0 Authorization Server支持的话,额外引入下面的依赖就可以了:

  1.  
  2.             org.springframework.security 
  3.             spring-security-oauth2-authorization-server 
  4.         --  截至现在版本  --> 
  5.             0.2.0 
  6.          

至此OAuth2.0三大模块齐活了。

Spring Authorization Server

我们的重点还是回到Spring Authorization Server上,目前该项目已经具备生成就绪能力。研究了几天后,简单出了一个DEMO,来帮助希望学习该框架的同学来理解它。

DEMO的流程

本DEMO将对OAuth 2.0的授权码模式(authorization_code)进行演示。这里分两个项目;

用户首先通过/oauth2/authorization/{registrationId}端点向oauth2-client发起请求:

  1. GET /oauth2/authorization/felord HTTP/1.1 
  2. Host: 127.0.0.1:8080 

被OAuth2AuthorizationRequestRedirectFilter拦截后组装成下面的请求链接向授权服务器oauth2-server发起授权码授权:

  1. GET /oauth2/authorize?response_type=code&client_id=felord-client&scope=message.read%20message.write&state=0CI0ziUDEnqMgqW0nzRNRCzLrs-9IMbqJzGZ47Zb0gY%3D&redirect_uri=http://127.0.0.1:8080/foo/bar HTTP/1.1 
  2. Host: localhost:9000 

授权服务器oauth2-server拦截到该请求后,会先检查发起该请求的当前用户是否授权。如果没有授权就抛出401,跳到授权服务器的登录页面,然后用户执行了登录:

  1. POST /login HTTP/1.1 
  2. Host: localhost:9000 
  3. Content-Type: application/x-www-form-urlencoded 
  4.  
  5. username=felord&password=password&_csrf=301a7baf-9e9a-4b17-acd4-613c809bf7f5 

成功登录后进行了302跳转,继续执行/oauth2/authorize授权请求。这时会判断授权请求是否需要用户授权确认,在本DEMO中用户授权是需要二次确认的,会跳转到下面这个页面:

Spring Authorization Server授权确认页面

同意授权后,授权服务器会调用redirect_uri并携带一个code和state向oauth2-client发起请求:

  1. GET /foo/bar?code=MCSJnvhXNyjilBaCyw1sCrrArWk1bzsEdxe5Z3EFbkdLwp8ASmum62n4M7Tz45VNpp_16IWboBnXlgG3LEfgN7MQqkf0-vVZufGrQpvRioRcBbesAiawMt4cspTk06ca&state=-fRunxjpG0aziPXnfcW1Iw1Fy_5_NwlUAgxABPOfAb8= HTTP/1.1  
  2. Host: 127.0.0.1:8080 

oauth2-client的OAuth2AuthorizationCodeGrantFilter拦截到redirect_uri后向授权服务器发起/oauth2/token请求:

  1. POST /oauth2/token?grant_type=authorization_code&code=MCSJnvhXNyjilBaCyw1sCrrArWk1bzsEdxe5Z3EFbkdLwp8ASmum62n4M7Tz45VNpp_16IWboBnXlgG3LEfgN7MQqkf0-vVZufGrQpvRioRcBbesAiawMt4cspTk06ca&redirect_uri=https://127.0.0.1:8080/foo/bar HTTP/1.1 
  2. Host: localhost:9000 
  3. Authorization: Basic bWVzc2FnaW5nLWNsaWVudDpzZWNyZXQ= 

这里采用的认证方式是client-authentication-method: client_secret_basic方式。

授权服务器将Token返回给客户端,完成请求,认证客户端信息如下:

认证客户端信息

到此基于Spring Authorization Server整个授权码流程完成了。完整DEMO可关注公众号:码农小胖哥 回复 oauthserver获取。原创不易还请多多点赞、转发、再看。更多细节后面会持续跟进。

参考资料

[1]Spring Security OAuth2.0: https://spring.io/projects/spring-security-oauth

本文转载自微信公众号「码农小胖哥」,可以通过以下二维码关注。转载本文请联系码农小胖哥公众号。

 

来源:码农小胖哥内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯