現象
SharePoint Server 2013 に Active Directory セキュリティ グループを使用して権限を付与している場合、ユーザーが所属するセキュリティ グループにユーザーを追加した場合や、セキュリティ グループからのユーザー削除の反映に時間がかかることがあります。
原因
Active Directory セキュリティ グループの変更の反映に時間を要する事象は、クレーム ベース認証におけるセキュリティ トークンの有効期限、およびトークン キャッシュの有効期限に影響を受けます。SharePoint Server 2013 では、Web アプリケーションが既定でクレームベース認証を使用するように変更されており、ユーザーの認証情報や所属するグループの情報はWindows トークンや FBA トークン等のクレーム ベースのセキュリティ トークンによって管理されます。セキュリティ トークン、およびトークン キャッシュにはそれぞれ有効期限が設定されており、その期限が有効な間は、生成されているセキュリティ トークンやトークン キャッシュを使用し、ユーザーの所属するセキュリティ グループを認識します。そのため、Active Directory 上でセキュリティ グループからユーザーが削除された場合などに、変更内容が即時に反映しないという現象が発生することがあります。
回避策
本現象を回避するためには、以下のいずれかの方法を使用してください。
[1] キャッシュを削除する
[2] タイムアウト値を短縮する
[1] キャッシュを削除する
----------------------------
セキュリティ トークンのキャッシュ情報は、IIS のワーカー プロセス上、および分散キャッシュ サービス上にキャッシュされます。これらのキャッシュを削除することで、セキュリティ グループ変更後の権限を SharePoint に即時に反映させることが可能となります。
以下にキャッシュ情報を削除する手順をご案内いたします。
手順
-
1. SharePoint の Web サーバーにローカルの管理者権限でログオンして、[スタート]-[管理ツール]-[インターネット インフォメーション サービス (IIS) マネージャ] を起動します。
-
左側のツリーから [サーバー名]-[アプリケーション プール] をクリックします。
-
中央ペインに表示されたアプリケーション プールの一覧から、権限を反映させたいアプリケーション プールを特定し、右クリック [リサイクル] をクリックします。
-
上記をすべての Web サーバーで実行します。
-
次に、分散キャッシュ サービスをホストする SharePoint サーバーにログオンし、管理者権限で SharePoint 2013 管理シェルを起動します。
-
以下のコマンドを実行します。
> Clear-SPDistributedCacheItem -ContainerType DistributedLogonTokenCache
※実行後に「Not all items were cleared.」という警告メッセージが表示されますが、問題ございません。
Clear-SPDistributedCacheItem コマンドの詳細については、次のマイクロソフト Web サイトを参照してください。
http://technet.microsoft.com/ja-jp/library/jj219715(v=office.15).aspx -
分散キャッシュ サービスをホストしているファーム内のすべてのサーバーで、上記コマンドをご実施ください。
[2] タイムアウト値を短縮する
-------------------------------
トークン キャッシュのタイムアウト値、Security Token Service の WindowsTokenLifetime、FormsTokenLifetime (フォーム認証を使用している場合)、LogonTokenCacheExpirationWindow の値を変更します。Active Directory のセキュリティ グループの変更が反映されるまでの時間を短縮する場合には、これらの値を既定より小さく設定します。
-
任意の SharePoint サーバーに管理者権限のあるアカウントでログインし、管理者権限でコマンド プロンプトを起動します。
-
以下のディレクトリに移動します。
C:\Program Files\Common Files\Microsoft Shared\web server extensions\15\BIN -
以下のコマンドを実行し、トークン キャッシュのタイムアウト値を変更します。
stsadm.exe -o setproperty -propertyname token-timeout -propertyvalue 180
補足 : propertyvalue には環境に併せた値を分単位で指定します。上記の例は 180 分です。
token-timeout の既定値は、24 時間です。
設定値を確認する場合には、以下のコマンドを実行します。
stsadm.exe -o getproperty -propertyname token-timeout -
設定後、SharePoint 2013 管理シェルを、管理者権限で起動します。
-
以下のコマンドを実行し、Security Token Service の WindowsTokenLifetime、FormsTokenLifetime、LogonTokenCacheExpirationWindow の有効期限を変更します。
$sts = Get-SPSecurityTokenServiceConfig
$sts.WindowsTokenLifetime = "03:00:00"
$sts.FormsTokenLifetime = "03:00:00"
$sts.LogonTokenCacheExpirationWindow = (New-TimeSpan –minutes 10)
$sts.Update()
補足 : フォーム認証を使用していない場合には、FormsTokenLifetime の設定を実施する必要はありません。
また、各プロパティの値は、環境に併せた値を指定します。上記の例は 3 時間です。
WindowsTokenLifetime、FormsTokenLifetime の値は、LogonTokenCacheExpirationWindow 以上の値に設定します。
各プロパティの既定値は、以下の通りです。
WindowsTokenLifetime : "10:00:00" (10 時間)
FormsTokenLifetime : "10:00:00" (10 時間)
LogonTokenCacheExpirationWindow "00:10:00" (10 分)
現在設定されている値を確認する場合は、以下のコマンドを実行します。
Get-SPSecurityTokenServiceConfig -
すべての SharePoint サーバーで IISRESET を実行します。
補足 : 上記の有効期限を極端に短くした場合、SharePoint サイトにアクセス出来なくなる事象が報告されております。サイトにアクセス出来なくなる事象が発生した場合は、通常はアプリケーション プールのリサイクルを実施することで回避することが可能です。本現象が頻繁に発生する場合は、環境にあわせた適切な値を設定を設定し、動作に問題が無いことを確認します。