Webアプリケーションがフォームベース認証(FBA)を使用しているSharePoint実装があります。SharePoint 2013フォームベース認証が遅い - なぜSetPrincipalAndWriteSessionTokenが20秒以上かかるのですか?
ファームには2台のサーバーがあります。企業ネットワーク内のDMZとSQLサーバーに存在するWebフロントエンドサーバー。ファイアウォールがそれらを分離します。
私たちはSQL認証を使用しています。
最初にログインに成功した後に、ユーザーが強制的にパスワードを変更する必要があります。したがって、次の記事に基づいてFBAのカスタムサインフォームを作成しました。 (https://sharepoint.stackexchange.com/questions/42541/how-to-create-a-custom-fba-login-page-that-forces-user-to-change-password-and-vi)。
問題のコードされています。時間がかかるコードがある
private void SignInUser()
{
SecurityToken token = SPSecurityContext.SecurityTokenForFormsAuthentication
(new Uri(SPContext.Current.Web.Url),
GetMembershipProvider(SPContext.Current.Site),
GetRoleProvider(SPContext.Current.Site),
_userName,
_password, SPFormsAuthenticationOption.None);
SPFederationAuthenticationModule fam = SPFederationAuthenticationModule.Current;
fam.SetPrincipalAndWriteSessionToken(token, SPSessionTokenWriteType.WriteSessionCookie);
SPUtility.Redirect(System.Web.Security.FormsAuthentication.DefaultUrl,
SPRedirectFlags.UseSource, this.Context);
}
public static string GetMembershipProvider(SPSite site)
{
// get membership provider of whichever zone in the web app fba isenabled
SPIisSettings settings = GetFbaIisSettings(site);
if (settings == null) return null;
return settings.FormsClaimsAuthenticationProvider.MembershipProvider;
}
public static string GetMembershipProvider(SPSite site)
{
// get membership provider of whichever zone in the web app is fba enabled
SPIisSettings settings = GetFbaIisSettings(site);
if (settings == null) return null;
return settings.FormsClaimsAuthenticationProvider.MembershipProvider;
}
:私の理解から
fam.SetPrincipalAndWriteSessionToken(token, SPSessionTokenWriteType.WriteSessionCookie);
のコード行は、次のようん:
- 起動しますOnSessionSecurityTokenCreatedメソッドを呼び出す SessionSecurityTokenCreatedイベント
- SPFederationAuthenticationModule.CurrentでAuthenticateSessionSecurityTokenメソッドを呼び出してスレッドプリンシパルを設定し、セッションCookieを書き込みます。この20秒のログイン時間も既定のSharePoint FBAページ(/_forms/default.aspx)
- のためにそれは、スタンドアロンでは発生しません発生し
- :
注意すべきいくつかの他の点ですdevマシン。
これは、ボトルネックがネットワークに関連していることを示しています。
ご協力いただければ幸いです。