我有一个自定义成员资格提供程序,我在 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);
}
但这对我不起作用。有谁知道如何将声明身份基于另一个密钥,然后是提供的用户名。