第一个例子
模数和指数(
n和
e)in
https://login.microsoftonline.com/common/discovery/keys是在
base64url而不是in
中编码的
base64,因此解码它们的代码应为
byte[] modulusBytes = base64.getUrlDeprer().depre(n);BigInteger modulusInt = new BigInteger(1, modulusBytes);
不要用旧
com.sun.misc.base64Deprer
如果JWT已签名,则不应使用
JWTParser.plaintextJwt()。根据文件
plaintextJwt:紧凑的序列化无符号纯文本JWT字符串
使用
parseClaimsJws或代替
parsePlaintextJws。仅当有效载荷是字符串非JSON时的第二种方法
第二个例子
第二个例子基本上是正确的。我假设
X509CertUtils.parse(certChain)类似于
InputStream in = new ByteArrayInputStream(certChain); CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in);证书的模量和指数与解码后的相同,因此公钥等效
链接中有两个相似的证书,请同时选中两个。您应该能够验证签名。如果不是,则令牌不使用这些密钥签名



