Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SharePoint 2010使用外部身份验证时出现的问题_Sharepoint_Authentication_Sharepoint 2010_External - Fatal编程技术网

SharePoint 2010使用外部身份验证时出现的问题

SharePoint 2010使用外部身份验证时出现的问题,sharepoint,authentication,sharepoint-2010,external,Sharepoint,Authentication,Sharepoint 2010,External,我们正在使用由Jasig开发的“CAS”单点登录系统。并尝试针对SharePoint 2010网站对用户进行身份验证。主要问题是,我们正在外部站点上验证用户的用户名和密码,该站点通过查询字符串将“票证”发送回SP2010站点。然后,我们的应用程序根据CAS系统重新验证此票据,以确保票据有效。如果票证有效,我们继续说用户已通过身份验证。在.NET应用程序中,此时我只需调用以下命令: FormsAuthentication.RedirectFromLoginPage(username, false)

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

FormsAuthentication.RedirectFromLoginPage(username, false);
然后,我们的“用户名”用户经过身份验证,一切正常。然而,在SharePoint中,这还不够。我只能让SP 2010对我的用户进行身份验证,前提是在调用前一行之前,我调用:

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

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

我们发现了困难的方法,Microsoft通过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);
包含ValidateCket的SecurityProvider

   public static UserCredentials ValidateTicket(string ticket)
    {
        UserCredentials creds = UserWSClient.GetUserCredentials(ticket);
        return creds;
    }
您最大的挑战可能是编写接收票证并返回凭据的Web服务,而不是声明票证是否有效的布尔值。
祝你好运

当我们发现困难的时候,微软用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);
包含ValidateCket的SecurityProvider

   public static UserCredentials ValidateTicket(string ticket)
    {
        UserCredentials creds = UserWSClient.GetUserCredentials(ticket);
        return creds;
    }
您最大的挑战可能是编写接收票证并返回凭据的Web服务,而不是声明票证是否有效的布尔值。
祝你好运

问题是,另一个开发团队正在编写服务以退回票据。他们将只退还车票,并已明确表示不会向我们发送密码。我们只需要票和用户名。嗨。我想知道你采取了什么方法来实现这个要求。我有一个类似的要求-需要在没有密码的情况下对SharePoint 2010进行身份验证。您能提供GetClaimsToken实现吗?问题是,另一个开发团队正在编写服务以返回票证。他们将只退还车票,并已明确表示不会向我们发送密码。我们只需要票和用户名。嗨。我想知道你采取了什么方法来实现这个要求。我有一个类似的要求-需要在没有密码的情况下对SharePoint 2010进行身份验证。您能提供GetClaimsToken实现吗?