ADFSトレーニングテキスト全文公開チャレンジ(17) – ADFSの運用

皆さんこんにちは。国井です。
ADFSテキスト全文公開チャレンジの17回目はADFSのTips集についてです。
ADFSを利用する上で覚えておくと便利な機能を簡単にまとめてみました。

■ ■ ■

スライド144

第 6 章では、ADFS サーバーを中心とした運用管理とトラブルシューティング手法について解説します。具体的には、トラブルシューティングに有効なツールの紹介とツールを活用したトラブルシューティング手法について、それぞれ紹介します。

スライド145

ADFS サーバーでは、ユーザーの円滑な認証と認可をサポートするため、次のような設定が日常の運用管理では発生します。

■サーバー稼働の確認
■サインイン画面のカスタマイズ
■サインインセッションのカスタマイズ
■ユーザーのパスワード変更
■パスワードのロックアウト

これらのトピックについて、次のページから詳しく解説します。


スライド146

ADFS サーバーや Web アプリケーションプロキシは認証と認可に関わる重要な役割を果たすため、サーバーの稼働確認は Active Directory ドメインコントローラーと同様に行う必要があります。
ADFS サーバーと Web アプリケーション プロキシでは、

http://<フェデレーションサービス名>/adfs/probe

にアクセスし、HTTP プロトコルの応答が返ってくることで、サーバーの稼働状況を確認できます。この稼働状況のチェック方法は、ロードバランサーがパケットの振り分け先として利用する ADFS サーバーを決定する際にも利用できます。
また、別の稼働状況の確認方法として、Azure AD Connect Health を利用する方法があります。Azure AD Connect Health は Azure AD Premium の機能で、あらかじめ ADFS サーバーと Web アプリケーションプロキシにエージェントプログラムをインストールしておくことで、クラウドからサーバーの稼働状況や構成のチェックができます。


スライド147

企業のアイデンティティ確立を目的として、サインイン画面のカスタマイズを必要とするケースがあります。ADFS サーバーでは Windows Server 2012 R2 より IIS を利用せずに Web サービスを提供しているため、サインイン画面の Web ページも html ファイルとして存在しません。そのため、ADFS サーバーのサインイン画面は、PowerShell のコマンドレットより変更します。
ADFS サーバーのサインイン画面は、「Web テーマ」と呼ばれる設定の集合体から構成されており、現在ある Web テーマ (テーマ名は default) を変更してカスタマイズするか、Web テーマそのものを新しく作成し、カスタマイズすることができます。

■テーマの新規作成
Default テーマをコピーして新しいテーマを作成するときは以下のコマンドレットを実行します。

New-AdfsWebTheme -Name <テーマ名> -SourceName default

■サインイン画面のロゴ変更
サインイン画面のロゴを変更する場合、テーマ名と共に以下のコマンドレットを実行します。ロゴは 260×35 ピクセルで、10KB 以下の画像が推奨されています。

Set-AdfsWebTheme -TargetName <テーマ名> `
-Logo @{path=”<ロゴ画像のパス>”}

■サインイン画面の画像変更
サインイン画面左側にある画像を変更する場合、テーマ名と共に以下のコマンドレットを実行します。画像は 1420×1080 ピクセルで、200KB 以下の画像が推奨されています。

Set-AdfsWebTheme -TargetName <テーマ名> `
-Illustration @{path=”<画像のパス>”}

■サインイン画面の説明文変更
[サインイン] ボタンの下部にある説明文を変更する場合、以下のコマンドレットを実行します。説明文は HTML タグを利用することも可能です。

Set-AdfsGlobalWebContent -SignInPageDescriptionText `
“<p>サインインできない場合は`
<A href=’http://fs1.contoso.com/fyi/’>`

こちら</A> からお問い合わせください</p>”

■サインイン画面の最下部のリンク追加
既定のページでは [2013 Microsoft] と表示されるページ最下部に追加のリンクを入れる場合、以下のコマンドレットを実行します。

Set-AdfsGlobalWebContent -HelpDeskLink `
https://fs1.contoso.com/help/ -HelpDeskLinkText Help

Set-AdfsGlobalWebContent -HomeLink `
https://fs1.contoso.com/home/
 -HomeLinkText Home

Set-AdfsGlobalWebContent -PrivacyLink ‘ https://fs1.contoso.com/privacy/ -PrivacyLinkText Privacy

■スタイルシートの適用
サインインページにスタイルシートを適用する場合、以下のコマンドレットを実行します。

Set-AdfsWebTheme –TargetName <テーマ名> –StyleSheet `
@{path=”<CSS ファイルのパス>”}

■ スタイルシートの適用
サインインページに JavaScript を適用する場合、以下のコマンドレットを実行します。

Set-AdfsWebTheme -TargetName custom `
-AdditionalFileResource `

@{Uri=’/adfs/portal/script/onload.js’;path=”<onload.js ファイル`のパス>”}

JavaScript ファイル
既定のサインイン ページでは onload.js という名前の JavaScript ファイルを利用しており、Web テーマをエクスポートすることで、onload.js ファイルは直接編集し、カスタマイズすることができます。例えば、onload.js ファイルを利用して IdPInitiated プロファイル利用時に選択する RP ごとに異なるサインインページを表示するなどのカスタマイズが可能になります。
■Customizing the AD FS sign-in pages per relying party trust
https://blogs.technet.microsoft.com/pie/2015/08/29/customizing-the-ad-fs-sign-in-pages-per-relying-party-trust/

■Web テーマのエクスポート
Web テーマをファイルにエクスポートする場合、以下のコマンドレットを実行します。テーマファイルのパスにはフォルダー名までを指定します。

Export-AdfsWebTheme –Name <テーマ名> `
–DirectoryPath <テーマファイルのパス>

■Web テーマの適用
新しく作成した Web テーマをサインイン画面に適用する場合、以下のコマンドレットを実行します。

Set-AdfsWebConfig -ActiveThemeName <テーマ名>

■エラー メッセージのタイトル
サインイン エラー時に表示するメッセージのタイトル部分を変更する場合、以下のコマンドレットを実行します。

Set-AdfsGlobalWebContent -ErrorPageDescriptionText `
“<エラーメッセージのタイトル>”

■エラー メッセージ
サインイン エラー時に表示するメッセージを変更する場合、以下のコマンドレットを実行します。一般的なエラー、認証エラー、認可エラー、RP 特有の認可エラーとそれぞれ異なるメッセージを表示させることができます。

Set-AdfsGlobalWebContent -ErrorPageGenericErrorMessage `
“<一般的なエラーメッセージ>”

Set-AdfsGlobalWebContent `
-ErrorPageDeviceAuthenticationErrorMessage `
“<認証エラーメッセージ>”

Set-AdfsGlobalWebContent `
-ErrorPageAuthorizationErrorMessage`
“<認可エラーメッセージ>”

Set-AdfsRelyingPartyWebContent -Name <証明書利用者信頼名> ‘
-ErrorPageAuthorizationErrorMessage `
“<RP 特有の認可エラーメッセージ>”


スライド148

一度のサインインによってアクセスできる時間をカスタマイズすることで、ユーザーの利便性を向上させる効果があります。既定では、一度発行されたトークンはセッション Cookie としてブラウザー内に格納され、ブラウザーを終了するまでの間、または ADFS サーバーのプロパティで定義されている時間 (既定では 480分) 保持されます。この動作をカスタマイズする場合、次の方法を用います。

■ブラウザー画面を閉じずにトークンを破棄したい
ADFS サーバーで提供するSingle Sign Out を利用します。ADFS サーバーの次の URL にアクセスすることで、Single Sign Out を実行し、トークンを破棄します。

https://<フェデレーションサービス名>/adfs/ls/wa=wsignout1.0

■ブラウザー画面を閉じても永続的にトークンを保持したい
ADFS サーバーでは、Keep Me Sign In (KMSI) と呼ばれる設定を有効にすることで、トークンをセッション Cookie としてではなく、永続 Cookie として 24時間保持するように構成することができます。以下のコマンドレットを実行すると、サインイン画面に [サインアウトしない] チェックボックスが表示され、チェックすることで永続 Cookie として保存されます。

Set-AdfsProperties -EnableKmsi:$true


スライド149

定期的なパスワード変更をグループポリシーで定義している場合、外出先でパスワードの期限を迎えてしまい、サインインできなくなる問題が発生する可能性があります。ADFS サーバーでは、パスワードの変更をADFS サーバーまたは Web アプリケーションプロキシ経由で実行するように構成できます。
パスワード変更を有効にする場合、ADFS サーバーの/adfs/portal/updatepassword/エンドポイントを有効にします。エンドポイントは [プロキシに対して有効にする] を合わせて設定しておくことで、Web アプリケーションプロキシ経由で変更することもできます。
ユーザーが実際にパスワード変更するときは https://<フェデレーションサービス名>/adfs/portal/updatepassword にアクセスし、変更します。
また、Active Directory に保存されているパスワードの有効期限が近付いている場合、ADFS サーバーからメッセージを表示するように、発行変換規則にクレームルールを作成することもできます。

c1:[Type == “http://schemas.microsoft.com/ws/2012/01/passwordexpirationtime”]

=> issue(store = “_PasswordExpiryStore”, types = (“http://schemas.microsoft.com/ws/2012/01/passwordexpirationtime”,http://schemas.microsoft.com/ws/2012/01/passwordexpirationdays”,http://schemas.microsoft.com/ws/2012/01/passwordchangeurl”), query = “{0};”, param = c1.Value);

パスワード変更の通知は 14 日前から表示されます。


スライド150

パスワード入力が一定回数間違えたときに、サインイン自体をできなくするロックアウトの設定は Active Directory とは別に Web アプリケーションプロキシでも実装されています。これは外部から悪意ある第三者によってパスワードロックアウトが勝手に設定されてしまうことを防ぐためにあります。外部からロックアウトが設定されても、Web アプリケーションプロキシ上のロックアウトが設定されるだけで済むため、既存の Active Directory ユーザーとしてのサインインに影響を及ぼすことはありません。

設定は、ADFS サーバーから Set-AdfsProperties コマンドレットを利用します。次のオプションを一緒に実行することで、ロックアウトを設定できます。

■ExtranetLockoutThreshold:ロックアウトされるまでの回数
■ExtranetLockoutEnabled:ロックアウト設定の有効/無効
■ExtranetObservationWindow:ロックアウト期間

例えば、ロックアウト設定を有効にする場合、次のようにコマンドレットを実行します。

Set-AdfsProperties –EnableExtranetLockout $True

ロックアウトされたユーザーによるサインインは ADFS サーバーのセキュリティログ (イベントビューア) からイベント ID 342 で記録されます。ただし、イベント ID 342 のログはパスワードを間違えたときにも記録されるログであるため、エラーメッセージに「ユーザー名またはパスワードが正しくありません」と表示されないログを確認することでロックアウトされているユーザーを確認できます。また、イベント ID 4625 でもサインイン失敗のログは同時に記録されます。

Windows のロックアウトと ADFS のロックアウトの関係
Windows のロックアウトと ADFS のロックアウトを同時に設定している場合、サインインに失敗すると、どちらのロックアウト設定にも「1回失敗」とカウントされます。そのため、Windows のロックアウトで設定した失敗回数が、ADFS のロックアウトで設定した失敗回数よりも少ない場合、Windows のロックアウトが先に適用されてしまい、Windows ユーザーはすべてのサインインができなくなってします。
以上を踏まえ、
Windows のロックアウトでの失敗回数 > ADFS のロックアウトでの失敗回数
となるように必ず設定してください。


スライド151

ADFS サーバーの [要求プロバイダー信頼] に複数の IdP が登録されていると、トークン発行時に IdP (レルム) を選択する画面 (HRD:ホーム レルム ディスカバリー画面) が表示され、選択を迫られます。一度選択したレルムは Get-AdfsWebConfig コマンドレットの設定によって、30 分間その設定をキャッシュします。しかし、ユーザーにとってはレルム選択という面倒な操作を迫られるため、ADFS サーバーでは HRD のカスタマイズを行い、特定の条件下では自動的にレルムが選択され、HRD 画面が表示されないようにすることができます。具体的には、次の 3 つの方法があります。

■AD ユーザーの認証では自動的にレルムを選択
Active Directory ドメインにサインインしているユーザーが ADFS サーバーにトークンの発行要求を行う場合、Windows 統合認証によって自動的にサインインしているドメインの情報が ADFS サーバーに送信されます。このとき、ADFS サーバーは以下のコマンドレットを実行し、設定しておくことで、ユーザーのドメインに合わせた IdP が自動的に選択されるよう、構成できます。

Set-AdfsProperties –IntranetUseLocalClaimProvider $True

■利用する SP に合わせて自動的にレルムを選択
SAML-P のパッシブプロファイルでは、IdP での認証プロセスの前に SP に接続し、認証を行う IdP を選択します。このとき、利用した SP に基づいて自動的に選択する IdP を決定するよう、SP と IdP の組み合わせを設定しておくことができます。

Set-AdfsRelyingPartyTrust –TargetName <SP 名> `
-ClaimProviderName @(“<IdP 名>”)

■サインインユーザー名で自動的にレルムを選択
ADFS サーバーのフォーム認証画面で認証を行う際、入力したユーザー名のドメイン名部分に基づいてユーザーに合わせた IdP が自動的に選択されるよう、構成することもできます。例えば、adfs.jp ドメインの場合には IdP1 レルムを利用するように、と設定している場合、サインイン画面で、ユーザー名にharaguchi@adfs.jp と入力すれば、自動的に IdP1 レルムで認証が行われるようになります。

Set-AdfsClaimsProviderTrust –TargetName “<IdP 名>” `
–OrganizationalAccountSuffix @(“<ユーザーのドメイン名部分>”)

SharePoint のレルム選択
SharePoint Server で ID プロバイダー認証を設定し、ADFS サーバー経由による認証・認可を設定すると、Active Directory 認証を行うか、ID プロバイダー認証を行うかを選択する画面 (HRD 画面) が表示されます。このときに表示される HRD 画面は ADFS サーバーではなく、SharePoint Server で実装している機能に基づいて表示されるものなので、HRD のカスタマイズは SharePoint Server の設定で行う必要があります。

■Using the WHR Parameter with SharePoint 2010 and SAML Auth
http://blogs.technet.com/b/speschka/archive/2011/09/14/using-the-whr-parameter-with-sharepoint-2010-and-saml-auth.aspx

編集後記

いよいよ最後の章まで来ました。運用というタイトルがついているけど、実際にはサインインページのカスタマイズなどのTips集をお届けしました。
次回は最終回としてADFSのトラブルシューティングについてお伝えします。お楽しみに。