使用SharePoint 2010进行外部身份验证的问题

时间:2010-08-06 22:07:56

标签: sharepoint authentication sharepoint-2010 external

我们正在使用由Jasig开发的“CAS”单点登录系统。并尝试针对SharePoint 2010网站对其进行身份验证。主要问题是我们在外部站点上验证用户的用户名和密码,该站点通过查询字符串将“票证”发送回我们的SP2010站点。然后,我们的应用程序会根据CAS系统重新验证此故障单,以确保故障单有效。如果票证有效,我们继续说用户已通过身份验证。在.NET应用程序中,此时我需要做的就是调用它:

FormsAuthentication.RedirectFromLoginPage(username, false);

然后,我们的“用户名”用户经过身份验证,一切正常。但是,在SharePoint中,这还不够。如果在调用上一行之前,我只能通过SP 2010来验证我的用户,我打电话:

SPClaimsUtility.AuthenticateFormsUser(Request.Url, username, password);

显然这是一个很大的问题,因为在这一点上,我没有他们的密码。我只有CAS服务器的票。我需要一种方法来“强制”在SharePoint中对用户进行身份验证。

1 个答案:

答案 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服务并返回凭证,而不是布尔说明票证是否有效。 祝你好运!