Ошибка аутентификации FBA и токена безопасности - PullRequest
1 голос
/ 21 августа 2011

Существует форма входа в систему с любой логикой аутентификации. Я ввожу логин и пароль, затем нажимаю «Войти» и получаю сообщение об ошибке «Метод или операция не реализованы» в этой строке кода:

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 ]

1 голос
/ 22 августа 2011

Вы можете вызывать базовые функции членства напрямую из своего провайдера пользовательских ролей и ролей, например:

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

Они будут обрабатываться поставщиком по умолчанию, который не будет вашим провайдером членства, нобудет SPClaimsAuthMembershipProvider.SPClaimsAuthMembershipProvider не реализует много базовых методов - они возвращают не реализованное исключение.

Если вы хотите, чтобы выбранный поставщик членства веб-приложения ссылался, вы можете использовать следующий код:

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;
}
0 голосов
/ 21 августа 2011

Некоторые вещи попробовать:

  • Зарегистрировали ли вы провайдеров в веб-приложении через Cental Admin?
  • Вы зарегистрировали провайдеров в своем web.config?
  • Что произойдет, если вместо этого вы будете использовать SPClaimsUtility.AuthenticateFormsUser ?
...