2016年1月17日日曜日

[AD FS]連携アプリケーション毎に対応するIdPへ自動振り分けを行う

こんにちは、富士栄です。

AD FSを使ってアプリケーションとのID連携を行う場合、基本はビルトインのActive Directoryでの認証および属性の提供を行うことになりますが、アプリケーションが増えてきたり、複数の企業でAD FSを使ったりし始めると、AD FSをHUBのように使いたくなってきます。
(他にもプロトコルの変換を行うために使うケースなんかでもHUB的にAD FSを使いたくなります。例えばアプリケーションがws-federationにしか対応していなくて、IdPがSAMLにしか対応していないような場合とかですね。Windows Server 2016のAD FSではOpenID Connectにも対応してくるので、OpenID Connectにしか対応していないアプリケーションをSAMLしかしゃべれないIdPに統合するケースなど、AD FSをHUBとして使うケースも出てくるかもしれません)

そんな場合、AD FSに登録するIdP(Claim Provider)が複数になってしまいますので、利用者自身がどのIdPを使うのかを選択する必要が出てきます。(少なくとも初回は。2回目以降はCookieでブラウザに記憶されます)


AD FSに複数のClaim Providerが設定されているケースです。
下の画面ではビルトインのActive DirectoryとAzure ADを設定しています。

この環境でアプリケーションからAD FSにリダイレクトされるとIdPを選択する画面が表示されます。
これをHome Realm Discovery(HRD)と呼びます。


これって結構面倒くさいですよね。
利用者が間違ったIdPを選択してしまうと一旦Cookieをリセットしてもらって、、、ということにもなりますのでサポートしなければならない情報システム部門からすると非常に頭の痛い問題にもなりかねません。


ということで、例えば絶対に特定のIdPでしか認証させないアプリケーションであれば選択画面(HRD画面)をスキップして直接IdPへリダイレクトさせたいのですが、そういう場合はAD FSに少々設定を行うことで実現可能です。

具体的にはAD FSのPowerShellコマンドレッド「Set-AdfsRelyingPartyTrust」を使って対象のRelying Party(アプリケーション)が指定したClaim Provider(IdP)のみを使うように設定を行います。

構文は以下の通りです。
AdfsRelyingPartyTrust -TargetName <アプリケーション名(RP名)> -ClaimsProviderName <IdP名>


尚、複数のIdPを指定したい場合は、@("AAA","BBB")という形で配列を指定することで対応できます。

詳細は以下のURLにありますので、参考にしてください。
 https://technet.microsoft.com/en-us/library/dn280950.aspx


早速設定してみます。WLSという名前のアプリケーションはAzure ADのみを使って認証する、という設定です。

この状態で先ほどのアプリケーションに再度アクセスしてみます。
(Cookieをクリアしてからアクセスするのをお忘れなく)

選択画面(HRD)が出ずに直接Azure ADへリダイレクトされました。
これで多少なりとも混乱を防ぐことが出来ると思われます。


尚、間違えてClaim Providerを制限しすぎてしまったので元に戻したい、という場合は先と同じコマンドレットに他のClaim Providerを指定してあげれば大丈夫です。


0 件のコメント: