0

我正在处理这样一个场景:用户单击 SAP 站点中的链接,将他/她带到 SharePoint 站点。为了完成单点登录,http 模块需要一个 SAP cookie,获取用户名并将用户登录到 SharePoint。

当在 SP 2007 上实施时,它曾经可以工作:只需调用 SetAuthCookie(username) 即可完成工作,用户访问 SharePoint 2007 站点,一切都按预期工作。

在 SharePoint 2010 声明 Web 应用程序上时,它停止工作。根据 Steve Peschka 的这篇精彩文章,这几乎是意料之中的。所以我继续并开始替换 SetAuthCookie() 代码,但我面临两个问题

这是我的自定义登录代码。有没有不需要密码的 SetAuthCookie() 等价物?(不要介意硬编码的网址和密码......只是一个原型)

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();
    }

非常感谢!

4

1 回答 1

0

终于能够回答我自己的问题(讨厌回答自己,但有时它就是这样工作的......),这里是细节。希望它可以帮助某人,某处。

于 2012-05-22T20:04:45.003 回答