keycloak~jwt的rs256签名的验证方式

这篇具有很好参考价值的文章主要介绍了keycloak~jwt的rs256签名的验证方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口地址

  • keycloak开放接口地址:/auth/realms/fabao/.well-known/openid-configuration

keycloak~jwt的rs256签名的验证方式

rsa算法相关术语

RSA算法是一种非对称加密算法,其安全性基于大整数分解的困难性。在RSA算法中,有以下几个关键参数:

  1. n(模数):n 是一个大整数,通常为两个大素数 p 和 q 的乘积,即 n = p * q。n 用于生成公钥和私钥,并且决定了加密和解密的计算过程。

  2. e(公钥指数):e 是一个与 φ(n) 互质的小整数,其中 φ(n) 是欧拉函数,表示小于 n 且与 n 互质的正整数的个数。e 在加密时使用,作为公钥的一部分。

  3. 公钥:公钥由 (n, e) 组成,其中 n 是模数,e 是公钥指数。公钥用于加密消息,任何人都可以获得公钥进行加密操作。

  4. 私钥:私钥由 (n, d) 组成,其中 n 是模数,d 是私钥指数。私钥用于解密已经被公钥加密的消息,只有私钥的持有者才能获得解密能力。

总结来说,RSA算法通过公钥加密、私钥解密的方式实现信息的安全传输,公钥用于加密数据,私钥用于解密数据;反过来,私钥可以用来生成签名,而公钥可以用来验证签名的有效性。

RSA和RS256

  1. RSA:RSA是一种非对称加密算法,可以用于数据的加密和数字签名。在RSA中,公钥和私钥是成对存在的,公钥用于加密数据或验证数字签名,私钥用于解密数据或生成数字签名。

  2. RS256:RS256是一种基于RSA算法的数字签名算法,其中“RS”代表RSA算法,“256”表示使用SHA-256哈希算法生成摘要。RS256常用于JWT(JSON Web Token)的数字签名过程中,用于验证数据的完整性和真实性。

因此,可以说RS256是RSA算法的一种特定应用,用于数字签名,并且结合了SHA-256哈希算法。RSA算法还可以用于加密数据等其他用途,而RS256主要用于数字签名。

获取keycloak颁发的公钥

  • 从jwks公钥开放地址获取公钥 /auth/realms/fabao/protocol/openid-connect/certs

keycloak~jwt的rs256签名的验证方式

  • 从keycloak后台获取公钥

keycloak~jwt的rs256签名的验证方式

keycloak中jwt的验证

  • 在客户端验证keycloak的token是否在传输过程中被篡改,即签名验证是否通过
  • 下面代码中定义了公钥字符串,从开放地址返回的rsa公钥的n模数和e指数
  • 从kecloak认证中心颁发的公钥字符串
  • 从现在有keycloak认证中心获取的jwt字符串
// RSA公钥的模数
String modulus = "yOCNCy8x280...";

// RSA公钥的指数
String exponent = "AQAB";

// keycloak拿到的公钥
String publicKeyString = "MIIBIjANBg...B";

String KcJwtToken = "eyJh...";

  • 根据公钥开放地址返回的公钥信息n和e来验证签名
@Test
public void verifySign() throws Exception {
	String[] jwtParts = KcJwtToken.split("\\.");
	String header = jwtParts[0];
	String payload = jwtParts[1];
	// 解码Base64格式的模数和指数
	byte[] decodedModulus = Base64.getUrlDecoder().decode(modulus);// getMimeDecoder()会忽略非Base64字符(如换行符、空格等)
	byte[] decodedExponent = Base64.getUrlDecoder().decode(exponent);
	// 构建RSA公钥对象
	RSAPublicKeySpec publicSpec = new RSAPublicKeySpec(new BigInteger(1, decodedModulus),
			new BigInteger(1, decodedExponent));
	// 验征RSA签名
	PublicKey publicKey = KeyFactory.getInstance("rsa").generatePublic(publicSpec);
	boolean result = RSAUtils.verify(header + "." + payload, publicKey, jwtParts[2]);
	System.out.print("验签结果:" + result);

}
  • 根据keycloak后台颁发的公钥字符串来验证签名
// 根据认证平台颁发的公钥字符串来验证签名
@Test
public void verifyJwtToken() throws Exception {
	String[] jwtParts = KcJwtToken.split("\\.");
	String header = jwtParts[0];
	String payload = jwtParts[1];
	String sign = jwtParts[2];
	PublicKey publicKey = RSAUtils.getPublicKey(publicKeyString);
	boolean result = RSAUtils.verify(header + "." + payload, publicKey, sign);
	System.out.print("验签结果:" + result);
}

需要注意的是,以上jwt的token签名使用rs256(SHA256withRSA)算法生成的签名,所以本例子都是采用这种签名算法实现的,例外,也有h256,h512等哈希算法。文章来源地址https://www.toymoban.com/news/detail-855019.html

keycloak支持的签名算法

public static final String RS256 = "SHA256withRSA";
public static final String RS384 = "SHA384withRSA";
public static final String RS512 = "SHA512withRSA";
public static final String HS256 = "HMACSHA256";
public static final String HS384 = "HMACSHA384";
public static final String HS512 = "HMACSHA512";
public static final String ES256 = "SHA256withECDSA";
public static final String ES384 = "SHA384withECDSA";
public static final String ES512 = "SHA512withECDSA";
public static final String PS256 = "SHA256withRSAandMGF1";
public static final String PS384 = "SHA384withRSAandMGF1";
public static final String PS512 = "SHA512withRSAandMGF1";
public static final String AES = "AES";

public static final String SHA256 = "SHA-256";
public static final String SHA384 = "SHA-384";
public static final String SHA512 = "SHA-512";

到了这里,关于keycloak~jwt的rs256签名的验证方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • API接口的安全设计验证:ticket,签名,时间戳(1)

    result.put(“success”,false); result.put(“ticket”,“”); result.put(“code”,“999”); result.put(“message”,“用户名和密码不匹配”); return result; } if (personEntity.getLoginName().equals(username) personEntity.getPassword().equals(password)){ String ticket = UUID.randomUUID().toString(); ticket = ticket.replace(“-”,“”);

    2024年04月27日
    浏览(37)
  • 对接第三方接口鉴权(Spring Boot+Aop+注解实现Api接口签名验证)

    一个web系统,从接口的使用范围也可以分为对内和对外两种,对内的接口主要限于一些我们内部系统的调用,多是通过内网进行调用,往往不用考虑太复杂的鉴权操作。但是,对于对外的接口,我们就不得不重视这个问题,外部接口没有做鉴权的操作就直接发布到互联网,而

    2024年04月29日
    浏览(83)
  • 国密GmSSL v2版本命令行方式生成国密sm2私钥、公钥、签名和验证签名

    GmSSL是国密算法的工具库(主要包含SM2、SM3、SM4和国密SSL证书生成等功能),项目本身是OpenSSL的分支,但是截至文章发布为止,OpenSSL主分支的国密算法并不完善,目前并不支持签名和解签,所以国密算法这块还是需要使用GmSSL工具库。 网上现在并没有v2版本的GmSSL可用的命令

    2024年02月09日
    浏览(47)
  • keycloak~Googl的reCAPTCHA验证

    reCAPTCHA是Google公司推出的一项验证服务,使用十分方便快捷,在国外许多网站上均有使用。它与许多其他的人机验证方式不同,它极少需要用户进行各种识图验证。 它的使用方式如下如所示,只需勾选复选框即可通过人机验证。 虽然简单但效果很好,因为Google会收集一些浏

    2024年02月08日
    浏览(50)
  • 最详细的Keycloak教程(建议收藏):Keycloak实现手机号、验证码登陆——(二)Keycloak与SpringBoot的集成

    上一篇已经介绍了keycloak的下载与使用: Keycloak的下载与使用 本文章和大家分享keycloak怎么去集成springboot项目,以及怎么去做接口权限的校验。 PS:根据红帽的公告,目前在springboot 3.x版本已经不支持keycloak适配器,所以本章基于 springboot 2.7.16 版本,集成keycloak做登录校验,并

    2024年02月05日
    浏览(65)
  • 超详细!完整版!基于spring对外开放接口的签名认证方案(拦截器方式)

    由于项目需要开发第三方接口给多个供应商,为保证Api接口的安全性,遂采用Api接口签名验证。 请求发起时间得在限制范围内 请求的用户是否真实存在 是否存在重复请求 请求参数是否被篡改 1、服务端生成一对 accessKey/secretKey密钥对,将 accessKey公开给客户端,将 secretKey 保

    2024年01月22日
    浏览(53)
  • Android Apk签名算法使用SHA256

    Android apk签名算法使用SHA256 本文不介绍复杂的签名过程,说一下Android签名算法使用SHA256。 但是SHA1不是相对安全签名算法,SHA256更加安全一些。 一般大公司才会有这种细致的安全要求。 如何查看apk签名是否是SHA1还是SHA256 ··· 1、拿到apk文件,修改文件后缀为.jar 2、解压文件

    2024年04月08日
    浏览(108)
  • keycloak~使用jwks验证token的合法性

    keycloak提供了jwks服务,其地址可以在 /auth/realms/fabao/.well-known/openid-configuration 的返回结果中找到, jwks_uri 它表示了公钥的颁发者,可以使用颁发出来的公钥来验证token的签名,基地址也是固定的 /auth/realms/fabao/protocol/openid-connect/certs 。 jwt的解析以来于 java-jwt 包,由jwks服务解析

    2024年04月23日
    浏览(29)
  • Postman轻松签名,让SHA256withRSA保驾护航!

      postman接口签名教程: https://www.bilibili.com/video/BV1r14y1A7MQ/? 目录:导读 前言 获取pmlib 引入依赖bundle.js,有以下两种方式: 使用Pre-request Script对请求进行加签(具体加签字段请看自己项目) 结语 在接口测试中,我们经常需要对请求进行签名,以保证数据的安全性。而SHA256withR

    2024年02月11日
    浏览(44)
  • Android创建签名文件,并获取签名文件MD5,SHA1,SHA256值

    一、创建Android签名文件         使用Android Studio开发工具,可视化窗口进行创建 第一步:点击AndroidStudio导航栏上的 Build→Generate Signed Bundle / APK 第二步:选择APK选项    第三步:创建签名文件 第四步:输入创建签名的文件的各内容信息 点击ok,即可完成签名的文件的创建

    2024年02月07日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包