前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Security 5.5发布,正式实装OAuth2.0的第五种授权模式

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

作者头像
程序猿DD
发布2021-06-08 22:20:47
2K1
发布2021-06-08 22:20:47
举报
文章被收录于专栏:程序猿DD程序猿DD

今天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参数来表明使用的授权模式:

代码语言:javascript
复制
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer

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

代码语言:javascript
复制
     POST /token/oauth2 HTTP/1.1
     Host: felord.cn
     Content-Type: application/x-www-form-urlencoded

     grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
     &assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.
     eyJzdWIiOiJhbGwiLCJhdWQiOiJGZWxvcmRjbiIsInJv.
     ER2U4CAt1xYxXBmnVQsrirkMwPwxwjWxjs

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

客户端身份认证

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

代码语言:javascript
复制
client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer

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

代码语言:javascript
复制
     POST /token/oauth2 HTTP/1.1
     Host: felord.cn
     Content-Type: application/x-www-form-urlencoded

     grant_type=authorization_code&
     code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&
     client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3A
     client-assertion-type%3Ajwt-bearer&
     client_assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.
     eyJzdWIiOiJhbGwiLCJhdWQiOiJGZWxvcmRjbiIsInJv.
     ER2U4CAt1xYxXBmnVQsrirkMwPwxwjWxjs
场景

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序猿DD 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JWT Bearer 授权模式
    • JWT Bearer 授权
      • 客户端身份认证
        • 场景
        相关产品与服务
        多因子身份认证
        多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档