Dynamics CRM 2013 : Web アプリケーションプロキシ (WAP) を利用してインターネットに接続する展開を構成する

みなさん、こんにちは。

今日は管理者の方向けの情報として、Web アプリケーションプロキシ (WAP)
を利用して Microsoft Dynaimcs CRM 2013 を IFD 構成する場合の注意点を
紹介します。

参考情報: Publishing CRM Internet Facing Deployment using Web Application Proxy

発生しえる問題

WAP 経由で IFD URL を外部公開した場合、ユーザーのログインが行えず、
また AD FS サーバーにて以下のイベントログが記録される場合があります。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
パッシブな要求のフェデレーション中にエラーが発生しました。
追加データ
プロトコル名: wsfed
証明書利用者: /">https://<IFD のアドレス>/
例外情報:
Microsoft.IdentityServer.Web.InvalidRequestException: MSIS7042: 同じクライアント ブラウザー セッションがこの '1' 秒間に '6' 個の要求を行いました。詳細については、管理者に問い合わせてください。
   場所 Microsoft.IdentityServer.Web.Protocols.PassiveProtocolHandler.UpdateLoopDetectionCookie(WrappedHttpListenerContext context)
   場所 Microsoft.IdentityServer.Web.Protocols.WSFederation.WSFederationProtocolHandler.SendSignInResponse(WSFederationContext context, MSISSignInResponse response)
   場所 Microsoft.IdentityServer.Web.PassiveProtocolListener.ProcessProtocolRequest(ProtocolContext protocolContext, PassiveProtocolHandler protocolHandler)
   場所 Microsoft.IdentityServer.Web.PassiveProtocolListener.OnGetContext(WrappedHttpListenerContext context)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

WAP ではパススルー認証を利用して、以下 3 つのアドレスを公開して
いると仮定します。

組織アドレス https://<org>.<domain>
AUTH アドレス https://auth.<domain>
探索サービスアドレス https://disco.<domain>

原因

既定で WAP はパススルー認証を利用する場合、ヘッダー内の内部 URL を外部
URL に書き換えます。一方 IFD を利用して Microsoft Dynamics CRM の認証を
行う場合、組織アドレスから AUTH アドレスへ内部的に変換されます。 そこで
*.<domain> をスコープとしたクッキーを発行し、組織アドレスにリダイレクト
されます。

しかし WAP のアドレス書き換え機能により *.<domain> をスコープとしたはず
のクッキーが auth.<domain>をスコープとしたものに書き換えられてしまい、
結果として組織アドレスではドメインの異なるクッキーとして受け渡しができず
認証に失敗します。

認証に失敗した場合、引き続き同じクッキーで認証を試みますが、一定時間に
連続して処理が失敗するため、上記イベントログが記録されます。

対処

WAP のヘッダー情報書き換えの挙動は以下の手順で変更が可能です。

1. WAP サーバー上で PowerShell を起動します。

2. 以下のコマンドを入力して、現在の設定を確認します。以下のコマンドでは
WAP で公開している全てが出ますので、AUTH アドレスを確認してください。
Get-WebApplicationProxyApplication | Select ID, Name, DisableTranslateUrlInResponseHeaders

3. 値が False になっている場合 (既定値) 事象が発生する状況です。

4. 以下のコマンドで設定を変更します。
Set-WebApplicationProxyApplication –ID <上記で取得した ID> –DisableTranslateUrlInResponseHeader

まとめ

Microsoft Dynaimcs CRM 2013 の IFD 構成に WAP は必須ではありませんが、
利用する場合は上記の内容をご確認ください。

- 中村 憲一郎