Azure ADにおけるAADSTS700025(無効なJWT)エラーの解決方法
By Mirko Peters ·
AADSTS700025エラー、通称「無効なJWT」というやっかいなメッセージに遭遇している場合、Azure Active Directoryの認証中に発生したのはあなただけではありません。この問題はトークンの検証に失敗するとサインインやAPIアクセスを阻害し、ログインを止めてしまいます。Microsoftベースのアプリケーションを構築、管理、保護する人にとって、このエラーを理解することは重要です。社内ツールでも顧客向けポータルでも同じです。
Automatically translated with AI from the original post. Read the English original

AADSTS700025エラーに遭遇している場合、それは「無効なJWT」として知られる厄介なメッセージです。Azure Active Directoryの認証中に発生しても、珍しい問題ではありません。トークンの検証が通らないとサインインやAPIアクセスが止まり、ログインができなくなります。Microsoftベースのアプリケーションを構築、管理、保護する方にとって、このエラーの理解は欠かせません。社内ツールでも顧客向けポータルでも同じです。
本記事では、AADSTS700025が実際に何を意味するのか、資格情報の検証でつまずきやすい原因や見落としやすい点、そしてJWTのデコードと検証に関する実践的な手順を解説します。目的は、根本原因をより早く特定し、問題を確実に解決して、今後同様のトラブルを防ぐことです。認証エラーを一緒に分解して、安全かつ効率的に問題を解消していきましょう。
AADSTS700025と無効なJWT署名エラーの理解
AADSTS700025エラーは、Azure ADが「このトークンは検証できません」と伝えている状態です。アプリケーションやサービスが、Azure ADが信頼できないJWT(JSON Web Token)を使ってサインインしようとすると発生します。認証プロトコルの観点では、通常、トークンの署名が有効ではないことを意味します。そのためAzureはセキュリティフラグを立て、サインインやAPI呼び出しを拒否します。
このエラーは、主にOAuth 2.0またはOpenID Connectのフローで、Azure ADがトークンを受け取り検証しようとした時点で表示されます。Microsoftは「AADSTS」コードを使って、何が問題だったのかを簡潔に示しています。700025はJWTの署名検証に失敗したことを表します。クライアント、API、ミドルウェアがAzureに認識・信頼されるトークンを生成できていなければ、このエラーが返されます。
「無効なJWT署名」は、ほぼ例外なく、そのトークンの作成、フォーマット、署名方法に問題があることを意味します。シークレット、証明書、署名アルゴリズムのいずれかが、Azure ADの期待と一致していないか、通信途中でペイロードが改ざんされている可能性があります。これらのコードはMicrosoftのエラー検索サイトやドキュメントで確認できますが、診断の考え方は常に同じです。トークンを検証できないため、認証が完全に止まります。
要するに、ユーザーやサービスがAADSTS700025に遭遇した場合、Azure ADは「このユーザーが名乗る本人であるとは認められない」と伝えているのです。だからこそ、無効なJWTの原因を切り分けることが、アプリとデータを安全に保ち、ユーザーの満足度を維持するうえで極めて重要になります。
無効なJWTエラーの主な原因と資格情報のトラブルシューティング
AADSTS700025の失敗の多くは、アプリケーションが資格情報を扱う際の見落としやすいミスに起因します。クライアントシークレット、証明書、アサーションを使用している場合、わずかなミスでもAzure ADが即座に拒否するトークンになってしまいます。入力ミス、古いシークレット、証明書の拇印(サムプリント)の不一致が、不正なJWTや明らかに無効なJWTの主な原因です。
clientsecretcredential、clientcertificatecredential、clientassertioncredentialなどのフローでは、資格情報の構成を正確に設定する必要があります。余分なスペース一つ、キーの不一致、署名アルゴリズムの取り違えがあっても、Azureはエラーを返します。開発者がシークレットをコードに直接書いたりコピーしたり、ライブラリを独自に改変したり、必要なクレームやアプリの登録設定を無視したトークン発行処理を自作したりすることも、よくある失敗の原因です。
Azureポータルでの手動変更も忘れてはいけません。権限やアプリの設定が意図せず変わることがあります。登録済みアプリのリダイレクトURIや署名アルゴリズムを変更したのにコードを更新しなければ、即座に署名エラーが発生します。APIのアクセス許可を必ず確認し、スコープが実際のAzureロールおよび同意済みのアクセスと一致しているかを確かめてください。管理者の同意が欠けていたり、スコープが一致していなかったりすると、トークンが拒否される原因になります。
トラブルシューティングでは、まず資格情報の提供元を再確認します。シークレットの有効期限が切れていないか、証明書が有効で、コードが参照する場所に保存されているかを確かめましょう。アプリの登録内容にAzureポータル上の変更やエラーがないか、特にリダイレクトURLとキーの有効期限を確認してください。このチェックで大半のケースは解決でき、後で長時間のデバッグに追われることも防げます。
Azure ADのJWTをリアルタイムでデコードおよび検証する
推測に頼る必要はありません。JWT に何が問題なのかは、トークンを取得して自分で確認できます。今すぐにでもです。jwt.io のようなツールを使えば簡単です。Azure が発行したトークンをコピーして貼り付けるだけで、ペイロードがすぐに表示され、署名、クレーム、アルゴリズム、有効期限を検証できます。不足しているクレームや明らかな署名の不一致を見つける最も手早い方法です。
もう一歩進んで、より実践的に取り組みたい場合は、トークンをプログラムでデコードし、検証してみてください。Node.js では jsonwebtoken などのライブラリを使い、OpenID 構成で公開されている Azure の公開鍵を使ってトークンを解析・検証できます。Python 開発者は同じ作業に PyJWT を利用できます。JWK(JSON Web Key)を取得してから、トークンが正しく署名されていて期限切れではないことを確認します。
こうした方法により、クロックスキュー(トークンの iat または exp の時刻がサーバーの時刻とずれている状態)、誤った authority、署名の破損といった問題を検出できます。たとえば Docker や Kubernetes を実行している場合、システム時刻が同期されていないと、他の環境では問題なく見えるトークンでも、Azure の検証では失敗することがあります。時計とクレームは必ず両方確認してください!
結論として、トークンを自分でデコードすることで主導権を握れます。問題を特定して修正するのは、設定や資格情報を闇雲に触るより格段に速く、「試行錯誤」のデバッグを繰り返してチーム全員の忍耐を消耗させることも避けられます。
AADSTS700025 を防ぐ:ベストプラクティス、エラー処理、コミュニティからのサポートの活用
無効な JWT による面倒なトラブルを未然に防ぎたいなら、最も賢明な方法は MSAL や Azure SDK などの公式 Microsoft ライブラリを使ってトークンを生成することです。これらのツールには署名、形式、クレームの要件が組み込まれているため、同じ車輪を一から作り直す必要がありません(タイヤの修理でミスをすることもありません)。
コードでは、認証エラーを必ず捕捉し、適切に処理してください。失敗したサインインについては構造化されたエラーログを実装し、catch ブロックで AADSTS コードを表面化させて、対処できるようにしましょう。例外を握りつぶしたり、汎用的な失敗メッセージを表示したりするのはやめてください。問題が起きたときに貴重な時間を節約でき、管理者や Microsoft サポートに提示できる記録も残ります。
もう一つの重要な習慣は、資格情報とアプリの登録を頻繁に確認することです。有効期限が切れる前にシークレットと証明書をローテーションし、返信 URL を検証し、署名アルゴリズムの不一致(RS256 と HS256)に注意してください。大規模な組織では、アプリの登録とトークンを安全かつ最新の状態に保つために、こちらの Azure ガバナンス戦略ガイドで取り上げているような、自動化されたプロセスやガバナンスポリシーを設定しましょう。
行き詰まったときも、あなたは決して一人ではありません。GitHub には Microsoft とコミュニティが提供するサンプルコードが豊富にあります。報告された問題を検索したり、スタックトレースを共有したりすると、すぐに解決策が見つかることがあります。Microsoft の公式フォーラムやフィードバックチャネルでは、AADSTS エラーのパターンを報告したり、既知の問題を確認したりできます。こうしたコミュニティを活用して解決策を集め、トラブルシューティングのスキルを磨き、次回はJWT を確実に正しい状態にしておきましょう。