1

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

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

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

4

2 回答 2

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;
}
于 2011-08-22T18:29:06.173 回答
0

一些事情要尝试:

  • 您是否通过中央管理员在 Web 应用程序中注册了提供程序?
  • 您是否在 web.config 中注册了提供程序?
  • 如果您改用SPClaimsUtility.AuthenticateFormsUser会发生什么?
于 2011-08-21T17:39:50.653 回答