2016-11-21 29 views
2

角度アプリケーションでLockを使って認証したときAuth0が提供したJWTがあります。Auth0トークンのデコードに問題がある

このトークンをコピーしてtokenという名前のRuby変数に貼り付けました。

> 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のコンソール上で何を得るのです。私はトークンlike thisを解読しようとする私のRailsアプリケーションでKnockを使用しています:

JWT.decode token, decode_key, true, options.merge(verify_options) 

そしてdecode_keyはこれに等しいです:

JWT.base64url_decode Rails.application.secrets.auth0_client_secret 

そして、この試みは失敗します。次のエラーが表示されます。

*** JWT::VerificationError Exception: Signature verification raised

これは意味があると思います。キーを使わずにトークンをデコードすることができれば、Auth0 Client Secretを組み込んだトークンを作成してはいけないと思いますが、実際にはこれは分かりません。

私の質問はこれです:KnockはAuth0 Client Secretを使ってトークンを復号する必要があるようですが、Client Secretを使ってトークンを復号することはできません。どうすればそれを稼働させることができますか?

編集:

はここに私のトークンです:j3JtzcbsiMI2GBdFvFoqEN38qKSVb6CE

ここに私のクライアントは秘密です:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2JlbmZyYW5rbGlubGFicy5hdXRoMC5jb20vIiwic3ViIjoiYXV0aDB8NTgzMDZmOTFjMDg4MTRlMDEwMTVmNDM0IiwiYXVkIjoiajNKdHpjYnNpTUkyR0JkRnZGb3FFTjM4cUtTVmI2Q0UiLCJleHAiOjE0Nzk3NzE4ODMsImlhdCI6MTQ3OTczNTg4M30.MuUbdC7TLBcteKCry-sioeZVStI9TZ6TdsP5WG_6K08

はここに私のクライアントIDですdevelopment_secret

+0

ああ、私は明確化する必要があります。私は 'JWT.decode token、decode_key、true'の' true'が 'verify'を意味することを知りました。その引数を 'false'に設定すると、キーを使用するかどうかにかかわらず動作します。その引数を 'true'に設定すると、キーを使うかどうかにかかわらず失敗します。 –

答えて

1

Auth0 は最近 (正確に真実ではありません、 次の変更はDecembeでのみ有効ですr 6th 2016)は、クライアントアプリケーションのシークレットが生成され、エンコードされる方法を切り替えました。もともと、クライアントシークレットは生成され、Base64urlでエンコードされた文字列として表示されるため、使用する前にデコードする必要がありました。

新しく作成されたアプリケーションまたはBase64urlエンコードモードを使用しないように明示的に更新されたアプリケーションの場合、Auth0ダッシュボードに表示されるクライアントシークレットはBase64エンコードされなくなりました。

次の手順を実行する場合は、提供されるサンプルは、トークンとシークレット

  1. アクセスjwt.io
  2. はあなたdevelopment_secretを含めると確認するために検証し、署名セクションあなたの
  3. トークンの更新を貼り付け秘密はbase64エンコードであるというオプション

th署名が正しく検証されているか。これは、トークンの生成が正しいことを意味し、Rubyで検証する方法に問題があります。検証のためにRails APIがエンコードを想定しているかどうかをチェックし、そのシークレットを予想されるフォーマットで渡す必要があります。 OPから


注:最終的には私のためにそれを固定するものは、手動でbase64でエンコード文字列(JWT.base64url_encode 'my_arbitrary_string')をすることだったと私Auth0の設定でクライアントの秘密に結果の値を貼り付けます。

+0

情報ありがとうございます。復号化されていないクライアントシークレットを使用してトークンをデコードしようとすると、 'JWT :: VerificationError:Signature verification raised 'が表示されます。 –

+0

しかし、私のAuth0 Client Secretを使って手動で自分のトークンを作成し、そのトークンを解読しようとすると、トークンをうまく解読できます。 Auth0で作成されたトークンだけが機能していないようです。 –

+0

シークレット全体をコピーし、余白がないことを確認してください。さらに、一時的な秘密を設定し、トークンを生成して秘密をリセットすることもできます。その後、あなたの質問にトークンと一時的な秘密を含めると、外部のトラブルシューティングが容易になります。また、トークンに機密情報が含まれていることを確認してください。 –

関連する問題