Entra ID(旧Azure AD)でユーザーアカウントを無効化したにもかかわらず、そのユーザーがまだアプリケーションにアクセスできるという現象が発生することがあります。これは、ユーザーが以前に取得したアクセストークンやリフレッシュトークンが有効期限内であるために起こります。本記事では、トークンが即座に失効しない理由と、その確認方法、強制的に失効させる手順を具体的に解説します。管理者の方が適切なユーザー管理とセキュリティ対策を実施するための参考にしてください。
【要点】この記事で確認すること
- 最初に見る場所: Entra ID管理センターの「サインインログ」と「ユーザーのトークン発行情報」
- 切り分けの軸: ユーザー状態(無効化済み)、トークンの有効期限、アプリ側のキャッシュ期間
- 注意点: ユーザー無効化だけではトークンが自動失効しないため、管理者による手動トークン失効が必要なケースがあります
ADVERTISEMENT
目次
なぜ無効化済みユーザーがアプリにアクセスできるのか?
Entra IDでは、ユーザーがアプリにサインインする際にアクセストークンが発行されます。このトークンは一定期間(通常60~90分)有効で、その間はユーザーが無効化されてもトークン自体は失効しません。また、リフレッシュトークンはさらに長い期間(最大90日間)有効であり、これを使って新しいアクセストークンを取得できます。その結果、ユーザーアカウントが無効化された後も、既存のトークンが有効な間はアプリにアクセスし続けることが可能です。
アクセストークンとリフレッシュトークンの違い
アクセストークンはアプリへの直接アクセスに使われる短命なトークンです。一方、リフレッシュトークンはアクセストークンが期限切れになったときに新しいアクセストークンを取得するために使われます。リフレッシュトークンの有効期間はアプリや条件付きアクセスポリシーによって異なりますが、標準では90日間です。ユーザーを無効化しても、リフレッシュトークンが残っていると自動的に新しいアクセストークンが発行され続けるため、事実上アクセスが継続します。
トークンのライフタイムと失効の仕組み
Entra IDでは、ユーザーが無効化されただけでは発行済みのトークンは自動的に無効になりません。トークンの失効は、以下のいずれかのタイミングで発生します。
- トークンの有効期限が切れたとき
- 管理者が明示的にトークン失効操作(Revoke-AzureADUserAllRefreshTokenなど)を行ったとき
- ユーザーのパスワードが変更されたとき(リフレッシュトークンが無効になる)
- 条件付きアクセスのポリシーが変更され、トークン再評価が必要になったとき
そのため、ユーザー無効化後もトークンが有効な間はアプリにアクセスできる状態が続きます。
トークン失効がすぐに反映されない理由
ユーザー無効化後すぐにアクセスをブロックできない理由は、トークンのライフタイム設計とアプリ側のキャッシュにあります。Entra IDはパフォーマンスと可用性を考慮して、トークンを即時検証しない設計になっています。
アクセストークンの標準有効期間
アクセストークンの既定の有効期間は60~90分です。この期間内であれば、ユーザーが無効化されてもトークンの署名は有効とみなされ、アプリはアクセスを許可します。無効化後、最大90分間はアクセスが可能な状態となります。
リフレッシュトークンの長期有効
リフレッシュトークンはデフォルトで90日間有効です。ユーザーが無効化されても、リフレッシュトークンが残っていれば、新しいアクセストークンを取得できます。さらに、リフレッシュトークンはローテーションされるため、一度発行されると長期間利用される可能性があります。
アプリ側のキャッシュとオフラインアクセス
一部のアプリ(特にモバイルアプリやSPA)は、オフラインキャッシュとしてトークンを保存します。ユーザーが無効化されても、キャッシュされたトークンが有効であればアプリは動作します。アプリがEntra IDに問い合わせを行わない限り、無効化状態は検知されません。
| 操作 | アクセス可否 | トークン状態 |
|---|---|---|
| ユーザー無効化直後 | 可(既存トークン有効) | アクセストークン有効、リフレッシュトークン有効 |
| アクセストークン期限切れ後 | 可(リフレッシュトークンで再取得) | アクセストークン失効、リフレッシュトークン有効 |
| リフレッシュトークン期限切れ後 | 不可(新規サインインが必要) | 両方失効 |
| 管理者によるトークン失効後 | 即時不可 | 強制失効 |
| パスワード変更後 | 即時不可(リフレッシュトークン無効) | リフレッシュトークン失効 |
無効化後もアクセスできるアプリを特定する方法
ユーザー無効化後、どのアプリにアクセスされているかを確認するには、Entra IDのサインインログとアクティビティレポートを活用します。以下の手順で調査してください。
サインインログの確認手順
- Entra ID管理センター(https://entra.microsoft.com)に管理者アカウントでサインインします。
- 左メニューから「監視と正常性」→「サインインログ」を選択します。
- フィルターで「ユーザー」を選び、無効化したユーザーのUPNを入力して検索します。
- 結果リストから、無効化後に記録されたサインインイベントを確認します。「状態」が「成功」のものは、トークンを使ってアクセスが許可された可能性が高いです。
- 各イベントの「アプリケーション」列で利用されたアプリを特定します。
- イベントの詳細を開き、「認証プロパティ」タブで「トークン発行」に関する情報を確認します。
Graph APIを使ったトークン一覧取得
管理者はMicrosoft Graph APIを使用して、特定ユーザーに発行されたリフレッシュトークンの存在を確認できます。ただし、Graph APIではアクセストークンの一覧は直接取得できませんが、サインインログから推測可能です。リフレッシュトークンの失効操作はPowerShellで行うことが一般的です。
ADVERTISEMENT
手動でトークンを強制失効させる手順
ユーザー無効化後、トークンを即座に失効させるには管理者の手動操作が必要です。以下にPowerShellとMicrosoft Graph APIを使った2つの方法を紹介します。
PowerShellを使用したトークン失効
- 管理者としてPowerShellを起動し、Install-Module AzureAD コマンドでAzureADモジュールをインストールします(未インストールの場合)。
- Connect-AzureAD コマンドでEntra IDに接続します。管理者アカウントでサインインしてください。
- Revoke-AzureADUserAllRefreshToken -ObjectId <ユーザーObjectId> を実行します。ObjectIdはユーザープロパティから取得できます。
- 実行後、そのユーザーのすべてのリフレッシュトークンが即座に失効します。アクセストークンは有効期限まで使用可能ですが、新しいアクセストークンは取得できなくなります。
- 確認として、ユーザーがアプリにアクセスできないことをテストします。必要ならアクセストークンが失効するまで待つか、パスワードを変更してすべてのトークンを無効にします。
Microsoft Graph API によるトークン失効
Graph APIを使用する場合、POST /users/{id}/revokeSignInSessions エンドポイントを呼び出します。これによりユーザーのすべてのサインインセッションとトークンが無効になります。PowerShellと同様の効果があります。
トークン失効の失敗パターンと注意点
トークン失効操作を行っても、期待通りにアクセスが遮断されないケースがあります。以下に主な失敗パターンと対策を挙げます。
失敗パターン1:アプリがオフラインキャッシュを使用している
モバイルアプリやデスクトップアプリがオフライン用にトークンをキャッシュしている場合、サーバー側で失効してもクライアントのキャッシュが残っているとアクセスが継続します。この場合、アプリのキャッシュをクリアするか、アプリ自体がEntra IDにアクセスしてトークン検証を行う仕様になっている必要があります。管理者はアプリの仕様を確認し、必要に応じてユーザーにキャッシュクリアを依頼してください。
失敗パターン2:条件付きアクセスポリシーが適用されていない
条件付きアクセスポリシーで「セッション制御」として「アプリのアクセスを要求」を設定していない場合、トークンが失効しても新しいトークンを発行する際にブロックされないことがあります。ユーザー無効化と組み合わせて、条件付きアクセスで「ユーザーが無効の場合アクセスをブロック」するポリシーを作成すると確実です。
失敗パターン3:サービスプリンシパル(アプリ)にユーザー割り当てが必要
アプリが「ユーザー割り当て必須」に設定されていない場合、無効化されたユーザーでもトークンがあればアクセスできます。アプリのプロパティで「割り当てが必要ですか?」を「はい」に設定し、無効化ユーザーを割り当てから削除することでアクセスをブロックできます。
管理者へ伝える情報と確認ポイント
トークン失効に関する問題を管理者に報告する際は、以下の情報を伝えてください。
- ユーザー無効化の日時と、アプリへの最終アクセス日時
- サインインログの該当イベント(成功したもの)の詳細
- アプリケーション名と、アプリがトークンキャッシュを使用しているかどうか
- 条件付きアクセスポリシーの設定状況
- PowerShellによるトークン失効の実行履歴
これらの情報をもとに、管理者は追加のポリシー設定やアプリ設定の見直しを検討できます。
よくある質問(FAQ)
Q1. ユーザーを無効化してからどのくらいでアクセスできなくなりますか?
アクセストークンの有効期限(通常60~90分)が切れるまではアクセス可能です。リフレッシュトークンがある場合は、さらに長期間(最大90日間)アクセスが続く可能性があります。即時に遮断したい場合は、上記のトークン失効操作を実施してください。
Q2. パスワードを変更すればトークンは失効しますか?
はい。ユーザーのパスワードを変更すると、そのユーザーに発行されたすべてのリフレッシュトークンが無効になります(アクセストークンは有効期限まで有効)。パスワードリセットはトークン失効の簡易的な方法として有効です。ただし、ユーザーが再度サインインできてしまうため、無効化と併用することをお勧めします。
Q3. すべてのアプリでトークン失効が効かないのはなぜですか?
アプリによっては独自の認証キャッシュを持っていたり、OAuth2.0の「インプリシットグラント」を使用している場合、トークン失効が即時に反映されないことがあります。また、アプリがEntra IDのトークン検証エンドポイントを呼び出さない場合、トークンが無効でもアプリ側が気づきません。Microsoftが推奨するMSALライブラリを使用しているアプリでは、トークン失効が適切に処理されます。
Q4. トークンを確認するための管理ツールはありますか?
Entra ID管理センターのサインインログ、PowerShellのGet-AzureADUserRefreshTokenコマンド(非公開)、Microsoft Graph Explorerなどが利用できます。ただし、アクセストークンの中身を直接確認するには、JWTデコードツール(jwt.msなど)を使ってトークンをデコードする必要があります(ただし、トークン自体は管理者も取得できない場合があります)。
まとめ
ユーザーアカウントの無効化だけでは、既存のトークンが有効である限りアプリへのアクセスを完全に遮断できません。アクセストークンは最長90分、リフレッシュトークンは最長90日間有効であるため、管理者は無効化と同時にトークン失効操作を行う必要があります。サインインログの確認とPowerShell/Graph APIによる強制失効が効果的です。また、条件付きアクセスポリシーやアプリの設定を見直すことで、より確実なブロックが可能になります。適切なトークン管理を実施し、セキュリティインシデントを未然に防ぎましょう。
ADVERTISEMENT
超解決 リモートワーク研究班
Microsoft 365の導入・保守を専門とするエンジニアグループ。通信障害やサインイン不具合など、ビジネスインフラのトラブル対応に精通しています。
Office・仕事術の人気記事ランキング
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
