SharePoint 2010 - Custom Login FBA Web Part

Ho realizzato una Web Part che permette di effettuare il login mediante autenticazione FBA su SharePoint 2010; il codice è abbastanza semplice (anche perché ho utilizzato il controllo System.Web.UI.WebControls.Login di ASP.NET e il metodo di base da implementare è OnAutenticate.

 

protected override void OnAuthenticate(AuthenticateEventArgs e)

{

    bool status = SPClaimsUtility.AuthenticateFormsUser(Context.Request.UrlReferrer, UserName, Password);

    if (!status)

    {

            panel.Visible = true;

            e.Authenticated = false;

     }

     else

         e.Authenticated = true;

}

 

 

Con SharePoint 2007 questo approccio funziona correttamente (anche se il metodo da utilizzare per l’autenticazione è differente), ma con SharePoint 2010 il problema nasce quando si prova ad effettuare il logout dell’utente, infatti viene lanciata la seguente eccezione:

 

[ArgumentException: Exception of type 'System.ArgumentException' was thrown. Parameter name: encodedValue]

Microsoft.SharePoint.Administration.Claims.SPClaimEncodingManager.DecodeClaimFromFormsSuffix(String encodedValue) +25829214

Microsoft.SharePoint.Administration.Claims.SPClaimProviderManager.GetProviderUserKey(String encodedSuffix) +73

Microsoft.SharePoint.ApplicationRuntime.SPHeaderManager.AddIsapiHeaders(HttpContext context, String encodedUrl, NameValueCollection headers) +845

Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.PreRequestExecuteAppHandler(Object oSender, EventArgs ea) +352

System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80

System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously

 

Chiaramente se si utilizza la form di login standard fornita da SharePoint l’eccezione non si presenta.

 

Il problema nasce dalla presenza del cookie .ASPXAUTH che viene generato dalla Web Part realizzata e non dalla form di login SharePoint.

Per risolvere tale problema è qudindi necessario implementare un altro metodo e cancellare il cookie una volta autenticato l’utente, cosa che può essere realizzata implementando il metodo OnLoggedIn.

 

protected override void OnLoggedIn(EventArgs e)

{

    HttpContext.Current.Response.Cookies.Remove(".ASPXAUTH");

}

Technorati Tags:

«giugno»
domlunmarmergiovensab
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789