Ruby 解码Auth0令牌时遇到问题

Ruby 解码Auth0令牌时遇到问题,ruby,jwt,auth0,Ruby,Jwt,Auth0,我有一个JWT,Auth0在我通过Angular应用程序中的锁进行身份验证时提供给我 我将这个令牌复制并粘贴到一个名为token的Ruby变量中 以下是我尝试解码令牌时在Rails控制台上得到的信息: > JWT.decode token, nil, false => [{"iss"=>"https://benfranklinlabs.auth0.com/", "sub"=>"auth0|58306f91c08814e01015f434", "aud"=>"8NW

我有一个JWT,Auth0在我通过Angular应用程序中的锁进行身份验证时提供给我

我将这个令牌复制并粘贴到一个名为
token
的Ruby变量中

以下是我尝试解码令牌时在Rails控制台上得到的信息:

> JWT.decode token, nil, false
 => [{"iss"=>"https://benfranklinlabs.auth0.com/", "sub"=>"auth0|58306f91c08814e01015f434", "aud"=>"8NWWMzcPNXEvxogqwRar18hJuYAvsrG0", "exp"=>1479766470, "iat"=>1479730470}, {"typ"=>"JWT", "alg"=>"HS256"}]
这很好,只是我认为解码过程应该需要我的Auth0客户端的客户端机密。我正在使用Rails应用程序尝试解码令牌:

decode_键
等于:

JWT.base64url_decode Rails.application.secrets.auth0_client_secret
这一尝试失败了。我得到以下错误:

***JWT::VerificationError异常:引发签名验证

我想这是有道理的。如果我可以在不使用密钥的情况下很好地解码令牌,那么我想象我的令牌一定不是在考虑了Auth0客户端机密的情况下创建的。但我不知道这是事实

所以我的问题是:Knock似乎需要使用Auth0客户机密码解码令牌,但是使用我的客户机密码解码令牌不起作用。我怎样才能让它工作

编辑:

这是我的代币:
eyj0exaiijkv1qiljjjhbiijiuzi1nij9.eyjpc3mioijjhrwczyyw5rbglubfic5jb20viij3viijyxv0adb8ntgzmmdzmotfjmdg4trlmdewmtvmndm0iiiiyxvkijoijjjjjjjjjjjjjjjjjjjb3fft4cutvmi2i2uinjjjjljljljljai3nzjjjjjljljjjljljljjjjjjjjjjjljljj3nz3nz3nz3nz3nz3nz3nzz3nz3nz3nz3nzzzzz

这是我的客户ID:
j3JtzcbsiMI2GBdFvFoqEN38qKSVb6CE

这是我的客户秘密:
开发秘密

最近Auth0(不完全正确,接下来描述的更改将仅在2016年12月6日生效)改变了客户应用程序秘密的生成和编码方式。最初,客户端密码将生成并显示为Base64url编码字符串,这意味着您必须在使用它之前对其进行解码

对于新创建的应用程序或显式更新为不再使用Base64url编码模式的应用程序,Auth0仪表板上显示的客户端密码不再是Base64编码的,因此,在使用它之前不应尝试对其进行解码


如果遵循以下步骤,请使用提供的示例令牌和密码:

  • 通路
  • 粘贴您的令牌
  • 更新验证签名部分以包含您的
    开发秘密
    ,并选中该秘密为base64 encode的选项
  • 然后验证签名是否正确。这意味着令牌生成是正确的,问题在于我们如何在Ruby中验证它。您需要检查用于验证的Rails API是否采用任何编码,并以预期格式传递密码



    OP的注意事项:我最终解决的问题是手动对字符串进行base64编码(
    JWT.base64url\u编码“我的任意字符串”
    ),并将结果值粘贴到Auth0设置中的客户端机密中。

    啊,我需要澄清一下。我刚刚了解到
    JWT.decode令牌中的
    true
    ,decode\u键,true
    表示
    verify
    。如果将该参数设置为
    false
    ,则无论是否使用键,该参数都有效。如果我将该参数设置为
    true
    ,则无论是否使用键,它都会失败。谢谢您提供的信息。当尝试使用未解码的客户端密码对令牌进行解码时,我仍然会得到
    JWT::VerificationError:Signature verification(签名验证)
    。但要明确的是,当我使用Auth0客户端密码手动创建自己的令牌,然后尝试解码令牌时,我可以很好地解码令牌。只有Auth0创建的令牌似乎不起作用。请确认您复制了整个机密,并且没有包含任何尾随空格。此外,您还可以设置临时机密、生成令牌并重置机密。这样做之后,在您的问题中包括令牌和临时秘密,这将使外部故障排除更容易。还要确保令牌确实包含敏感信息。好的,我编辑了我的问题,将令牌和秘密包括在内。我最终找到了答案。如果我将客户机密码设置为
    ZGV2ZWxvcG1lbnRfc2VjcmV0
    ,这是
    JWT.base64url\u encode'development\u Secret'
    的输出,我可以毫无问题地解码我的Auth0令牌。如果你更新你的答案提到这一点,我会接受。
    JWT.base64url_decode Rails.application.secrets.auth0_client_secret