我正在处理这样一个场景:用户单击 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();
}
非常感谢!