無効なトークンエラーのトラブルシューティング
アクセストークンを使うことなく、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つの方法があります。
(推奨)アプリケーションの署名アルゴリズムをHS256ではなく、RS256に変更します。
responseType
パラメーターの値を(デフォルトではなく)token id_token
に変更して、応答でアクセストークンを受け取るようにします。
アプリケーションの署名アルゴリズムをHS256ではなく、RS256に変更するには、以下を行います。
[Auth0 Dashboard]>[Applications(アプリケーション)]>[Applications(アプリケーション)]に移動し、アプリケーションの名前を選択して表示します。
[Settings(設定)]ページの下までスクロールし、[Show Advanced Settings(詳細設定を表示)]を選択します。
[OAuth]を選択して、[JsonWebToken Signature Algorithm(JSON Web Token署名アルゴリズム)]の値を[RS256]に変更し、[Save Changes(変更の保存)]を選択します。
APIの呼び出しにIDトークンを使用していて、このオプションを有効化する場合には、サーバーのコードを変更し、HS256ではなく、RS256署名アルゴリズムを使ってトークンを検証するようにします。IDトークンでのAPI呼び出しが非推奨であることに注意してください。
JWTのデコード、検証と生成にはJWTツールを使用することができます。