In
SharePoint 2010 quando si attivano più provider di autenticazione in una zona, ad esempio quando serve un autenticazione
windows e forms, bisogna usare
claims.
Questo cambia la modalità di login a
SharePoint in quanto, per accedere la prima volta, viene presentata una pagina aspx con una combo che mostra i provider disponibili. Se si sceglie
windows si viene immediatamente reindirizzati alla pagina richiesta. Scegliendo forms viene mostrato un form di login con la richiesta di utente e password.
Può capitare di avere la
WebAplication estesa su due zone e voler fare in modo che in una zona (es. default) non venga mostrata la pagina di scelta ma venga eseguita subito l'autenticazione
windows, mentre nella zona esterna (es. external) si venga rediretti subito al form di login. Questà seconda opzione è facilmente impostabile dalla centra amministation in fase di configurazione della zona (external), ma non esiste niente di nativo per il primo caso (windows autentication NTLM o Kerberos).
Per sopperire a questa limitazione può tornare utile questa pagina che non fa niente altro che eseguire un login automatico con le credenziali windows dell'utente corrente. Il risultato è che l'utente non si accorge della pagina di login e sembra di essere ritornati al comportamento di
SharePoint 2007 con l'autenticazione integrata. Il vantaggio di questo approccio è che l'utente loggato, ha la possibilità di scegliere, in fase di assegnazione permessi o altro, gli utenti da entrambi i provider (windows e form).
File: WindowsAutoLogin.aspx
<%@ Assembly Name="SharePointWindowsAutoLogin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=fc0740a23b131380" %>
<%@ Page Language="C#" AutoEventWireup="true" Inherits="SharePointWindowsAutoLogin.AutoLogin" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Windows Auto Login</title>
</head>
<body>
<form id="Form1" runat="server">
</form>
</body>
</html>
File: WindowsAutoLogin.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Utilities;
namespace SharePointWindowsAutoLogin
{
public class AutoLogin : Page
{
protected override void OnLoad(EventArgs e)
{
if (((SPContext.Current != null) && (SPContext.Current.Site != null)) && (SPContext.Current.Site.WebApplication != null))
{
SPWebApplication application = SPContext.Current.Site.WebApplication;
SPUrlZone zone = application.AlternateUrls[base.Request.Url].UrlZone;
string components = base.Request.Url.GetComponents(UriComponents.Query, UriFormat.SafeUnescaped);
SPIisSettings settings = application.IisSettings[zone];
foreach (SPAuthenticationProvider provider in settings.ClaimsAuthenticationProviders)
{
if (provider is SPWindowsAuthenticationProvider)
{
string str4 = provider.AuthenticationRedirectionUrl.ToString();
components = this.EnsureReturnUrl(components);
SPUtility.Redirect(str4, 0, this.Context, components);
}
}
}
base.OnLoad(e);
}
// Methods
private string EnsureReturnUrl(string queryString)
{
if (string.IsNullOrEmpty(queryString))
{
queryString = "?";
}
if (!queryString.Contains("ReturnUrl="))
{
if (!string.IsNullOrEmpty(queryString))
{
queryString = queryString + "&";
}
queryString = queryString + "ReturnUrl=/";
}
return queryString;
}
}
}
Per utilizzarla:
- mettere la pagina, ad esempio in ...14\Template\layouts\Sgart\WindowsAutoLogin.aspx
- andare nella Central Administration
- selezionare la WebApplication interessata
- cliccare sul pulsante Authentication providers e scegliere la zona interessata
- nella sezione Sign In Page URL selezionare Custom Sign In Page
- inserire ~/_layouts/sgart/WindowsAutoLogin.aspx
- salvare