Entra 参加の PC にサインインすると、Outlook や Teams、ブラウザの Microsoft 365 を開いても、もう一度パスワードを聞かれることはほとんどありません。このシングルサインオン(SSO)を支えているのが、PRT(Primary Refresh Token)です。
この記事では、PRT がどんなものか、いつだれが発行するのか、端末の鍵と TPM でどのように守られているのか、そしてアプリやブラウザの SSO でどう使われるのかを、図とシーケンスで説明します。Entra 参加・ハイブリッド参加の違いは「ドメイン参加・Entra参加・ハイブリッド参加の違い」の記事で説明しているので、あわせて読むと流れがつかみやすくなります。
- PRT とは何か。Kerberos の TGT と比べてどこが似ていて、どこが違うか
- PRT の発行の流れと、端末の鍵・セッションキー・TPM の役割
- アプリやブラウザが PRT でサインインを省けるしくみ
- PRT の期限・更新・無効になるときと、dsregcmd での確かめ方
PRT とは
PRT は、Windows にサインインしたときに Microsoft Entra ID が発行する、アプリごとのトークンをもらうための「親の通行証」です。アプリは、PRT を使ってそれぞれのトークン(アクセストークン)をもらうので、利用者はパスワードを入れ直さずにすみます。
この関係は、オンプレの Kerberos の TGT とよく似ています。TGT を見せてサービスごとのチケットをもらうように、PRT を見せてアプリごとのトークンをもらいます。違いは次のとおりです。
| 項目 | Kerberos の TGT | PRT |
|---|---|---|
| 発行する人 | オンプレの DC(KDC) | Microsoft Entra ID |
| 使う先 | ファイルサーバなど、オンプレのサービス | Microsoft 365 など、Entra ID につながるクラウドのアプリ |
| 中身 | KDC の鍵で暗号化。PC は読めない | Entra ID が暗号化。PC は読めない |
| 期限 | 既定で10時間(7日まで更新できる) | 90日(使っているあいだは更新され続ける) |
| 端末との結び付き | セッションキーを持つ人が使える | TPM が守るセッションキーで、その端末に結び付ける |
Kerberos のしくみは「Kerberos(ケルベロス)認証とは?」の記事で説明しています。PRT の中身は Entra ID だけが読める形になっていて、PC の側から中を見ることはできません。
PRT がもらえる端末
| 端末の状態 | PRT をもらうタイミング |
|---|---|
| Entra 参加 | Windows へのサインインのとき。サインインする前に PRT の発行が終わる |
| ハイブリッド参加 | Windows へのサインインのとき。オンプレの AD でサインインが済んだあと、裏で PRT をもらう |
| Entra 登録 | 仕事のアカウントを追加したとき(設定 ›› アカウント ›› 職場または学校にアクセスする など) |
このほか、デバイスを登録していない個人の端末でも、ブラウザなどで「登録されていない端末の PRT」が使われることがあります。ただし、端末の状態を条件にした条件付きアクセスを満たせるのは、登録された端末の PRT だけです。
PRT にかかわる部品
Windows の中では、次の部品が PRT を扱います。
| 部品 | 役割 |
|---|---|
| CloudAP と Entra の CloudAP プラグイン | Windows のサインインで資格情報を Entra ID に確かめてもらい、PRT を受け取って持つ。Entra 参加・ハイブリッド参加では、ここが PRT の持ち主 |
| WAM と Entra の WAM プラグイン | アプリからのトークンの要求を受け、PRT を使ってアクセストークンをもらう。ブラウザの SSO も助ける |
| TPM | 端末の鍵、トランスポートの鍵、セッションキーを、取り出せない形で守るハードウェア |
CloudAP は、LSA(LSASS)の中で動く、クラウド向けのサインインの部品です。LSA と認証の部品の関係は「LSASS・SSPI・Negotiateとは?」の記事で説明しています。
前提:デバイスの登録で作る2つの鍵
PRT を端末に結び付けるために、Entra 参加やハイブリッド参加でデバイスを登録するとき、PC は2組の鍵を作ります。
どちらの鍵も、秘密鍵は TPM の中に置かれ、公開鍵だけが Entra ID に送られます。Entra ID は、端末の鍵の公開鍵で「この要求は本当に PC01 が署名したものか」を確かめ、トランスポートの鍵の公開鍵で、PC01 だけが開けられる形にしてセッションキーを届けます。公開鍵と秘密鍵のしくみは「暗号の基礎」の記事で説明しています。
PRT の発行(最初のサインイン)
Entra 参加の PC に、パスワードで初めてサインインするときの流れです。
- 利用者がパスワードを入力すると、CloudAP のプラグインは、このユーザーの認証先(Entra ID か、AD FS などのフェデレーションか)を Entra ID に問い合わせます
- Entra ID から、1回だけ使う乱数(nonce)をもらいます
- 資格情報と nonce をまとめ、端末の鍵で署名して Entra ID に送ります
- Entra ID は、資格情報、nonce、端末の署名、そしてその端末がテナントで有効かを確かめ、PRT とセッションキーを払い出します。セッションキーは、トランスポートの鍵の公開鍵で暗号化して送ります
- PC01 の TPM がトランスポートの鍵でセッションキーを開け、TPM の鍵で包み直して、PRT と一緒に保存します
端末の署名が確かめられないと、PRT は発行されません。また、PRT を発行するときや更新するときには、条件付きアクセスは評価されません。条件付きアクセスが評価されるのは、PRT を使ってアプリのトークンをもらうときです。
Entra 参加の PC では、PRT の発行が終わってから Windows にサインインできます。いっぽうハイブリッド参加の PC では、オンプレの AD が主役なので、DC から TGT をもらえればサインインでき、PRT はその裏で(非同期で)もらいます。そのため、AD FS などのフェデレーションに問題があると、Windows にはサインインできるのにクラウドのアプリで SSO できない、ということが起きます。
セッションキー:PRT を「この端末だけのもの」にする
PRT といっしょに届くセッションキーは、PRT を使うたびに「この PRT の正しい持ち主は自分だ」と示すための鍵です(Proof-of-Possession、所持の証明)。
PC01 は、PRT を使う要求(トークンの要求や PRT の更新)に、必ずセッションキーで署名を付けます。Entra ID は、発行したときに PRT の中に入れておいたセッションキーで、その署名を確かめます。セッションキーは TPM に守られていて、ほかの OS の部品も取り出せません。そのため、PRT は PC01 の中でしか働かず、セッションキーの署名がない要求を Entra ID は受け付けません。
Microsoft は、デバイスの登録には TPM 2.0 を推奨しています。dsregcmd /status の TpmProtected が YES なら、端末の鍵が TPM で守られています。
アプリのトークンをもらう(WAM)
Outlook や Teams などのアプリは、自分で PRT を扱いません。Windows の WAM にトークンを頼み、WAM が PRT を使ってトークンをもらってきます。
WAM は、もらったトークンのうち、アクセストークンだけをアプリに渡します。リフレッシュトークン(アクセストークンを更新するためのトークン)は WAM が自分で持ち、次からはそれを使って更新します。アプリにパスワードもリフレッシュトークンも渡らないので、アプリごとにサインインし直す必要がなく、トークンの扱いも Windows の中で守られます。
このとき、アプリに求められている条件付きアクセス(多要素認証や準拠したデバイスなど)が評価されます。条件を満たしていなければ、WAM がサインインの画面を出して、追加の確認を求めます。
ブラウザの SSO
ブラウザで Microsoft 365 のサイトを開いたときも、PRT で自動的にサインインできます。Microsoft Edge は標準で対応しています。Google Chrome は「Microsoft Single Sign On」拡張機能、または Chrome 自体の対応で使えます。Firefox はバージョン 91 以降で、Windows の SSO の設定を有効にすると使えます。
ブラウザが PRT そのものを受け取るわけではありません。ブラウザは、開こうとしているのが Microsoft のサインインの URL であることを確かめてから、CloudAP に「PRT を使ったクッキー」を頼みます。このクッキーはセッションキーで署名されていて、ページから受け取った nonce も入っています。Entra ID はそれを確かめて、ブラウザ用のトークンとセッションのクッキーを発行します。なお、InPrivate などのプライベートなウィンドウでは、この SSO は働きません。
期限と更新
PRT は発行から90日有効で、使っているあいだは更新され続けます。CloudAP は、サインインしているあいだ4時間ごとに PRT を更新します。インターネットにつながっていなければ、つながってから次にサインインしたときに更新します。WAM も、アプリのトークンを頼むときに新しい PRT を受け取ることがあり、そのときは CloudAP が Entra ID に確かめてから新しい PRT に置き換えます。
「PC をずっと使っていれば、ずっとサインインし直さなくてよい」のは、このためです。組織として定期的な再認証を求めたいときは、条件付きアクセスの「サインインの頻度」のセッション制御を使います。
PRT と多要素認証・条件付きアクセス
PRT には、ユーザーと端末についての情報(クレーム)が入っていて、Entra ID は条件付きアクセスの判断にそれを使います。たとえば「準拠したデバイス」や「ハイブリッド参加したデバイス」を条件にするポリシーは、PRT が示す端末の情報で判断されます。
PRT は、次の場合に「多要素認証が済んでいる」というクレームを持ちます。このクレームは、PRT でもらうアプリのトークンにも引き継がれるので、アプリごとに多要素認証を求められずにすみます。
| 場面 | 動き |
|---|---|
| Windows Hello for Business でサインインした | Hello 自体が多要素認証なので、PRT に多要素認証のクレームが付く。PRT を更新するたびに、そのクレームも更新される |
| アプリのサインインで多要素認証をした | WAM のサインイン画面で多要素認証をすると、そのとき更新された PRT にクレームが付く。期限はディレクトリの設定に従う |
Windows は、サインインに使った資格情報(パスワード、Hello、スマートカード)ごとに PRT を分けて持ちます。そのため、パスワードでサインインしたときの PRT に、Hello でサインインしたときの多要素認証のクレームが混ざることはありません。
PRT が無効になるとき
| きっかけ | 何が起きるか |
|---|---|
| ユーザーを無効化・削除した | PRT でアプリのトークンをもらえなくなる。すでにその PC にサインインしたことがあれば、CloudAP が無効だと気づくまではキャッシュでサインインできる |
| デバイスを無効化・削除した | その端末の PRT が無効になり、すべてのトークンも使えなくなる。サインインはできても SSO はできない |
| パスワードを変えた | パスワードでもらった PRT は無効になる。新しいパスワードでサインインし直すと、新しい PRT をもらう |
| TPM が故障した | 鍵を使えないので PRT も使えなくなる。Windows がデバイスの登録をやり直す。ハイブリッド参加は自動、Entra 参加・Entra 登録は端末の管理者の操作が必要 |
確かめ方:dsregcmd /status
PRT があるかどうかは、dsregcmd /status の「SSO State」で確かめられます。SSO State は、サインインしているユーザーの状態を表示するので、管理者に昇格せず、そのユーザーのままで実行します。
| 項目 | 意味 |
|---|---|
| AzureAdPrt | サインインしているユーザーの PRT があれば YES |
| AzureAdPrtUpdateTime | PRT が最後に更新された時刻(UTC) |
| AzureAdPrtExpiryTime | 更新されなかった場合に PRT が切れる時刻(UTC) |
| EnterprisePrt | AD FS から PRT をもらっていれば YES(ハイブリッド参加で AD FS を使う環境) |
| TpmProtected(Device Details) | 端末の秘密鍵が TPM で守られていれば YES |
AzureAdPrt が NO のときは、まず「Device State」で Entra 参加かハイブリッド参加になっているか、「Device Details」の DeviceAuthStatus が SUCCESS か(デバイスが無効化・削除されていないか)を確かめます。PRT の取得に失敗したときは、SSO State に診断の情報が表示されることがあります。
確認に使うコマンド
PC01(コマンドプロンプト・サインインしたユーザー):参加の状態・PRT・端末の情報を表示する
dsregcmd /status
PC01(コマンドプロンプト・サインインしたユーザー):PRT と TPM に関係する行だけを表示する
dsregcmd /status | findstr /i "AzureAdJoined DomainJoined AzureAdPrt TpmProtected DeviceAuthStatus"
PC01(PowerShell・管理者):TPM があり、使える状態かを表示する
Get-Tpm
まとめ
| 項目 | ひとことで |
|---|---|
| PRT | サインインで Entra ID からもらう「親の通行証」。アプリごとのトークンをもらうのに使う |
| 発行 | 資格情報と nonce を端末の鍵で署名して頼む。Entra ID は資格情報・署名・端末を確かめる |
| セッションキー | PRT と一緒に届く鍵。TPM が守り、PRT を使う要求に署名する。PRT をその端末に結び付ける |
| アプリ・ブラウザ | WAM が PRT でトークンをもらい、アクセストークンだけをアプリに渡す。ブラウザは署名付きの PRT クッキーを使う |
| 期限 | 90日。使っているあいだは4時間ごとなどに更新され続ける |
| 無効になるとき | ユーザーやデバイスの無効化・削除、パスワードの変更、TPM の故障 |
| 確かめ方 | dsregcmd /status の AzureAdPrt・TpmProtected |
PRT は、利用者からはまったく見えませんが、Entra 参加の端末で「サインインし直さなくてよい」体験と、端末を条件にした条件付きアクセスの両方を支えています。そして、その安全性は、端末の鍵とセッションキーを TPM が守ることで成り立っています。
コメント