文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring Security5.5发布,正式实装OAuth2.0的第五种授权模式

2024-12-03 05:09

关注

今天Spring Security 5.5发布了,主要涉及OAuth2.0和SAML2.0两个协议。其中最大的亮点是支持了OAuth2.0的另一种授权模式jwt-bearer。这个模式可能对大家比较陌生,说实话胖哥也没在实际开发中玩过这种模式,不过它并不是刚出的规范,这是2015年5月起草的RFC7523的一部分,如今正式实装到Spring Security中,今天就和大家一起学习一下这个规范。

JWT Bearer 授权模式

通常出现在各大技术社区的OAuth2.0有四大授权模式:

授权码模式 grant_type=authorization_code。

隐藏模式response_type=token。

密码模式grant_type=password。

凭据模式grant_type=client_credentials。

其实这几种模式中都会用到Bearer Token,甚至Token直接选用JWT技术。那么它作为一种授权模式是如何定义的呢?

JWT Bearer 授权

首先jwt-bearer认证请求也要携带grant_type参数来表明使用的授权模式:

  1. grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer 

这个grant_type有点长!还要携带assertion参数,这个参数对应的值只能是一个JWT,另外也可以携带(可选)scope参数以表明请求的作用域。根据上面的描述,一个jwt-bearer类型的授权模式大致是这样的:

  1. POST /token/oauth2 HTTP/1.1 
  2.      Host: felord.cn 
  3.      Content-Type: application/x-www-form-urlencoded 
  4.  
  5.      grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer 
  6.      &assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9. 
  7.      eyJzdWIiOiJhbGwiLCJhdWQiOiJGZWxvcmRjbiIsInJv. 
  8.      ER2U4CAt1xYxXBmnVQsrirkMwPwxwjWxjs 

其实也就是说用户如果要请求授权要先有一个JWT,我个人估计有可能是可以被授权服务器信任的第三方JWT凭据,凭据校验通过用户就可以得到相应的授权去访问特定的资源。

客户端身份认证

RFC7523还规定JWT Bearer还可以用于客户端身份验证。客户端携带一个client_assertion_type参数:

  1. client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer 

同Beaerer JWT授权类似,还要携带一个client_assertion参数,这个参数同样要带一个JWT。请求实例如下:

  1. POST /token/oauth2 HTTP/1.1 
  2.     Host: felord.cn 
  3.     Content-Type: application/x-www-form-urlencoded 
  4.  
  5.     grant_type=authorization_code& 
  6.     code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4& 
  7.     client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3A 
  8.     client-assertion-type%3Ajwt-bearer& 
  9.     client_assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9. 
  10.     eyJzdWIiOiJhbGwiLCJhdWQiOiJGZWxvcmRjbiIsInJv. 
  11.     ER2U4CAt1xYxXBmnVQsrirkMwPwxwjWxjs 

场景

那么场景是什么?根据RFC723的描述,该模式用于当客户端希望利用一个现有的、可信任的、使用JWT语义表达的关系来获取Access Token,它不需要在授权服务器上直接进行用户批准(User Approval)步骤。

另外jwt-bearer也被定义用于客户端身份验证机制,来判断客户端的身份是否合规。客户端使用JWT进行身份认证和客户端使用JWT进行授权是分离的行为。当然这两种行为可以组合使用,也可以分离使用。客户端使用JWT进行身份验证仅是客户端向令牌端点进行身份验证一种替代方法。

个人感觉就是方便在已经有JWT体系上使用OAuth2.0协议。

总结

今天主要对jwt-bearer授权模式的协议进行了分享,和其它模式比较起来jwt-bearer还很新,虽然目前还没有大规模运用,不过目前我在国外的技术社区已经发现了很多关于这种模式的问题和讨论,看来这个模式还是有点东西的,需要留意一下。

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

 

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

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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