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: SharePoint