AD FS のリダイレクトに失敗する時に起こりうる事象。(AD FS - WAP 間の信頼関係再構築、DNS 名前解決、カスタム ドメイン再構成)


#はじめに
久しぶりに、 AD FS 、 WAP 環境を起動したときに、 AD FS へのリダイレクト処理後に下記画面のようにリダイレクト処理に失敗した時の対処法を記載します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/dc405102-0b36-9cd1-5acc-f8cf69852ee8.png)


#考えられる内容
考えられる原因としては、以下のとおり。

	1. AD FS サービスが落ちている
	2. WAP サービスが落ちている
	3. 上記両方のサービスが落ちている
	4. WAP と AD FS 間の信頼関係を証明するための証明書認証に失敗している
	5. DNS の名前解決に失敗している

## 切り分けてみる

まずは、4の事象を疑いました。
AD FS サーバーのイベントログに、下記のとおり ID 276 エラーが頻発していたからです。
ID 276 は、 WAP サーバーが送信したクライアント証明書認証に失敗したため出力されるイベントになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/033baffb-4986-44ea-cb1d-a73a815b2843.png)

WAP サーバーの「C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SystemCertificates\My\Certificates」フォルダ配下には、以下のとおり 20 日間の有効期限の証明書が作成され、 有効期限が切れる 7 日前に、新しく 20 日間の有効期限を持った証明書が作成されます。

この動作の繰り返しを行うわけですが、まず、証明書の更新は、 AD FS サーバー、 WAP サーバーが起動していないと成功しません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/9f7945e2-7027-29ea-9490-67d52ca6f5e9.png)

例えば、長期間サーバーが停止したままの状態、もしくはネットワークが不通の状態が続くと、証明書の更新が行えなくなり、信頼関係が構成できなくなります。その場合はWAP の再構成が必要になります。

下記画面ショットは、 AD FS サーバーの「証明書」→「AdfsTrustedDevices」フォルダにある、WAP - AD FS 間の証明書ですが、有効期限を見ると 、 2019/04/16 となっている(本blog 投稿日時は 2019/03/31) ので、有効期限は切れていないように見えます。

※結果的には、有効期限は切れていないので、証明書の問題ではなく別の問題でしたが、せっかくなので、 WAP の再構成をやってみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/5ff3e823-67e3-821e-13d1-e9e1b27ad556.png)

#WAP の再構成手順

まずは、コマンドプロンプトにて「regedit」と実行し、レジストリ エディターを開きます。
次に、[HKEY_LOCAL_MACHINE\Software\Microsoft\ADFS] を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/eda3f99e-86aa-3072-dbdc-6e5c28efc5a5.png)

次に、[ProxyConfigurationStatus] をダブル クリックし、値を「2」から「1」に変更します。

※ここで「1」に変更しないと「Web アプリケーション プロキシ構成ウィザードの実行」でWAPサーバーの構成(編集)ができないので、変更する必要があります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/927bad64-b9dd-d514-f464-c14eb48ac971.png)

WAP サーバー上でスタート画面などから [リモート アクセス管理] コンソールを開きます。
次に、画面中央から [Web アプリケーション プロキシ構成ウィザードの実行] をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/baf8ba2b-47e0-b6ff-5f99-9a68a74eb611.png)


AD FS サーバーのフェデレーション サービス名、資格情報を入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/12ab71dd-b5cb-807f-3c48-09a7e7a5d774.png)

AD FS プロキシに使用する証明書を選択します。
下記例のとおり、有効期限が切れている証明書を選択すると、警告メッセージが表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/37d6e84a-871d-f112-d77e-b15c2bea8f6f.png)


有効期限が切れていない、正しい証明書を選択し、「次へ」をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/57587e43-09e7-6420-8bd7-6960dded390e.png)

「構成」ボタンをクリックします。
また、下記画面ショットにあるとおり、この作業は PowerShell コマンドレットで CLI で構成することも可能です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/a5e58196-67eb-9cb7-e408-d0b2bfdbb94d.png)

正常に WAP の再構成に成功すると下記画面が表示されるので、「閉じる」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/0262cc3c-48ba-6be1-d483-e1e1e77f3494.png)

下記画面ショットとおり、 AD FS プロキシの証明書が「2セット」インポートされていることが分かります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/37320927-49b8-130a-c99a-ac465905f626.png)

WAP の再構成完了後に再び Office 365 に AD FS 経由でアクセスしようとしましたが、事象が改善されませんでした。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/4f4ca75b-a976-7add-6ac9-78eb4337fa62.png)

再び AD FS イベントログを見てみると、エンド ポイントが開くことができない、と言っています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/f68fa4dc-5016-4f58-0c36-ba7f35135795.png)

しかしながら、対象のエンドポイントを見てみると、有効になっていました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/bd52945f-f5f7-fa3d-e177-65377fd8978d.png)

#これは困った…
ここで、 AD FS も再インストールしてみたのですが、事象がかわらず…。
もしかして…として行き着いたのが、 DNS の名前解決。

これは Azure の罠というか「あるある」なのですが、 Azure 上の Virtual Machine を何も考えず、再起動すると、再起動するたびに、「グローバル IP」が変わります。下記割り当ての項目を「静的」にしないと、グローバル IP が固定されないのです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/41c8061f-f901-5ed6-f749-56ed93d50c66.png)


そこで気づきました。
DNS レジストリに登録している、「 AD FSフェデレーション名」が再起動前のグローバル IP のままになっていたのです。下記が変更前の AD FS フェデレーション名の A レコード。
これを 13.78.12.1 に変えます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/3dae960e-4bde-0c01-8690-5e143cd5c086.png)


DNS が浸透するまで待ちます…。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/33b18d6d-1370-070b-5dba-932182367e23.png)

浸透されました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/3d83bb54-3a53-cfe9-e103-e94277736f3e.png)

さて、もう 1 度 Office 365 にアクセスしてみます。
お馴染みのリダイレクト後のフォーム認証画面が表示されましたが、「不明なエラーが発生しました」と表示されてしまいました。またしても立ちはだかる壁。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/b3d76fd7-5cb1-77c4-c817-aa48aae5db5d.png)


ここでまたしばらく悩みましたが、 「AD FS の管理」を見て気づきました。
ここに書いてあるじゃないですか…
そう、 AD FS はサービスを追加しただけでは、ダメで、信頼できる証明書利用者、つまり RP(Relying Party)との信頼関係を構成する必要があります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/ed053312-b233-832d-f976-fe8f0ef37838.png)

AD FS サーバーで下記作業を行います。

まず、モジュールのダウンロードをします。
https://www.microsoft.com/ja-jp/download/details.aspx?id=41950

次に 、 PowerShell を管理者で立ち上げて、 install-Module MSOnline でモジュールインストールします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/9a4a4143-8e70-69b7-8f70-61cb97226f08.png)

Connect-MolService コマンドレットを実行すると、 Azure AD の全体管理者の資格情報を入力する画面がポップアップ表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/7389230f-e777-22ab-3168-b2dbedd6e481.png)

資格情報を入力後に、 Azure AD にカスタム ドメインとして登録しているドメインを Federated ドメインとして構成します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/770e04d2-0494-3d53-9069-f1eff7cbeb97.png)

すると、「AD FS 管理」にて、下記のとおり、SSO 構成が可能なメッセージに変わりました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/2b4cf6f4-512d-1e30-5c5a-12a084599808.png)


証明書利用者信頼の項目に Office 365 との信頼関係が構成されたことが追加されました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/07a79ea8-144e-e02f-eb12-a662d57b1fd2.png)

キター！！
と思ったのも束の間、今度は、AD FS 認証後に、 Office 365 のトップ画面に戻る、まだ AD FS で認証する、 Office 365 のトップ画面に戻る。というループに陥ります…。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/cde6d231-6ad2-be5b-129b-7ac723a1866d.png)


#またまた悩む

これはなんだろうと、思いましたが、フェデレーション先の Azure AD のテナントの Office 365 の無償期限が切れて Office 365 が使えないことに気づきました。

で、ここまでまたはまりましたが、カスタム ドメインは Azure AD 上で削除できるのですが、フェデレーション関係になっていると Azure ポータルからは削除できないのです。

当然といえば、当然ですよね。
信頼関係が構成されたドメイン間でその当該のドメインを削除するなんてことはできませんから。

そこでどうするかというと、「Federated」関係から「Managed」関係に手動で変更する必要があります。
PowerShell のコマンドレットで下記のように実行します。

**Set-MsolDomainAuthentication -Authentication Managed -DomainName shyamag006.com**
**Get-MsolDomain** コマンドレットで確認すると、「Managed」に変更されていますね。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/273609b7-f455-497d-4038-2cd4d34d9e23.png)

これで shyamag007.onmicrosoft.com テナントのカスタム ドメインが削除できないか試してみます。
なんか削除できそうですね！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/5cde4fd9-53bc-1f08-c802-533cde29d7de.png)

削除が開始されました！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/9a45f9e3-a153-9500-a54c-5c0f26bc4390.png)


shyamag007.onmicrosoft.com テナントで削除が完了したのを確認後に、あたらしいテナント(shyamag011.onmicrosoft.com )でカスタムドメイン shyamag006.com が構成できるようになりました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/7757057d-27a3-5d48-2626-b12b10dad4ab.png)

再び、Connect-MolService コマンドレットを実行すると、 Azure AD の全体管理者の資格情報を入力する画面がポップアップ表示されます。今度は新しいテナントの資格情報を入力します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/4c73add7-a54b-9408-bd45-5504c99062f9.png)

新しいテナントにて、 shyamag006.com を Fedarated ドメインに変更、および変更を確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/90567a75-48b2-7cec-ab75-78c17540f2bb.png)

再度 Office 365 にサインインを試みます。
AD FS のフォーム認証画面で資格情報を入力して…。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/64fb9f6f-0bbd-4142-ba01-2229fecf2cce.png)

無事 Office 365 に SSO 成功！ 
※まだ ユーザーに Office 365 ライセンスを割り当てていないため、下記のような画面になります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/63c8812c-5260-eadf-f1dc-a90c73e97192.png)

Office 365 のライセンスを割り当てて、インストールした後の画面です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/373423/99628084-5f9c-7788-9c74-0cb18fa66c97.png)

#まとめ
今回は、WAP - AD FS 間の信頼関係の再構成を紹介するつもりでしたが、思わぬ罠にはまりつづけてしまいました。

しかしながら、 DNS の名前解決の問題、カスタム ドメインが削除できない問題などは、よくある事象だと思いますので、少しでもこの記事が同じ事象にはまってしまった人の助けになれば幸いです。