你知道吗?OAuth2客户端有两种,认证方式有七种。
OAuth2客户端按照它们与授权服务器进行安全认证的能力可以分为机密类型(Confidential)和公共类型(Public)。
机密类型的自身会有个密码凭据,比如Web服务器后端程序;而公共类型则没有密码凭据,纯浏览器前端应用或者移动客户端应用大都属于这一种类型。不管是哪一种,它们都有客户端ID(client_id)。
关注星标、转发、点赞、再看,请以实际行动支持原创技术分享。
OAuth2客户端认证
客户端在执行OAuth2授权的敏感流程中(相关的流程有令牌请求、令牌自省请求、令牌撤销请求)必须使用授权服务器进行客户端身份验证,确保客户端中途不会被调包。
客户端认证方式
目前客户端认证的方式有以下几种:
前面Gitee的DEMO使用的是过时的POST方式;微信DEMO使用的是非OAuth2标准的方式;Spring Authorization Server目前相关的DEMO使用的是client_secret_basic方式。剩下的方式中client_secret_jwt和private_key_jwt用的比较多,这两种方式可以很好地保护客户端的认证信息,安全性更高。Spring Security和Spring Authorization Server目前已经支持这两种方式。
client_secret_jwt
client_secret_jwt
方式是OAuth2客户端将自己的密钥作为HmacSHA256
算法的key生成SecretKey
:
byte[] pin = clientSecret.getBytes(StandardCharsets.UTF_8);
SecretKeySpec secretKey = new SecretKeySpec(pin,"HmacSHA256");
然后通过SecretKey
生成一个携带OAuth2客户端信息的JWT,在授权码请求Token环节携带该JWT以便授权服务器进行客户端认证,请求的报文为:
POST /oauth2/token HTTP/1.1Host: oauth2_client.felord.cnContent-Type: application/x-www-form-urlencodedgrant_type=authorization_code&code=n0esc3NRze7LTCu7iYzS6a5acc3f0ogp4&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion=你的JWT
授权服务器收到请求后通过OAuth2客户端的client_secret
对JWT进行解码校验以认证客户端。这种方式能很好地保护client_secret
在非HTTPS环境下的传输。
❝
这里OAuth2客户端的密钥(client_secret)比特长度必须大于等于256。
private_key_jwt
private_key_jwt
和client_secret_jwt
唯一的区别就是生成JWT的方式不同。通过这种方式,OAuth2客户端已经不需要client_secret
,只需要配置一对RSA
或者EC
密钥,通过密钥来生成JWT,另外还需要向授权服务器提供公钥,通常是一个jwkSetUrl。该方式的细节已经在胖哥专栏[1]中JOSE规范[2]一文中进行过详细说明了,这里不再赘述。这种方式让客户端的认证信息更加安全的传输,是我个人比较喜欢的方式。
tls_client_auth
这个比较高级,嵌入了TLS安全层,在HTTP协议级别来认证OAuth2客户端,它涉及的证书来自可信任的CA。这种方式基本脱离了应用层,是一种无侵入的方式。
self_signed_tls_client_auth
这个同样也是在TLS安全层,不过它使用了自签名的X.509证书。
总结
市面上的教程大多只会提到过时的POST方式以及client_secret_basic和client_secret_post,对后面的五种很少涉及,小胖哥会对private_key_jwt和client_secret_jwt详细的实现,详细内容可以订阅Spring Security OAuth2专栏:
https://blog.csdn.net/qq_35067322/category_11691173.html
这些OAuth2客户端认证方式在不同的场景有不同的优势,你可以根据不同的安全级别选择不同的OAuth2客户端认证方式。
推荐阅读
秒杀德云社!今晚魔都小伙伴的朋友圈,快把我笑死了
裁员这么猛?潮水要退了?
日本网友求助如何卸载360浏览器,过程堪比“拆弹”
你知道吗?OAuth2客户端有两种,认证方式有七种。相关推荐
- 猫狗收容所(有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进,入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进,入收容所)
有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进,入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进,入收容所的. ...
- 客户端与服务器端的认证方式(cookie,token,session)
目录 ■问题起因 方式1:cookie ●cookie保存位置 ●cookie文件的形式 ●cookie的内容 (时代在发展) 方式2:session ■cookie・session ■查看cooki ...
- Centos 6.8安装open***.三种认证方式
Centos X64 6.8下安装Open***,三种认证方式 环境说明: 主机名称:open***01 安装版本为open***-2.3.11-1.el6.x86_64 相关资源下载连接如下: 链接 ...
- 【Http认证】Http的四种认证方式
一.Http Basic Authentication 基本认证 将认证的信息填写到请求头,参考博客文章: 二.Http Digest Authentication Digest认证 以上这两种认证方 ...
- 数据事务四种隔离机制和七种传播行为
数据事务四种隔离机制和七种传播行为 一.隔离级别: 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committed.Repeatable read.Seria ...
- HTTP的几种认证方式之BASIC 认证(基本认证)
目录 1.BASIC 认证(基本认证)的步骤 2.BASIC 认证的的缺点 3.Java + SpringBoot 实现 BASIC 认证的Demo 4.测试 5.注意事项 6.Java + Spri ...
- 简单谈谈OAuth 2.0的四种认证方式
简单谈谈OAuth 2.0的四种认证方式 一.基本认识 1.1 OAuth认证中的四种角色 二.认证方式 2.1 授权码认证 2.2 简化认证 2.3 密码认证 2.4 客户端认证 一.基本认识 在小 ...
- vsftp账号_关于VsFtp用户登录的几种认证方式
多种用户认证方式配置 第一种:通过系统用户访问 VsFtp在默认情况下允许系统账户(/etc/passwd)使用,使用系统账户登录存在很大的安全问题. 下面两种方法可以一定程度上提高安全性: 1:如只 ...
- Java防止Xss注入json_XSS的两种攻击方式及五种防御方式
XSS介绍 跨站脚本攻击指的是自己的网站运行了别的网站里面的代码 攻击原理是原本需要接受数据但是一段脚本放置在了数据中: 该攻击方式能做什么? 获取页面数据 获取Cookies 劫持前端逻辑 发送请求 ...
最新文章
- eventEmitter3源码分析与学习
- shell对文本进行操作命令
- mysql 工具_最全Mysql运维工具Percona Toolkit使用案例
- linux共享库的运行方式,Linux下动态共享库加载及使用详解
- 感知机模型的对偶形式[转载]
- java panel frame_Java 版 (精华区)--Frame和Panel的区别【转载】
- 数据结构之结构体复习
- JSP 中的几种注释
- v-cloak 的用法
- 苹果或推中国特色版 iPhone;小米回应萌拍抄袭苹果事件;微软停止审核发布 Windows Phone 8.x | 极客头条...
- VIM设置-发现VIM的美
- struts2学到屎挫死-学习笔记(4)
- Python 爬取4K美女图片
- Colab+Google使用教程
- android 应用引导用户去应用市场评论
- 图像处理--图像细化处理
- 6 - 常用模块(os,sys,timedatetime,random,jsonpicle,shelve,hashlib)
- 微信小程序版本管理使用gitee
- dev cpp source file not compiled
- 微信分享 微信对图片文字大小的限制 代码如下