Я работаю над сценарием, который работает следующим образом: пользователь щелкает ссылку на сайте SAP, которая ведет на сайт SharePoint. Для выполнения единого входа модуль http берет файл cookie SAP, получает имя пользователя и регистрирует пользователя в SharePoint.
При реализации в SP 2007 это работало: простой вызов SetAuthCookie(имя пользователя) делал работу, пользователь попадал на сайт SharePoint 2007, и все работало, как ожидалось.
Когда в веб-приложении утверждений SharePoint 2010 оно перестало работать. Это вполне ожидаемо, согласно отличная статья Стива Пешки. Итак, я пошел дальше и начал заменять код SetAuthCookie(), но столкнулся с двумя проблемами.
Вот мой собственный код входа. Есть ли эквивалент SetAuthCookie(), которому не нужен пароль? (не говоря уже о жестко запрограммированных URL-адресах и pwd... просто прототип)
private SPIisSettings IisSettings
{
get
{
SPWebApplication webApp = SPWebApplication.Lookup(new Uri("http://virtualcasa1/sites/blank2"));//XXX
SPIisSettings settings = webApp.IisSettings[SPUrlZone.Default];
return settings;
}
}
private SecurityToken GetSecurityToken()
{
SecurityToken token = null;
SPIisSettings iisSettings = IisSettings;
Uri appliesTo = new Uri("http://virtualcasa1");//XXX
SPFormsAuthenticationProvider authProvider = iisSettings.FormsClaimsAuthenticationProvider;
token = SPSecurityContext.SecurityTokenForFormsAuthentication(appliesTo, authProvider.MembershipProvider, authProvider.RoleProvider, "userfba", "pa55word");//XXX
return token;
}
private void SignIn()
{
SecurityToken token = null;
if ((token = GetSecurityToken()) != null)
{
SPFederationAuthenticationModule fam = SPFederationAuthenticationModule.Current;
HttpContext c = HttpContext.Current;
fam.SetPrincipalAndWriteSessionToken(token);
c.Response.Redirect("/sites/blank2");//XXX
}
}
void OnAuthenticateRequest(object sender, EventArgs e)
{
HttpContext c = HttpContext.Current;
if (c.Request.Url.ToString().ToLowerInvariant().Contains("/authenticate.aspx"))
{
SignIn();
}
Большое спасибо!