Entra参加(ハイブリッドEntra参加)した端末にログインした後に、クライアントアプリで対話的な認証を回避する方法(SSO関連)

※※※本記事は、内容が不確かな部分もある可能性があるため、あくまで参考情報としてください。

前提

・クライアントアプリは、SWG/ZTNA製品であり、端末起動後に自動的に起動するようになっている

・SWG/ZTNAの認証はEntra IDで実施している(SSO構成済み)

要件

Entra参加(ハイブリッドEntra参加)した端末にログインした後に、再度、クライアントアプリで対話的な認証をユーザに実施させたくない。

実現方法

WebView2を使用する

要点

クライアントアプリが、WebView2を使用して適切に、ブラウザ機能をキック(起動)したら、後は裏側でPRTトークンがEntra IDに渡されて、IDトークンがEntra IDからブラウザに返されて、SSOが完了する

関連シーケンス図

https://learn.microsoft.com/ja-jp/entra/identity/devices/concept-primary-refresh-token?tabs=windows-prt-issued%2Cwindows-prt-used%2Cwindows-prt-renewal%2Cwindows-prt-protection%2Cwindows-apptokens%2Cwindows-browsercookies%2Cwindows-mfa#browser-sso-using-prt

  • 少し図が、今回のケースと合致していないですが、Aは既に完了している前提です(PRTトークンを端末がEntra IDから取得できている前提)
  • Cloud AP Pluginは、WIndows OS内の機能。他のコンポーネントから見るとPRTトークンを管理している機能に見えている
  • Native Clientは、Edge内の機能(Chromeなどでも本シーケンスを実現したい場合は、拡張機能のインストールが必要な場合があるとのことです※MSサポート情報)。そのため、これがクライアントアプリではありません(Native Clientという名称から、クライアントアプリと混同しそうですが、Native Clientは、クライアントアプリのことではありません)。上記の図に、クライアントアプリは存在していません。
  • 上記図に記載はないですが、クライアントアプリが起動すると、クライアントアプリに実装するWebView2機能(クライアントアプリからブラウザを起動する機能とのこと)により、ブラウザを立ち上げます(クライアントアプリに、https://learn.microsoft.com/ja-jp/dotnet/api/microsoft.web.webview2.core.corewebview2environmentoptions.allowsinglesignonusingosprimaryaccount?view=webview2-dotnet-1.0.1150.38 このページの実装が必要とのことです※1
  • ※1の通り、適切な方法でブラウザが起動されると、B~Eで、Cloud AP Plugin、Native Client間でやりとりが行われ、PRTトークンが、ブラウザに渡され、ブラウザからEntra IDにPRTトークンが渡されます。この辺りのやりとりには、クライアントアプリは関与しません。
  • ※1においてドキュメント通りの実装が、クライアントアプリ側でなされていない場合は、B~Eのプロセスのいずれかが中断され、SSOが完了しないとのことです(どのプロセスが中断されるかは、MSサポートにもブラックボックスで不明とのこと)

WebView2について (ChatGPT情報)

WebView2 は、Microsoft が提供している Windows向けのWeb表示コンポーネント です。
つまり、「ブラウザの機能をアプリの中に埋め込む技術」 です。外部ブラウザを「起動」するのではなく、アプリ内部でブラウザの機能を動かす 仕組みです

所感(結論)

  • 込み入った内容であるため、机上だけで結論を出すのは危険
  • 実際の環境(ブラウザ種別、バージョン、クライアントアプリなど)で実際の挙動がどうなるか検証する必要がある