1

我有一个自定义成员资格提供程序,我在 SharePoint 2007 服务和 .NET Web 应用程序中都使用它。现在我正在尝试将 SharePoint 平台更新为 2010 Foundation,但我的提供程序无法正常工作。下面是两个示例,它们都对用户进行身份验证并使用相同的密钥设置身份验证 cookie。

MembershipProvider provider = Membership.Providers["Provider"];

//Alternative one using cookiename (ProviderUserKey from other source then provider)
if (provider.ValidateUser(user, passwd))
{
    FormsAuthentication.SetAuthCookie(cookieName, false);
    Response.Redirect("/");
}
else
{
    ShowErrorMsg();
}

//Alternative two using provider to get ProviderUserKey same as cookieName above
if (provider.ValidateUser(user, passwd))
{
    MembershipUser memberUser = provider.GetUser(user, false); //false or true doesnt matter in this provider
    FormsAuthentication.SetAuthCookie(memberUser.ProviderUserKey.ToString(), false);
    Response.Redirect("/");
}
else
{
    ShowErrorMsg();
}

问题是 SharePoint 2010 使用基于声明的身份,我确实尝试了以下但没有成功。

MembershipProvider provider = Membership.Providers["Provider"];

if (provider.ValidateUser(user, passwd))
{
    SPFormsAuthenticationProvider authProvider = IisSetting.FormsClaimsAuthenticationProvider;

    SecurityToken token = SPFormsUserNameSecurityTokenHandler.CreateSecurityToken(authProvider.MembershipProvider, cookieName, passwd);
    SPFederationAuthenticationModule.Current.SetPrincipalAndWriteSessionToken(token);
}

但这对我不起作用。有谁知道如何将声明身份基于另一个密钥,然后是提供的用户名。

4

1 回答 1

0

如果你使用Claim-based authenticationwith FBAthan 你应该使用 like :

  bool status = SPClaimsUtility.AuthenticateFormsUser(Context.Request.UrlReferrer, UserName, Password);
  if (status)
  {
          // do your stuff.
  }
于 2012-10-01T05:54:51.857 回答