У нас есть реализация SharePoint, в которой наше веб-приложение использует аутентификацию на основе форм (FBA).Аутентификация на основе форм SharePoint 2013 медленная. Почему SetPrincipalAndWriteSessionToken занимает 20 секунд или более?
В ферме есть 2 сервера. Сервер веб-интерфейса, который находится в DMZ и 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);
В моем понимании эта строка кода выполняет следующие действия:
- Вызывает Метод OnSessionSecurityTokenCreated для повышения значения события SessionSecurityTokenCreated
- Вызывает метод AuthenticateSessionSecurityToken в SPFederationAuthenticationModule.Current для установки принципала потока и записи cookie сеанса.
Некоторые другие моменты, следует отметить:
- Это 20 второй раз Войти также имеет место для страницы по умолчанию SharePoint FBA (/_forms/default.aspx)
- Это не происходит на автономный dev машина.
Для меня это будет означать, что узкое место связано с сетью.
Любая помощь будет высоко оценена.