今天Spring Security 5.5发布了,主要涉及OAuth2.0SAML2.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参数来表明使用的授权模式:

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

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

     POST /token/oauth2 HTTP/1.1Host: felord.cnContent-Type: application/x-www-form-urlencodedgrant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGwiLCJhdWQiOiJGZWxvcmRjbiIsInJv.ER2U4CAt1xYxXBmnVQsrirkMwPwxwjWxjs

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

客户端身份认证

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

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

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

     POST /token/oauth2 HTTP/1.1Host: felord.cnContent-Type: application/x-www-form-urlencodedgrant_type=authorization_code&code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhbGwiLCJhdWQiOiJGZWxvcmRjbiIsInJv.ER2U4CAt1xYxXBmnVQsrirkMwPwxwjWxjs

场景

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

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

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

总结

今天主要对jwt-bearer授权模式的协议进行了分享,和其它模式比较起来jwt-bearer还很新,虽然目前还没有大规模运用,不过目前我在国外的技术社区已经发现了很多关于这种模式的问题和讨论,看来这个模式还是有点东西的,需要留意一下。好了今天的分享就到这里,更多前沿技术资讯请关注:码农小胖哥,多多点赞、转发、再看。

推荐关注本文作者:码农小胖哥

分享高质量编程知识,探讨IT人生

技术干货,实战技巧,面试技巧,前沿资讯一个都不能少

往期推荐

Spring越来越强,而我们越来越快餐!离开了Spring,居然API都写不出来了!

520,送一波高质量Java经典图书!一定有你想要还没入手的!

字节跳动涉代码抄袭被诉陪22.74亿,连错误的函数都搬?

JDK 8 Stream 数据流效率怎么样?

如何设计 QQ、微信、微博、Github 等第三方账号登陆 ?(附表设计)

Spring Security 5.5发布,正式实装OAuth2.0的第五种授权模式相关推荐

  1. spring security 安全框架改造统一登录oauth2.0方式

    继上次改造统一登录之后,这次又接到改造任务,这次的项目结构略有不同,不再有web.xml文件,也不是集成的含有拦截器的jar包,而是oauth2.0的授权码(CODE)方式的认证流程, 因为前端还是v ...

  2. 搭建认证服务器 - Spring Security Oauth2.0 集成 Jwt 之 【授权码认证流程】 总结

    在搭建介绍流程之前,确保您已经搭建了一个 Eureka 注册中心,因为没有注册中心的话会报错(也有可能我搭建的认证服务器是我项目的一个子模块的原因):Request execution error. ...

  3. (一)、Spring Security OAuth2 五种授权方式介绍

    更多相关文章请见:Spring Security文章目录 1.简介 OAuth 2.0定义了五种授权方式. RFC规范链接 authorization_code:授权码类型,授权系统针对登录用户下发c ...

  4. Spring Security+Oauth2四种授权模式

    上一篇文章:Spring Security + OAuth2.0项目搭建:https://blog.csdn.net/qq_42402854/article/details/123057625 接着认 ...

  5. 零基础学习SpringSecurity OAuth2 四种授权模式(理论+实战)(配套视频讲解)

    配套视频直达 背景 前段时间有同学私信我,让我讲下Oauth2授权模式,并且还强调是零基础的那种,我也不太理解这个零基础到底是什么程度,但是我觉得任何阶段的同学看完我这个视频,对OAuth2的理解将会 ...

  6. OAuth2.0 - 介绍与使用 及 授权码模式讲解

    一.OAuth2.0 前面我们已经学习了SpringSecurity在SpringMVC环境下和WebFlux环境下用户认证授权以及整合JWT作为Token无状态认证授权,但是在前面的演示中都会发现全 ...

  7. Oauth2.0 安全性(以微信授权登陆为例)

    前言 用户 A 要使用微信账号登陆 Z 平台(www.z.com),一个黑客 H 想要把使用微信账号登陆 Z 平台的用户 A 转到恶意网站(www.h.com)来侵犯 A 的隐私 为什么要校验 red ...

  8. 实战干货!Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权!

    今天这篇文章介绍一下Spring Cloud Gateway整合OAuth2.0实现认证授权,涉及到的知识点有点多,有不清楚的可以看下陈某的往期文章. 文章目录如下: 微服务认证方案 微服务认证方案目 ...

  9. oauth2.0 php简化模式,OAuth2.0学习(1-5)授权方式2-简化模式(implicit grant type)

    授权方式2-简化模式(implicit grant type) 简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授 ...

最新文章

  1. 答应我!别再写上千行的类了,好吗?
  2. 37、Django实战第37天:404以及500页面配置
  3. 004_FastDFS分布式添加多个tracker
  4. Java8 之 lambda 表达式、方法引用、函数式接口、默认方式、静态方法
  5. HarmonyOS之AI能力·词性标注
  6. Django模板语言中的自定义方法filter过滤器实现web网页的瀑布流
  7. react学习(26)---获取antdesign的form数据
  8. java 连等_java并发之LBQ和ABQ(1)
  9. python asyncio_Python 中的异步编程:Asyncio
  10. antd upload手动上传_SpringBoot 如何上传大文件?
  11. 基于netty搭建websocket,实现消息的主动推送
  12. Jumpserver安装和总结
  13. assert()和panic()
  14. nginx配置实现代理多个内网地址
  15. java技术总监_技术总监-JAVA岗位职责
  16. gcd函数(C/C++)
  17. 嵌入式linux,增加串口登陆密码
  18. java web 怎么实现直播_java web开发直播平台可以实现但有缺陷
  19. gsoc 任务_gsoc 2020最终报告wikimedia transferpy改进
  20. SPSS Modeler 项目实战之超市商品购买关联分析

热门文章

  1. 从库中图片逐帧插入到场景
  2. Oracle中快速查找锁与锁等待
  3. ASP 三十二条精华代码
  4. python3 操作mysql数据库(mysql.connector 和 pymysql )
  5. Linux Rootkit 系列二:基于修改 sys_call_table 的系统调用挂钩
  6. python3 configparse 配置模块
  7. phpStudy在linux下的使用说明
  8. MFC CMap整理
  9. Linux 内存管理篇(2)内核初始化与内存管理启用
  10. Linux内核分析 - 网络[六]:网桥