0

Web アプリケーションがフォーム ベース認証 (FBA) を使用する SharePoint 実装があります。

ファームには 2 台のサーバーがあります。DMZ に常駐する Web フロント エンド サーバーと、企業ネットワーク内の SQL サーバー。ファイアウォールがそれらを分離します。

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 を書き込みます。

その他の注意点は次のとおりです。

  1. この 20 秒のログイン時間は、デフォルトの共有ポイントの fba ページ (/_forms/default.aspx) でも発生します。
  2. スタンドアロンの開発マシンでは発生しません。

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

どんな助けでも大歓迎です。

4

1 に答える 1

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 サーバーでは実行できないインターネット経由で実行されます。

を使用して、WFEサーバーでルート証明書をエクスポートすることでこれを解決しました

$rootCert = (Get-SPCertificateAuthority).RootCertificate $rootCert.Export("Cert") | Set-Content C:\SharePointRootAuthority.cer -エンコード バイト

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

于 2016-03-30T13:43:03.097 に答える