代码之家  ›  专栏  ›  技术社区  ›  RepDetec

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

  •  1
  • RepDetec  · 技术社区  · 15 年前

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

    FormsAuthentication.RedirectFromLoginPage(username, false);
    

    然后,我们的用户名用户经过身份验证,一切正常。然而,在SharePoint中,这还不够。我只能让SP 2010验证我的用户,如果在调用上一行之前,我调用:

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Audun    15 年前

    微软做了一些巨大的变化,自定义认证与SP2010测试版到RTM,因为我们发现了困难的方式。不管怎样,我们遇到的挑战基本上是一样的,用一张罚单作为身份验证的手段,我们做到了:

    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服务来接收票据并返回凭证,而不是一个布尔值来说明票据是否有效。 祝你好运!