無効なトークンエラーのトラブルシューティング

アクセストークンを使うことなく、HS256署名されたIDトークンを解析する

エラーメッセージ:HS256署名アルゴリズムで署名され、アプリケーション(ブラウザーなど)がシークレットを保管できないため、IDトークンを検証できません。

原因

auth0.jsバージョン9およびLockバージョン11以降、HS256で署名されたIDトークンは破棄され、ユーザー情報の取得には/userinfoが呼び出されます。

/userinfoの呼び出しにはアクセストークンが必要です。認証でアクセストークンを要求しない場合には、次のエラーメッセージを受け取ります: The id_token cannot be validated because it was signed with the HS256 algorithm and public applications (like a browser) can’t store secrets.Please read the associated doc for possible ways to fix this.(HS256で署名され、公開アプリケーション(ブラウザーなど)がシークレットを保管できないため、このトークンは検証できません。可能性のある修正方法については、関連するドキュメントをお読みください。)

修正

このエラーを修正するには次の2つの方法があります。

  1. (推奨)アプリケーションの署名アルゴリズムをHS256ではなく、RS256に変更します。

  2. responseTypeパラメーターの値を(デフォルトではなく)token id_tokenに変更して、応答でアクセストークンを受け取るようにします。

アプリケーションの署名アルゴリズムをHS256ではなく、RS256に変更するには、以下を行います。

  1. [Auth0 Dashboard]>[Applications(アプリケーション)]>[Applications(アプリケーション)]に移動し、アプリケーションの名前を選択して表示します。

  2. [Settings(設定)]ページの下までスクロールし、[Show Advanced Settings(詳細設定を表示)]を選択します。

  3. [OAuth]を選択して、[JsonWebToken Signature Algorithm(JSON Web Token署名アルゴリズム)]の値を[RS256]に変更し、[Save Changes(変更の保存)]を選択します。

APIの呼び出しにIDトークンを使用していて、このオプションを有効化する場合には、サーバーのコードを変更し、HS256ではなく、RS256署名アルゴリズムを使ってトークンを検証するようにします。IDトークンでのAPI呼び出しが非推奨であることに注意してください。

JWTのデコード、検証と生成にはJWTツールを使用することができます。