我们正在使用由Jasig开发的“CAS”单点登录系统。并尝试针对SharePoint 2010网站对其进行身份验证。主要问题是我们在外部站点上验证用户的用户名和密码,该站点通过查询字符串将“票证”发送回我们的SP2010站点。然后,我们的应用程序会根据CAS系统重新验证此故障单,以确保故障单有效。如果票证有效,我们继续说用户已通过身份验证。在.NET应用程序中,此时我需要做的就是调用它:
FormsAuthentication.RedirectFromLoginPage(username, false);
然后,我们的“用户名”用户经过身份验证,一切正常。但是,在SharePoint中,这还不够。如果在调用上一行之前,我只能通过SP 2010来验证我的用户,我打电话:
SPClaimsUtility.AuthenticateFormsUser(Request.Url, username, password);
显然这是一个很大的问题,因为在这一点上,我没有他们的密码。我只有CAS服务器的票。我需要一种方法来“强制”在SharePoint中对用户进行身份验证。
答案 0 :(得分:1)
微软对SP2010 Beta到RTM的自定义身份验证做了一些重大更改,因为我们发现了困难的方法。无论如何,我们得到了基本相同的挑战,使用票证作为身份验证手段,我们得到了它的工作:
您的customlogin.aspx通常包含类似
的内容var ticket = SecurityProvider.GetTicketForCurrentUser(Session);
var credentials = SecurityProvider.ValidateTicket(ticket);
var username = credentials.Username;
var password = credentials.Password;
var securityToken = GetClaimsToken(username, password);
var fam = Context.ApplicationInstance.Modules["FederatedAuthentication"] as
SPFederationAuthenticationModule;
fam.SetPrincipalAndWriteSessionToken(securityToken);
SPUtility.Redirect(SPContext.Current.Site.Url, SPRedirectFlags.Trusted, Context);
包含ValidateTicket的SecurityProvider
public static UserCredentials ValidateTicket(string ticket)
{
UserCredentials creds = UserWSClient.GetUserCredentials(ticket);
return creds;
}
您最大的挑战可能是编写一个接收票证的Web服务并返回凭证,而不是布尔说明票证是否有效。 祝你好运!