0

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); のコード行は、次のようん:

  1. 起動しますOnSessionSecurityTokenCreatedメソッドを呼び出す SessionSecurityTokenCreatedイベント
  2. SPFederationAuthenticationModule.CurrentでAuthenticateSessionSecurityTokenメソッドを呼び出してスレッドプリンシパルを設定し、セッションCookieを書き込みます。この20秒のログイン時間も既定のSharePoint FBAページ(/_forms/default.aspx)
  3. のためにそれは、スタンドアロンでは発生しません発生し

    注意すべきいくつかの他の点ですdevマシン。

これは、ボトルネックがネットワークに関連していることを示しています。

ご協力いただければ幸いです。

答えて

0

私は、次のULSログエントリを解決することによって、ログインプロセスを約13秒短縮できました。

3/30/2016 11:08:53.71 w3wp.exe(0x2448)0x1148 SharePoint Foundationトポロジ8321クリティカル証明書の検証操作に23141.9482ミリ秒かかり、実行時間のしきい値を超えました。これが引き続き発生すると、構成の問題が発生する可能性があります。詳細はhttp://go.microsoft.com/fwlink/?LinkId=246987を参照してください。 bc926d9d-52af-f0fb-b2ae-236a27cd54f1

したがって、SharePointは証明書を使用して、セキュリティトークンサービス(STS)によって発行されたセキュリティトークンに署名します。すべての証明書と同様に、証明書が失効していないことを確認するために、STS証明書の有効性を定期的に検証する必要があります。既定では、チェーン内のルート証明書は、SharePointサーバーの信頼されたルート証明機関ストアに追加されません。このため、証明書の失効リスト(CRL)チェックは、WFEサーバーでは不可能なインターネット経由で行われます。

私は

$ rootCert =(取得-SPCertificateAuthority)を.RootCertificate $ rootCert.Export( "証明書")を使用して、WFEサーバー上で、ルート証明書をエクスポートすることにより、これを解決|セットコンテンツC:\ SharePointRootAuthority.cer - エンコーディングバイト

証明書を使用して信頼されたルート証明機関ストアに証明書をインポートします。

関連する問題