签署令牌如何工作? (无效签名错误)

Posted

技术标签:

【中文标题】签署令牌如何工作? (无效签名错误)【英文标题】:How does signing a token work? (Invalid Signature Error) 【发布时间】:2020-06-21 04:30:20 【问题描述】:

背景:我正在使用 Auth0 对我的端点进行授权的 .NET Core Web API 中运行集成测试。当我将 Auth0 返回的令牌粘贴到 JWT.io 验证程序中时,它们包含“无效签名”。

在我的授权流程中,我无法理解我的令牌是在什么时候被签名的、谁签名的以及它是如何签名的。

我在 Auth0(“我的开发 API”)中启动了一个新的开发 API,它使用 HS256 签名算法来签署我的令牌。据我了解,对于 HS256,有一个密钥用于签名令牌(签名密钥),机器到机器的流程如下所示:

我将一些凭据发布到 Auth0,如下所示:

clientID: exampleID
clientSecret: exampleSecret
audience: https://myaudience.com
grant_type: client_credentials

Auth0 将访问令牌发回给我:

access_token: exampleToken1234

当我将此令牌粘贴到 JWT.io 时,我被告知该令牌的签名无效。

在我的 .NET 应用程序中,我进行了一些设置并进行了某种配置:

   static void AddAuthentication(IServiceCollection services)
       
           services.AddAuthentication(options =>
           
               options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
               options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    ).AddJwtBearer(options =>
        
              options.TokenValidationParameters = new TokenValidationParameters
         
               ValidIssuer = auth0Config.Domain,
               ValidAudience = auth0Config.Audience,
               IssuerSigningKey = new 
                        SymmetricSecurityKey(Encoding.UTF8.GetBytes(auth0Config.SigningSecret))
         ;
     );
 

谁能解释我是否应该添加代码来签署这个令牌,如果它已经签署(如果是这样,为什么 JWT.io 告诉我有一个无效的签名)以及上面的配置实际上在做什么?

另外,是否有必要创建一个独立的开发 API 或者我可以向预构建的管理 API 发送授权请求?

提前致谢!

【问题讨论】:

jwt.io 无法验证签名,除非您将用于签署令牌的秘密粘贴到“验证签名”下右列的字段中。所以先把秘密粘贴在那里,然后将令牌粘贴到左列。 【参考方案1】:

当我将 Auth0 返回的令牌粘贴到 JWT.io 验证程序中时,它们包含“无效签名”。

https://jwt.io 无法验证签名,除非您将密钥(用于签署令牌)粘贴到“验证签名”下右列的字段中。所以首先将秘密粘贴到那里,然后将令牌粘贴到左栏中。顺序很重要!

在我的授权流程中,我无法理解我的令牌是在什么时候被签名的、谁签名的以及它是如何签名的。

当用户根据提供的凭据进行身份验证时,AuthO 会为您创建一个签名令牌。要创建令牌,首先创建标头和有效负载,然后将签名计算为标头和有效负载和机密的哈希。阅读基础知识here

谁能解释我是否应该添加代码来签署这个令牌,如果它到达已经签名(如果是这样,为什么 JWT.io 告诉我有一个无效的签名)

您不需要任何额外的签名,您会从 AuthO 获得签名令牌。

上面的配置实际上在做什么?

上面的配置告诉您的 API 使用了基于 JWT 的身份验证,并且应该根据配置的参数(根据 auth0Config 中的值验证颁发者、受众和签名)检查传入请求的有效 JWT

【讨论】:

谢谢,说得好,通俗易懂! 很高兴为您提供帮助 :)

以上是关于签署令牌如何工作? (无效签名错误)的主要内容,如果未能解决你的问题,请参考以下文章

即使我在授权中输入令牌,JWT 仍返回无效签名错误

无效签名错误!

如何使用 WCF 签署 X509 令牌

“AADSTS5002730:无效的 JWT 令牌。 Azure Signal R 服务令牌的代表方案中出现“签名算法的密钥不受支持”错误

JWT 来自一个网站的无效签名,但另一个网站没有错误。用户对象的额外属性被添加到令牌

如何签署 OKEx API 请求?