令牌签名无效错误

2024-05-11

我抛出了这个错误

com.auth0.jwt.exceptions.SignatureVerificationException:使用算法验证时令牌的签名无效:HmacSHA256

private static String SECRET = "some secret...";

public static DecodedJWT verify(String token) throws JWTVerificationException, UnsupportedEncodingException {
    JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET))
            .withIssuer("auth0")
            .acceptLeeway(1)
            .acceptExpiresAt(5 * 60)
            .build();

    return verifier.verify(token);
}

秘密是否有问题,在 jwt.io 网站上,我单击秘密的 Base 64 编码,然后它变成蓝色。

我尝试使用 Base 64 编码我的秘密https://www.base64encode.net https://www.base64encode.net但同样的问题。请指教。


The javadoc https://github.com/auth0/java-jwt/blob/7dcea427df1db2b948911e70aef2e9d7f0b7cfad/lib/src/main/java/com/auth0/jwt/algorithms/Algorithm.java#L171-L178说你需要提供原始秘密值。 这意味着你需要base64-解码您当前拥有的值:

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.io.UnsupportedEncodingException;
import java.util.Base64;

public class JwtVerification {

    private static final String SECRET = "zZrq0sZK1yt9RJk51RTJ/jeU6WERbvr8nqKMWQJRX1E=";

    public static DecodedJWT verify(String token) throws JWTVerificationException, UnsupportedEncodingException {
        JWTVerifier verifier = JWT.require(Algorithm.HMAC256(Base64.getDecoder().decode(SECRET)))
                .withIssuer("auth0")
                .acceptLeeway(1)
                .acceptExpiresAt(5 * 60)
                .build();

        return verifier.verify(token);
    }

    public static void main(String[] args) throws UnsupportedEncodingException {
        final String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aWQiOiJiZWJlMjM4Zi1iMGM4LTQwYzMtOTYyMC1jZDRlOGUyMzIwZGMiLCJvaWQiOiI5MjJjMmZiNC0zNWI1LTExZDctOWE2NC0wMGIwZDBmY2I5ZTMiLCJzdWIiOiI5MjJjMmZiNC0zNWI1LTExZDctOWE2NC0wMGIwZDBmY2I5ZTMiLCJlbWFpbCI6InRlc3RAdGVzdC5jb20iLCJpYXQiOjE1MTg0NDk5NzYsImV4cCI6MTUxODQ1MzU3NiwibmJmIjoxNTE4NDQ5OTc2fQ.6InknrU67g_HEkaLxD9Ul5vOzbYGf54mJNcSyPr-xek";
        System.out.println(verify(token));
    }
}

我目前收到此异常,但看起来令牌本身有问题:

Exception in thread "main" com.auth0.jwt.exceptions.InvalidClaimException: The Claim 'iss' value doesn't match the required one.
    at com.auth0.jwt.JWTVerifier.assertValidStringClaim(JWTVerifier.java:424)
    at com.auth0.jwt.JWTVerifier.verifyClaims(JWTVerifier.java:382)
    at com.auth0.jwt.JWTVerifier.verify(JWTVerifier.java:355)
    at com.swiftkey.parametron.data.JWT2.verify(JWT2.java:23)
    at com.swiftkey.parametron.data.JWT2.main(JWT2.java:28)

事实上,令牌没有指定iss字段,但验证者希望它是“auth0”,因为.withIssuer("auth0").

如果你查看令牌内部:

        final String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aWQiOiJiZWJlMjM4Zi1iMGM4LTQwYzMtOTYyMC1jZDRlOGUyMzIwZGMiLCJvaWQiOiI5MjJjMmZiNC0zNWI1LTExZDctOWE2NC0wMGIwZDBmY2I5ZTMiLCJzdWIiOiI5MjJjMmZiNC0zNWI1LTExZDctOWE2NC0wMGIwZDBmY2I5ZTMiLCJlbWFpbCI6InRlc3RAdGVzdC5jb20iLCJpYXQiOjE1MTg0NDk5NzYsImV4cCI6MTUxODQ1MzU3NiwibmJmIjoxNTE4NDQ5OTc2fQ.6InknrU67g_HEkaLxD9Ul5vOzbYGf54mJNcSyPr-xek";
        final DecodedJWT decodedJwt = JWT.decode(token);
        System.out.println("Header =  " + decodedJwt.getHeader());
        System.out.println("Algorithm =  " + decodedJwt.getAlgorithm());
        System.out.println("Audience =  " + decodedJwt.getAudience());
        decodedJwt.getClaims().forEach((k, v) -> {
            System.out.println("Claim " + k + " = " + v.asString());
        });
        System.out.println("ContentType =  " + decodedJwt.getContentType());
        System.out.println("ExpiresAt =  " + decodedJwt.getExpiresAt());
        System.out.println("Id =  " + decodedJwt.getId());
        System.out.println("Issuer =  " + decodedJwt.getIssuer());
        System.out.println("Subject =  " + decodedJwt.getSubject());

你会看到Issuer场是null

Header =  eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
Algorithm =  HS256
Audience =  null
Claim sub = 922c2fb4-35b5-11d7-9a64-00b0d0fcb9e3
Claim nbf = null
Claim oid = 922c2fb4-35b5-11d7-9a64-00b0d0fcb9e3
Claim exp = null
Claim iat = null
Claim tid = bebe238f-b0c8-40c3-9620-cd4e8e2320dc
Claim email = [email protected] /cdn-cgi/l/email-protection
ContentType =  null
ExpiresAt =  Mon Feb 12 16:39:36 GMT 2018
Id =  null
Issuer =  null
Subject =  922c2fb4-35b5-11d7-9a64-00b0d0fcb9e3

生成该令牌的人没有指定Issuer (aka iss) 场地。 因此验证失败,因为我们设置验证者期望iss等于auth0.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

令牌签名无效错误 的相关文章

随机推荐

  • 安装 npm 包时自动安装类型定义

    有没有办法配置npm以这样的方式 每当我安装一个包时 它都会 检查里面是否有类型定义 如果没有 请尝试安装 types PACKAGE与 save dev flag 理想情况下 我希望这能够自动发生 作为插件或其他东西 而不需要编写限制 A
  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • 为什么我们必须在 OAuth 中“更改令牌凭据的临时凭据”?

    服务器不能只是将临时凭证 升级 为令牌凭证并保留相同的密钥和秘密吗 然后 客户端可以在收到服务器的回调 表明临时凭证已 升级 后立即开始进行经过身份验证的调用 当然 如果临时凭证尚未升级 即客户端不等待回调 则经过身份验证的调用将失败 所以
  • 什么时候 Thread.sleep(1000) 睡眠时间少于 1000 毫秒?

    在这篇有趣的文章中程序员对时间的看法是错误的 http infiniteundo com post 25509354022 more falsehoods programmers believe about time wisdom 其中之一
  • 使用 jQuery 修改 svg 文件

    我有一个 svg 文件 其中包含一些形状和一些文本 我想在运行时修改 svg 以便某些形状可以更改颜色 某些文本可以更改其内容 假设我的外部 svg 文件中只有两个元素 圆圈 1 具有该 id 的蓝色实心圆圈 text1 包含该 id 的
  • 下拉 Ajax onchange SonataAdminBundle Symfony2 问题

    我正在尝试在 SonataAdminBundle 中实现 onchange 下拉菜单 我的实体就像 class BuilderHomePage var integer ORM Column name id type integer null
  • 如何将 SVN 修订号注入 JAR 中?

    我希望我的 JAR WAR 应用程序知道其源代码的 SVN 修订号是多少 我希望稍后在网页底部等处为网络最终用户呈现此修订号 是否有任何现有的 Maven 插件可以自动化该过程 我认为该插件必须从以下位置收集信息svn并保存到某个文件 例如
  • 哎呀,看起来像出事了。拉拉维尔 5.1

    我有这样的路线 http localhost inspection show id 当我尝试同时加载路线时 在不同的选项卡中 有时其中一些选项卡会出现错误 哎呀 看起来出了问题 在不同选项卡中加载速度如此之快 http localhost
  • 可以在 Blazor 布局中使用 ViewComponent 吗?

    刚刚第一次尝试 Blazor 使用默认的 Blazor 模板 我添加了一个ViewComponent致电MainLayout cshtml await Component InvokeAsync HeaderComponent Intell
  • 实体框架 SaveChanges 错误详细信息

    保存更改时SaveChanges在数据上下文上有没有办法确定哪个实体导致错误 例如 有时我会忘记将日期分配给不可为空的日期字段并收到 无效日期范围 错误 但我没有得到有关它是由哪个实体或哪个字段引起的信息 我通常可以通过煞费苦心地检查我所有
  • 当我运行捆绑安装时,Nokogiri“无法构建 gem 本机扩展”

    我在跑bundle install我收到此错误 Building nokogiri using system libraries Gem Ext BuildError ERROR Failed to build gem native ext
  • 为什么分割视图控制器必须始终是您创建的任何界面的根?

    在苹果的开发者指南中 他们指出 分割视图控制器必须始终是您创建的任何界面的根 see here http developer apple com library ios featuredarticles ViewControllerPGfo
  • 按 ng-repeat 中的对象键排序

    如何按整数键排序 我有以下对象 scope data 0 data ZERO 1 data ONE 2 data TWO 3 data TREE 5 data FIVE 6 data SIX 10 data TEN 11 data ELEV
  • MongoDB 获取聚合查询中的第一个和最后一个文档

    我如何获得第一个和最后一个文档time场地 我可以用 group并得到 first and last文档 但我不需要在这里分组 只需获取第一个和最后一个完整文档 也许我可以用slice 此查询不起作用 aggregate 353469045
  • Cloud Firestore 安全规则使用的语言名称是什么?

    我想知道用于 Cloud Firestore 安全规则的语法名称 如下所述https firebase google com docs firestore security get started authuser 0 https fire
  • “未发现包含任何钥匙串签名证书的未过期配置文件”恐怖

    我看到了其他一些涉及这个主题的问题 但没有一个像我的 昨天我无意中将一个设备添加到设备列表中 问题 我的印象是 一旦添加设备 它现在就会链接到配置文件 然而 我相信它没有链接到我的分发配置文件之一 因此 我进入编辑配置文件 单击设备旁边的复
  • 迭代集合时将动态 ID 分配给隐藏字段

    有没有办法分配动态IDh inputHidden成分 EDIT1 我正在尝试分配 id 内ui repeat迭代元素集合时的标记 无法根据迭代值设置 ID
  • exec git 命令拒绝重定向到 Go 中的文件

    我试图从 go 调用 git log 并将输出重定向到给定文件 cmdArgs string log numstat reverse fmt Sprintf s HEAD 89c98f5ec48c8ac383ea9e27d792c3dc77
  • 使用 NEON 优化 Cortex-A8 颜色转换

    我目前正在执行颜色转换例程 以便从 YUY2 转换为 NV12 我有一个相当快的函数 但没有我预期的那么快 主要是由于缓存未命中 void convert hd uint8 t orig uint8 t result uint32 t wi
  • 令牌签名无效错误

    我抛出了这个错误 com auth0 jwt exceptions SignatureVerificationException 使用算法验证时令牌的签名无效 HmacSHA256 private static String SECRET