我有一个自定义成员资格提供程序,我在SharePoint 2007服务和.NET Web应用程序中都使用它。现在我正在尝试将SharePoint平台更新到2010 Foundation,我的提供程序不起作用。下面是两个验证用户身份并使用相同密钥设置auth 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);
}
但这对我不起作用。有没有人知道如何将声明标识基于另一个密钥,然后是提供的用户名。
答案 0 :(得分:0)
如果您使用Claim-based authentication
FBA
而不是您应该使用:
bool status = SPClaimsUtility.AuthenticateFormsUser(Context.Request.UrlReferrer, UserName, Password);
if (status)
{
// do your stuff.
}