FBA身份验证和安全令牌错误

时间:2011-08-21 15:49:41

标签: sharepoint sharepoint-2010 sharepoint-2007 fba

有一个包含任何身份验证逻辑的登录表单。我输入登录名和密码,然后单击“登录”并在此代码行中收到错误“方法或操作未实现”:

SecurityToken tk = SPSecurityContext.SecurityTokenForFormsAuthentication
  (
     new Uri(SPContext.Current.Web.Url),
     "MyUserProvider",
     "MyRoleProvider",
     this.txLogin.Text,
     this.txPassword.Text
  );

=============================================== =

Server Error in '/' Application.

The method or operation is not implemented.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ServiceModel.FaultException`1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]: The method or operation is not implemented.

Stack Trace: 


[FaultException`1: The method or operation is not implemented.]
   Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannel.ReadResponse(Message response) +1161013
   Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannel.Issue(RequestSecurityToken rst, RequestSecurityTokenResponse& rstr) +73
   Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannel.Issue(RequestSecurityToken rst) +36
   Microsoft.SharePoint.SPSecurityContext.SecurityTokenForContext(Uri context, Boolean bearerToken, SecurityToken onBehalfOf, SecurityToken actAs, SecurityToken delegateTo) +26193297
   Microsoft.SharePoint.SPSecurityContext.SecurityTokenForFormsAuthentication(Uri context, String membershipProviderName, String roleProviderName, String username, String password) +26189452
   Microsoft.SharePoint.IdentityModel.Pages.FormsSignInPage.GetSecurityToken(Login formsSignInControl) +188
   Microsoft.SharePoint.IdentityModel.Pages.FormsSignInPage.AuthenticateEventHandler(Object sender, AuthenticateEventArgs formAuthenticateEvent) +123
   System.Web.UI.WebControls.Login.AttemptLogin() +152

但我有自定义成员资格和角色提供程序的程序集,所有方法都已实现!哪里出错?

2 个答案:

答案 0 :(得分:1)

您可能直接从自定义成员资格和角色提供程序调用基本成员资格函数,例如:

Membership.FindUsersByEmail("myemail@here.com");

这些将由默认会员提供商处理,该提供商不是您的会员提供商,而是SPClaimsAuthMembershipProvider。 SPClaimsAuthMembershipProvider没有实现很多基本方法 - 它们将返回一个未实现的异常。

如果您想要引用Web应用程序的选定成员资格提供程序,可以使用以下代码:

public static string GetMembershipProvider(SPSite site)
{
    // get membership provider of whichever zone in the web app is fba enabled 
    SPIisSettings settings = GetFBAIisSettings(site);
    return settings.FormsClaimsAuthenticationProvider.MembershipProvider;
}

public static SPIisSettings GetFBAIisSettings(SPSite site)
{
    SPIisSettings settings = null;

    // try and get FBA IIS settings from current site zone
    try
    {
        settings = site.WebApplication.IisSettings[site.Zone];
        if (settings.AuthenticationMode == AuthenticationMode.Forms)
            return settings;
    }
    catch 
    { 
        // expecting errors here so do nothing                 
    }

    // check each zone type for an FBA enabled IIS site
    foreach (SPUrlZone zone in Enum.GetValues(typeof(SPUrlZone)))
    {
        try
        {
            settings = site.WebApplication.IisSettings[(SPUrlZone)zone];
            if (settings.AuthenticationMode == AuthenticationMode.Forms)
                return settings;
        }
        catch
        { 
            // expecting errors here so do nothing                 
        }
    }

    // return null if FBA not enabled
    return null;
}

答案 1 :(得分:0)

有些事情要尝试:

  • 您是否通过Cental Admin在网络应用程序中注册了提供商?
  • 您是否在web.config中注册了提供程序?
  • 如果您使用SPClaimsUtility.AuthenticateFormsUser会发生什么?