1

我有一個自定義成員資格提供程序,我在SharePoint 2007服務和.NET Web應用程序中都使用它們。現在我正在嘗試將SharePoint平臺更新到2010 Foundation,而我的提供程序不起作用。下面是兩個例子,它們都對用戶進行身份驗證,並使用相同的密鑰設置身份驗證cookie。在SharePoint 2010中使用我的舊成員資格提供程序

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); 
} 

但這不適用於我。有誰知道如何基於另一個密鑰的索賠身份,然後提供的用戶名。

+1

檢查兩個版本在配置文件中的machineKey,讓他們一樣。 – Pushpendra

回答

0

如果您是使用Claim-based authenticationFBA應該比你喜歡使用:

bool status = SPClaimsUtility.AuthenticateFormsUser(Context.Request.UrlReferrer, UserName, Password); 
    if (status) 
    { 
      // do your stuff. 
    } 
+0

這將工作,如果用戶名== CookieName,但它不是 – ADN

+0

得不到適當的..你的意思是你的函數工作在'用戶名== CookieName'條件? – Jigs

+0

由於AuthenticateFormUser在聲明cookie中設置了用戶名,因此您的代碼只能在此情況下使用。 – ADN

相關問題