当前位置: 首页 > news >正文

【Spring Authorization Server 系列】(四)JWS 的签名方式

复习一下前文中 JWS 的知识:

JWS 由三部分组成:Header + Payload + Signature,各部分以 . 分隔,结构如下:
Header.Payload.Signature

重点关注 Signature 部分,它是 JWS 保证安全的关键,

Signature,即签名,它由编码后的header和payload,使用用户指定的密钥(JWK),采用header中指定的签名算法(JWA)生成。
Signature 可用于验证数据是否篡改(保证数据完整性)。

这其中,签名算法起到了关键作用。目前,JWS 签名算法有三种:

  • HMAC【哈希消息验证码(对称)】(HS256/HS384/HS512)
  • RSASSA【RSA签名算法(非对称)】(RS256/RS384/RS512)
  • ECDSA【椭圆曲线数据签名算法(非对称)】(ES256/ES384/ES512)

HMAC

Hmac算法就是一种基于密钥消息认证码算法,它的全称是Hash-based Message Authentication Code,是一种更安全的消息摘要算法。

传统的Hash算法只能验证数据的完整性,但是无法保证数据防篡改。也就是说,攻击者可以将你的原文改了,并把hash值也改了,你没法确定数据是否被篡改。
Hmac算法在Hash算法基础增加了密钥,通过密钥+原文生成mac值,攻击者就算改了你的原文,但是他没有你的密钥就生成不了对应的mac值,这样,你在得到报文时就可以验证出是否被篡改。

  • SHA系列算法:HmacSHA256、HmacSHA384、HmacSHA512

RSASSA

RSA本身是一种非对称加密算法,在加解密上,使用公钥加密,私钥解密。
RSASSA 是签名算法,计算哈希是签名生成操作的一部分。使用私钥加签,公钥验签。

  • SHA系列算法:SHA256withRSA、SHA384withRSA、SHA512withRSA

在入门案例中,我们正是使用此签名算法,具体方法为generateRsaKey()。授权服务器使用私钥对 jws 加签,通过 /oauth2/jwks 接口暴露公钥信息给资源服务器,资源服务器可以对收到的 jws 验签,验证jws的合法性。

其他

  • 签名可以使用对称签名(Symmetric Signatures)、不对称签名(Asymmetric Signatures),对应 对称加密算法、非对称加密算法
  • 实现方式可通过消息认证码(Message Authentication Code, MAC) 或 数字签名(Digital Signature)

end

相关文章:

  • Vue中的循环渲染v-for
  • openresty + prometheus + grafana 搭建。监控网络请求
  • 复盘:统计学派(频率学派)跟贝叶斯学派(贝叶斯公式、朴素贝叶斯)的定义和区别,奥卡姆剃刀和最大似然跟谁更接近
  • Java数据类型与变量
  • od笔试记录
  • Code Review
  • Kubernetes部署服务通过Ingress访问报错413解决
  • 3如何搭建组件库的样式工程之button-scss
  • 飞书第三方ISV服务商应用开发及上架教程
  • JavaScript 运算符和表达式(二)
  • js arr.reduce() reduce方法应用
  • Day 56 Django 连接数据库 ORM
  • 深度学习中的激活函数有哪些?
  • Image through Atmospheric Turbulence笔记(一)
  • 遇到的一些奇怪的bug(非代码问题)与解决方法
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • android图片蒙层
  • Java|序列化异常StreamCorruptedException的解决方法
  • js继承的实现方法
  • Netty源码解析1-Buffer
  • PHP 的 SAPI 是个什么东西
  • rc-form之最单纯情况
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • TypeScript迭代器
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • XML已死 ?
  • 大快搜索数据爬虫技术实例安装教学篇
  • 工程优化暨babel升级小记
  • 今年的LC3大会没了?
  • 七牛云假注销小指南
  • 使用权重正则化较少模型过拟合
  • 微信支付JSAPI,实测!终极方案
  • 因为阿里,他们成了“杭漂”
  • 栈实现走出迷宫(C++)
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • PostgreSQL之连接数修改
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #{} 和 ${}区别
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (WSI分类)WSI分类文献小综述 2024
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)Scala的“=”符号简介
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 回调、接口回调、 委托
  • .NET 中创建支持集合初始化器的类型
  • .NET(C#) Internals: as a developer, .net framework in my eyes