SharePoint 2010 — единый вход в веб-приложение утверждений БЕЗ пароля, например SetAuthCookie()

Я работаю над сценарием, который работает следующим образом: пользователь щелкает ссылку на сайте 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();
    }

Большое спасибо!


person Ariel    schedule 28.04.2012    source источник


Ответы (1)


Наконец-то смог ответить на свой вопрос (ненавижу отвечать самому себе, но иногда так оно и работает...), здесь подробности. Надеюсь, это поможет кому-то, где-то.

person Ariel    schedule 22.05.2012