はじめに
こんにちは、今回はシングル サインオン構成であるにもかかわらず Office 365 ProPlus からサインインする際に、パスワードが要求される動作について取り上げたいと思います。
なお、後半には回避策を載せておりますが、AD FS をお使いの環境にのみ有効な方法である点、予めご了承ください。
問題点
まずは、本記事でとりあげる問題点についてです。Office 365 ProPlus では、初回のライセンス認証、Office 365 との接続、Outlook のプロファイル作成…などなど、さまざまなシナリオで Azure AD へのサインインを求められます。
「シームレス SSO や、AD FS の Windows 認証を設定しているにもかかわらず、パスワード入力が求めらるんですが…」といったこと、ございませんか?
☝ の GIF は私の検証環境です。AD FS とのフェデレーション 且つ 認証方式を Windows 統合認証に設定しているので、ブラウザからはパスワードを入力せずにサインインできるのですが、Office 365 ProPlus ではフォーム認証が表示されます。
また、マネージド環境 & シームレス SSO の環境でも、Office 365 ProPlus のサインインにはパスワード入力が求めらるかと思います。
認証が求められる原因
認証が求められる原因は、Office 365 ProPlus が Azure AD に “prompt=login” を付与してサインイン要求を送信するためです。
prompt=login とは、OpenID Connect で定義されているリクエスト パラメーターの 1 つです。クライアント アプリケーションが認可エンドポイントに送信するパラメーターで、クライアントとの対話の種類を決定するものです。
こちらの公開情報に記載されている通り、prompt パラメーターに指定可能な値は、login / none / select_account / consent の 4 つです。prompt=login が指定されていると、シングル サインオンを無視して、ユーザーに資格情報の入力を強制させます。
実際に、Office 365 ProPlus からライセンス認証した際の Fiddler を確認すると、たしかに prompt=login を付加して認可エンドポイントへサインイン要求を送信している様子が確認できます。
まとめると、Office 365 ProPlus は、prompt=login をセットしてサインイン要求を送信するため、シングル サインオンが無効化され、認証が発生している状況です。
なぜ、フォーム認証が表示されているの?
さらに詳しい公開情報がありました。
既定では、prompt=login を受信した Azure AD は、これを WS-Federation が理解できるパラメーターに変換してクライアント経由で AD FS へ返します。具体的に☟の 2 つのパラメーターに変換します。
- wfresh=0
- wauth=https://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/password
それぞれについて OASIS では次のように記載がありました。つまり、wfresh=0 を指定することで強制的に認証が発生すること、および wauth で認証方法を指定しているということですね。
実際に、フォーム認証が求められたときの AD FS 監査ログを確認すると、PrimaryAuth が /windows ではなく、/password でサインインが要求されていることが分かります。
AD FS では、認証方法ごとに URI を定義されており、今回 Azure AD が変換する /password は、ユーザー名とパスワードによる認証であることが分かります。つまり、このパラメーターがフォーム認証が表示される原因なのです。
回避策 (AD FSのみ)
先ほど紹介した公開情報にも記載されていますが、Set-MsolDomainFederationSettings コマンドの PromptLoginBehavior オプションで、Azure AD が AD FS に通知するパラメーターを制御することができます。
PromptLoginBehavior を Disable にすることで、wauth を通知しないようにするため、AD FS に設定した認証方法に従ってサインインが行われます。つまり、Windows 認証に設定していればブラウザと同様にパスワードを入力せずにサインインが完了します。
実際にやってみた
Azure AD の PowerShell モジュールをインストールし、下記のコマンドを実行します。
Set-MsolDomainFederationSettings -DomainName shmiyaza.tokyo -PromptLoginBehavior Disable
コマンド実行後、Office 365 ProPlus からサインインしてみます。冒頭ではフォーム認証が表示されていましたが、パスワードを入力することなくサインインが完了していますね。
また、AD FS の監査ログを確認すると、PrimaryAuth が /password ではなく、/windows であることから、Windows 認証によってサインインが行われたことがわかります。
おわりに
いかがでしたでしょうか? 「シングル サインオンを構成したのにパスワードが聞かれちゃう」といったシナリオがよくあるかと思うのですが、恐らく prompt=login による想定された動作なので、Fiddler で実際の HTTP 通信を確認してみてください。
なお、prompt=login はアプリケーションが認可エンドポイントに対して送信するものですので、これらの動作はアプリケーションの実装に基づきます。「まぁ、そういうもんか」とスルーしておきましょう。
それでは、よい Azure AD ライフをっ
コメント