<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mauro Dalfreddo &#187; Web</title>
	<atom:link href="http://www.maurodalfreddo.it/archives/category/software/web/feed" rel="self" type="application/rss+xml" />
	<link>http://www.maurodalfreddo.it</link>
	<description>My work, my life... my Blog</description>
	<lastBuildDate>Thu, 24 Jun 2010 12:10:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Web Application Stress Tool anche su XP</title>
		<link>http://www.maurodalfreddo.it/archives/249/web-application-stress-tool-anche-su-xp</link>
		<comments>http://www.maurodalfreddo.it/archives/249/web-application-stress-tool-anche-su-xp#comments</comments>
		<pubDate>Tue, 15 Sep 2009 09:34:11 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=249</guid>
		<description><![CDATA[Hack: come attivare tutte le funzionalità di Microsoft Web Application Stress Tool su XP e Vista]]></description>
			<content:encoded><![CDATA[<p><em>Un hack : come attivare tutte le funzionalità di WAST su XP e Vista</em></p>
<p>Sviluppare ed implementare un sito o un&#8217;applicazione web è un processo creativo che può essere più o meno interessante e quindi più o meno divertente&#8230;</p>
<p>E quando finisce il divertimento cominciano i grattacapi! Sicuramente qualcuno nel management o il cliente che ha commissionato il progetto o forse noi stessi vorremmo conoscere quantitativamente le sue prestazioni, in termini di tempi di risposta in funzione del numero di utenti.</p>
<p>Infine potremo arrivare a determinare la capacità del sito, ovvero il numero massimo di richieste/sec aventi tempi di risposta decenti (ovvero prima il numero di utenti appena prima del degrado/collasso del sistema)</p>
<p><img class="aligncenter size-full wp-image-265" title="Load test" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/grafico.jpg" alt="Load test" width="493" height="202" /></p>
<p>Quindi dopo aver sviluppato e pubblicato un sito o una web application conviene affrontare l&#8217;annoso problema dei test di carico e della simulazione realistica delle navigazioni degli utenti per:</p>
<ul>
<li>vedere  come si comporta il sistema</li>
<li> se sussitono colli di bottiglia, aree o sottosistemi dove è possibile ottimizzare qualcosa </li>
<li>dove è meglio iniziare ad effettuare il cosiddetto tuning.</li>
</ul>
<p>Allo scopo si possono trovare vari tools commerciali e opensource.<br />
E&#8217; possibile trovare una lista abbastanza esaustiva dei software all&#8217;url <a href="http://www.softwareqatest.com/qatweb1.html">http://www.softwareqatest.com/qatweb1.html</a>.</p>
<p>Nell&#8217;ultima esperienza personale, non avendo (mai) molto tempo a disposizione mi sono concentrato su alcuni software grafici e interfacciabili con i sistemi Windows Server:<br />
- l&#8217;ottimo ma assi costoso <a href="http://www.neotys.com" target="_blank">Neoload</a>, che permette di controllare e verificare graficamente  tutte le fasi del processo dal design alla fase di test e l&#8217;analisi dei risultati<br />
- gratuitamente in casa Microsoft si trovano WCAT (Web Capacity Analysis Tool), largamente programmabile ma solo tramite script,<br />
e WAST (<a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1298" target="_blank">Web Application Stress Tool &#8211; Homer </a>), il ben noto ma vetusto tool grafico.</p>
<p>WAST (o WAS) è uno strumento di simulazione e di carico sviluppato e rilasciato molti anni or sono da Microsoft, ma è un piccolo gioiellino, poichè permette di controllare e verificare graficamente tutte le fasi del processodi test:</p>
<ul>
<li>la registrazione visuale della navigazione effettuata con il browser</li>
<li>la creazione dei profili delle pagine di test</li>
<li>la definizione degli utenti</li>
<li>la distribuzione delle tipologie di test</li>
<li>la definizione del pool di macchine che partecipano al test di carico</li>
<li>la definizione dei contatori (performance counter) delle macchine oggetto di test</li>
<li>la gestione del test vero e proprio, ovvero lo stress del sito o dell&#8217;applicazione web</li>
<li>la collezione e l&#8217;elaborazione dei risultati, anche se in forma testuale.</li>
</ul>
<p>Purtroppo WAST è supportato ufficialmente solo su Microsoft Windows NT 4.0 SP 4+ e Microsoft Windows 2000, sistemi operativi che ormai non esistono (quasi) più negli ambiti di produzione.</p>
<p>L&#8217;installazione su Windows XP và praticamente sempre a buon fine, ed eseguendo WAST si possono sperimentare da subito le varie funzionalità tranne due:</p>
<ul>
<li>non funzionano performance counter</li>
<li>non funziona la comunicazione con i client del pool</li>
</ul>
<p>Su Windows Vista invece si ottiene da subito un errore (<a href=" http://weblogs.asp.net/steveschofield/archive/2007/03/10/iis7-post-32-web-application-stress-tool-on-vista.aspx" target="_blank">Steve Schofield Weblog &#8211; WAST on Vista </a>), ma basta caricare il file msvcp50.DLL in c:\windows\system32 (poiché non è compreso di default nel SO).</p>
<p>Vista l&#8217;indubbia utilità dell&#8217;applicazione, mi sono intestardito nel far funzionare WAST anche sui SO più recenti&#8230;e alla fine, dopo un po&#8217; di analisi e troubleshooting ci sono riuscito.</p>
<p><strong>Performance counters</strong></p>
<p>Per far funzionare la finestra di ricerca e di aggiunta dei performance counters delle macchine remote, nonchè il polling dei valori a runtime, basta copiare nella directory del programma il file <strong>pdh.dll</strong>, che si trova nella distribuzione di Windows 2000, e che è infatti la libreria che contiene le funzioni per i contatori.</p>
<p>Sicuramente WAS è stato compilato nel 2000 utilizzando quella versione di libreria (5.0.2174.1), mentre su XP c&#8217;e&#8217; quella nuova (5.1.2600.3536)</p>
<p style="text-align: center;"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/wast_xp_perf_counters.jpg" target="_blank"><img class="aligncenter size-medium wp-image-258" title="Abilitare le funzionalità relative ai performance counter" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/wast_xp_perf_counters-300x178.jpg" alt="Abilitare le funzionalità relative ai performance counter" width="300" height="178" /></a></p>
<p><strong>Clients</strong></p>
<p>Bisogna tenere presente che WAST è un tool client/server: l&#8217;interfaccia client (hclient.exe) colloquia localmente e/o remotamente (con tecnologia DCOM) con un windows service (webtool.exe); inoltre i dati sono resi persistenti su un database access.</p>
<p>Per far funzionare la comunicazione con i client definiti nel pool bisogna quindi  &#8220;giocare&#8221; con i pemessi DCOM (dcomcnfg.exe).</p>
<p>Si deve ricordare inoltre che, la comunicazione ed in generale i sistemi Microsoft prima del SP2 di Windows XP non erano securizzati di default, e quindi, per far funzionare il nostro WAST su XP, bisogna &#8220;rilassare&#8221; un pochino la sicurezza.</p>
<p style="text-align: center;"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/wast_xp_clients.jpg" target="_blank"><img class="size-medium wp-image-257    aligncenter" title="Abilitare le funzionalità per il pool di client su WAST" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/wast_xp_clients-300x207.jpg" alt="Abilitare le funzionalità per il pool di client su WAST" width="300" height="207" /></a></p>
<p><a href="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/wast_xp_clients.jpg" target="_blank"></a></p>
<p style="text-align: left;"> Procedimento:</p>
<ol>
<li>Eseguire dcomcnfg.exe</li>
<li>Visualizzare le Proprietà di Servizi Componenti &#8211; Computer &#8211; Risorse Computer</li>
<li>Nel Tab Proprietà predefinite selezionare la casella Abilita servizi Internet COM in questo computer (che di default è deselezionato)</li>
<li>Nel Tab Protezione COM: Modificare i Limiti delle autorizzazioni di accesso abilitare per l&#8217;ACCESSO ANONIMO l&#8217;accesso remoto;<br />
Modificare i Limiti delle autorizzazioni di esecuzione e attivazione  abilitare per Everyone l&#8217;avvio remoto e l&#8217;attivazione remota</li>
<li>Entrare nel dettaglio dei componenti DCOM e aprire le Proprietà di &#8220;WebTool&#8221;: personalizzare eventualmente le ACL in modo tale che Everyone possa avviare ed attivare remotamente il componente</li>
</ol>
<p>E il gioco è fatto! Provare per credere&#8230;</p>
<p><strong>Risorse</strong></p>
<p> <a href="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/WAST_XP.zip"><img style="border: 0px;" src="/img/zipico.jpg" border="0" alt="" height="32" /> DLL aggiuntive per WAST su XP</a></p>
<p><a href="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/DCOM-Settings-for-WAST-on-XP.pdf"><img src="/img/pdfico.jpg" border="0" alt="" /> DCOM Settings for WAST on XP</a></p>
<p><a href="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/lamincard_broli.jpg"></a></p>
<p><strong>Riferimenti</strong></p>
<p>- How To Install and Use the Web Application Stress (WAS) Tool</p>
<p><a href="http://support.microsoft.com/kb/313559/en-us">http://support.microsoft.com/kb/313559/en-us</a></p>
<p>- Introducing Microsoft Web Application Stress Tool (BY Jigesh Shah)</p>
<p><a href="http://www1bpt.bridgeport.edu/sed/projects/cs597/Fall_2002/jishah/web_application_stress.htm">http://www1bpt.bridgeport.edu/sed/projects/cs597/Fall_2002/jishah/web_application_stress.htm</a></p>
<p>- Load Testing Web Applications using Microsoft&#8217;s Web Application Stress Tool (By Rick Strahl)</p>
<p><a href="http://www.code-magazine.com/article.aspx?quickid=0001091&amp;page=1">http://www.code-magazine.com/article.aspx?quickid=0001091&amp;page=1</a></p>
<p>- Download Microsoft Web Application Stress Tool &#8211; Homer:</p>
<p><a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1298">http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1298</a></p>
<p>- Steve Schofield Weblog &#8211; WAST on Vista</p>
<p><a href="http://weblogs.asp.net/steveschofield/archive/2007/03/10/iis7-post-32-web-application-stress-tool-on-vista.aspx">http://weblogs.asp.net/steveschofield/archive/2007/03/10/iis7-post-32-web-application-stress-tool-on-vista.aspx</a></p>
<p>- Recentemente c&#8217;e&#8217; stato qualche problema a reperire WAST sul sito Microsoft download, per cui allego il <a href="http://www.maurodalfreddo.it/wp-content/uploads/2009/09/web_stress_tool_setup.zip">setup</a>, almeno finchè rimarrano tali problemi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/249/web-application-stress-tool-anche-su-xp/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Impersonate &amp; delegate</title>
		<link>http://www.maurodalfreddo.it/archives/112/impersonate-delegate</link>
		<comments>http://www.maurodalfreddo.it/archives/112/impersonate-delegate#comments</comments>
		<pubDate>Fri, 13 Mar 2009 15:55:46 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Kerberos]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows Autentication]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Delegation]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Impersonation]]></category>
		<category><![CDATA[integrated authentication]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[NTLM]]></category>
		<category><![CDATA[security context]]></category>
		<category><![CDATA[SPN]]></category>
		<category><![CDATA[trusted connection]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=112</guid>
		<description><![CDATA[Implementare la delegation: come il security context di un utente può essere veicolato a partire dal client, per il middle tier fino al backend server con l'aiuto di Kerberos.]]></description>
			<content:encoded><![CDATA[<p>Finalmente trovo un po&#8217; di tempo per continuare la trattazione iniziata in un mio articolo precedente dei <a title="Motivi per veicolare il contesto utente fino al database" href="http://www.maurodalfreddo.it/archives/59"><strong>Motivi per veicolare il contesto utente fino al database</strong></a>, e a questo rimando dando per scontati alcuni argomenti.</p>
<p>Sono già stati evidenziati i benefici e le caratteristiche dell&#8217;utilizzo dell&#8217;autenticazione integrata e del contesto utente anche fino all&#8217;ultimo livello applicativo (tier). E&#8217; stata poi spiegata la configurazione da  utilizzare in un&#8217;archiettura a 3-tier (IE-IIS-SQL) tutta implementata in un unica macchina (single server).</p>
<p>Per capire come il security context di un utente possa essere veicolato esternamente ad un server da un servizio ad un altro,  bisogna comprendere i protocolli di autenticazione utilizzati.</p>
<p style="text-align: center;"><img class="size-full wp-image-131 aligncenter" title="kerb_00" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/03/kerb_00.jpg" alt="kerb_00" width="325" height="87" /></p>
<p style="text-align: center;"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2009/03/kerb_00.jpg"></a></p>
<p><strong></strong></p>
<h2>NTLM e Kerberos a confronto</h2>
<p>Il protocolli di autenticazione supportati da Windows sono NTLM (NT Lan Manager, fino dalla versione 4.0)  e Kerberos (da Win 2000 in poi).  Mentre NTLM si basa su un meccanismo di  challenge/response (ovvero lo scambio di un hash criptato tra client e server), Kerberos basa la sua architettura sull&#8217;esistenza di server autenticatori (KDC, Key distribuition center), che distribuiscono tikets (cifrati e firmati e quindi affidabili) ai client per utilizzare specifici servizi.</p>
<p>I pregi di Kerberos sono:</p>
<ul>
<li>lo standard aperto, basato sull&#8217;RFC 4120</li>
<li>la maggiore velocità, poiché, diversamente da NTLM, il servizio non deve verificare la validità dell&#8217;utente/client presso un DC, ma gli basta semplicemente il ticket stesso</li>
<li>la mutua autenticazione, poichè non solo il client si autentica al servizio (come NTLM),  ma il client stesso è certo dell&#8217;identità del servizio, poichè solo quello può leggere il ticket fornito</li>
<li>supporto per il logon tramite smart card</li>
<li>supporto per la delega dell&#8217;autenticazione (Authentication delegation o Authentication forwarding): grazie a questa caratteristica un servizio può accedere ad un risorsa remota per conto di un utente.</li>
</ul>
<p>Quet&#8217;ultimo punto sta a significare che un utente A può dare diritti ad un&#8217;entità intermedia B per autenticarsi ad un terzo server C, come se<br />
l&#8217;entità B fosse l&#8217;utente A stesso. Il server C baserà le sue decisioni autorizzative sull&#8217;identità di A invece che su quella di B.</p>
<p>E&#8217; possibile iterare questo schema per più livelli applicativi distribuiti (multi-tier applications) solamente utilizzando Kerberos e non NTLM, semplicemente perchè NTLM non supporta la delegation! Quindi NTLM funziona su un&#8217;architettura a single server solo perchè il security context dell&#8217;utente viene creato alla sua connessione al primo livello sul server (dopo l&#8217;autenticazione) ed è disponibile poi per i livelli applicativi sucessivi.</p>
<p>Nell&#8217;implementazione Microsoft di Kerberos, il servizio stesso è altamente integrato con Active Directory (AD) e tutti i dati e le credenziali sono memorizzati in essa</p>
<p><span id="more-112"></span></p>
<p> </p>
<h2>Negotiate</h2>
<p>Quando è attivata l&#8217;autenticazione Kerberos, tra Internet Explorer (MSIE) e Internet Information Server (IIS) vengono scambiati alcuni pacchetti per negoziare il protocollo più sicuro (RFC 4559): viene utilizzato l&#8217;algoritmo HTTP/SPNEGO che tenta dapprima di utilizzare Kerberos (Negotiate) e in caso negativo (fallback) poi i protocolli meno sicuri come NTLM, Digest e BASIC.</p>
<p>Per capire bene il meccanismo rimando all&#8217;interesante articolo <a href="http://www.adopenstatic.com/cs/blogs/ken/archive/2006/08/02/Two-easy-_2800_easier_3F002900_-ways-to-determine-Kerberos-from-NTLM-in-a-HTTP-capture.aspx" target="_blank">Two easy ways to determine kerberos from NTLM in a HTTP capture</a> di Ken Schaefer.</p>
<p> </p>
<h2>Service Principal Names (SPN)</h2>
<p>Un <em>service principal name</em> (SPN) è il nome col quale un servizio si registra in Kerberos e anche col quale un client identifica univocamente un&#8217;istanza di un servizio. Quando un client vuole connettersi ad un servizio, ne localizza un&#8217;istanza, ne ricava un SPN, si connette al servizio e presenta l&#8217;SPN del servizio per autenticarsi.</p>
<p>Un SPN è definito nel formato <em>serviceclass/host:port/servicename</em> . Se nome e porta non sono standard devono essere specificate. Ad esempio:</p>
<p>Se il servizio si chiama  MyService ed è eseguito sul computer DCA  e usa le porte TCP o UDP  8088 ed è localizzato in AD con il nome MyS nella UO denominata CS,  nel dominio cpandl.com, allora l&#8217;SPN sarà</p>
<pre>MyService/DCA.cpandl.com:8088/CN=MyS,OU=CS,DC=cpandl,DC=com</pre>
<p>Se il server WS2003A sta erogando un servizio di desktop remoto (RDP) sulla porta standard (TCP 3389). Allora i 2 SNP associati in AD saranno semplicemente:</p>
<pre>TERMSRV/WS2003A</pre>
<pre>TERMSRV/WS2003A.cpandl.com</pre>
<p>Per registrare un SPN è possibile utilizzare l&#8217;utility <a href="http://technet.microsoft.com/en-us/library/cc773257.aspx" target="_blank">setspn.exe</a> disponibile in Windows Server 2003, Windows Server 2008 o su XP/Vista con i Windows Server 2003 Support Tools.</p>
<p>Ad esempio per aggiungere un SPN per il servizio web-IIS di Machine (il cui pool gira con l&#8217;account di dominio &#8220;domain\user&#8221;) usare:</p>
<pre> Setspn.exe -A HTTP/Machine domain\user</pre>
<pre> Setspn.exe -A HTTP/Machine.domain.com domain\user </pre>
<p>Notare che deve essere registrato due volte sia per il nome NetBios cheper il FQDN. Nel caso in cui il servizio giri con il Local System Account/Network Service usare invece:</p>
<pre> Setspn.exe -A HTTP/Machine Machine</pre>
<pre> Setspn.exe -A HTTP/Machine.domain.com Machine </pre>
<p>L&#8217;utility setspn può essere utilizzata per conoscere quali SPN siano registrati in AD:</p>
<pre>setspn -l Machine</pre>
<pre>setspn -l domain\user</pre>
<p>Rimando comunque a  <a href="http://technet.microsoft.com/en-us/library/cc755413.aspx" target="_blank">Technet</a> per ulteriori esempi, opzioni ed utilizzi di setspn.</p>
<p> </p>
<h2>Abilitare la delegation</h2>
<p>Per abilitare la delegation tra i livelli applicativi è necessario abilitarla:</p>
<ul>
<li>per l&#8217;utente che usufruisce del servizio (non deve essere <em>sensitive</em>)</li>
<li>sull&#8217;utente con cui viene eseguito il servizio</li>
<li>per il conmputer account del server</li>
</ul>
<p>Bisogna verificare che gli user accounts non siano disabilitati per la delegation:</p>
<p style="TEXT-ALIGN: center"><a href="http://www.maurodalfreddo.it/wp-content/uploads/2009/03/kerb_02.jpg"></a><img class="size-full wp-image-129 aligncenter" title="kerb_02" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/03/kerb_02.jpg" alt="kerb_02" width="404" height="484" /></p>
<p style="text-align: left;">Poi  bisogna abilitare il computer account e l&#8217;user account del servizio (dopo che è stato registrato l&#8217;SPN compare il Tab sul profilo).</p>
<p style="TEXT-ALIGN: center"><img class="size-full wp-image-128 aligncenter" title="kerb_01" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/03/kerb_01.jpg" alt="kerb_01" width="404" height="484" /></p>
<p>La delegation può essere abilitata per tutti i servizi o per alcuni specifici; nella figura sopra all&#8217; utente-servizio IIS è stata abilitata la delega limitatamente per le connessioni al servizio SQL Server.</p>
<p>Bisogna inoltre verificare che siano impostati i giusti rights agli utenti interessati (ovvero a quelli con cui vengono eseguiti i servizi):</p>
<ul>
<li><em>Act as part of the operating system</em> per poter impersonare l&#8217;utente</li>
<li><em>Impersonate a client after authentication</em> per ogni account che dovrà delegare le credenziali (ovvero su tutti i middle tier intermedi), come l&#8217;account IIS</li>
</ul>
<p>Tali right possono essere impostati nelle local security policy dei singoli server o in qualche GPO di AD a seconda delle policy implementate e del contesto.</p>
<p> </p>
<h2> Un comune scenario: IE &#8211; IIS (ASP.NET) &#8211; SQL</h2>
<p>La seguente figura riassume tutte le attività che devono essere fatte o verificate per abilitare la delegation in questo tipico scenario.</p>
<p><img class="alignnone size-full wp-image-135" title="kerb_03" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/03/kerb_03.jpg" alt="kerb_03" width="531" height="461" /></p>
<p>A) A livello di dominio:</p>
<ul>
<li>Gli user account non devono essere sentive (Tab Account)</li>
<li>Registrare gli SPN per i servizi IIS e SQL, specificatamente agli account con cui vengono eseguiti, usando comandi simili a:</li>
</ul>
<pre>Setspn.exe -A HTTP/MachineIIS domain\userIIS</pre>
<pre>Setspn.exe -A HTTP/MachineIIS.domain.com  domain\userIIS</pre>
<pre>Setspn.exe -A MSSQLSvc/MachineSQL:1433 domain\userSQL</pre>
<pre>Setspn.exe -A MSSQLSvc/MachineSQL.domain.com:1433 domain\userSQL</pre>
<ul>
<li>L&#8217;account IIS e quello del pool Asp.net deve essere Trusted for delegation (Tab Delegation)</li>
</ul>
<p> B) Sui client Internet Explorer</p>
<ul>
<li>Enable Window Authentication</li>
<li>In Strumenti-Opzioni Internet-Protezione verificare che il server IIS (o il dominio legato al virtualhost) sia censito nell&#8217;Intranet Zone</li>
</ul>
<p>C) Web Server; nella console di IIS sul Web Server</p>
<ul>
<li>impostare a livello di Site e Virtual directory unicamente l&#8217;opzione di Autenticazione integrata. Per evitare problematiche di instabilità o di malfunzionamenti impredicibili, bisogna assicurarsi che tutte le applicazioni web (virtual directory) che si appoggiano al Pool ASP.NET (per il quale è stato registrato l&#8217;SPN) abbiano abilitata solo questa impostazione.</li>
<li> Nel web.config della web application impostare: </li>
</ul>
<pre>&lt;authentication mode="Windows"/&gt;
&lt;identity impersonate="true"/&gt;</pre>
<ul>
<li>Nel web.config della web application impostare la connection string opportunamente in modo similare:</li>
</ul>
<pre>connectionString="Server=MachineSQL;Database=MYDB;Integrated Security=True"</pre>
<p> D) Database; con SQL Server Management studio</p>
<ul>
<li>Devono essere dati i diritti opportuni agli utenti  sul database </li>
</ul>
<p> </p>
<h2>Utility e debugging</h2>
<p>Una preziosa utility che permette di visualizzare i ticket kerberos attualmente presenti sul client è <a href="http://www.microsoft.com/downloads/details.aspx?familyid=4E3A58BE-29F6-49F6-85BE-E866AF8E7A88&amp;displaylang=en" target="_self">kerbtray</a> disponibile sul sito Microsoft. da citare anche l&#8217;utility testuale <a href="http://www.microsoft.com/downloads/details.aspx?familyid=1581E6E7-7E64-4A2D-8ABA-73E909D2A7DC&amp;displaylang=en" target="_blank">klist</a> che oltre a listare permette anche di cancellare i ticket presenti.</p>
<p><img class="alignnone size-full wp-image-142" title="kerb_04" src="http://www.maurodalfreddo.it/wp-content/uploads/2009/03/kerb_04.jpg" alt="kerb_04" width="390" height="459" /></p>
<p>Per abilitare invece i logging del client kerberos nel system log e per poterli visualizzare con Event Viewer bisogna valorizzare la seguente chiave di registro:</p>
<pre>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters</pre>
<pre>Registry Value: LogLevel
Value Type: REG_DWORD
Value Data: 0x1</pre>
<p>Una volta risolti i problemi conviene eliminare tale chiave di registro, poichè il logging  influenza le performance.</p>
<p> </p>
<h2>Riferimenti</h2>
<p>IETF &#8211; <a href="http://www.ietf.org/rfc/rfc4120.txt" target="_blank">The Kerberos Network Authentication Service (V5)</a></p>
<p>IETF &#8211; <a href="http://www.ietf.org/rfc/rfc4559.txt" target="_blank">SPNEGO-based Kerberos and NTLM HTTP Authentication in Microsoft Windows</a></p>
<p>Microsoft Download - <a href="http://download.microsoft.com/download/1/e/e/1ee86ce4-8234-4aa1-94f4-a37039837729/Troubleshooting_Kerberos_Delegation.DOC" target="_blank">Troubleshooting Kerberos Delegation in Windows 2000 and Windows Server 2003</a></p>
<p>Microsoft &#8211; <a href="http://support.microsoft.com/kb/929650/en-us" target="_blank">How to use SPNs when you configure Web applications that are hosted on IIS 6.0</a></p>
<p>MSDN &#8211; <a href="http://msdn.microsoft.com/en-us/library/ms998351.aspx" target="_blank">How To: Use Impersonation and Delegation in ASP.NET 2.0</a></p>
<p>MSDN &#8211; <a href="http://msdn.microsoft.com/en-us/library/ms998355.aspx" target="_blank">How To: Use Protocol Transition and Constrained Delegation in ASP.NET 2.0</a></p>
<p>MS Technet &#8211; <a href="http://technet.microsoft.com/en-us/library/cc773257.aspx" target="_blank">Setspn Overview</a></p>
<p>Ken Shaefer &#8211; <a href="http://www.adopenstatic.com/cs/blogs/ken/archive/2006/08/02/Two-easy-_2800_easier_3F002900_-ways-to-determine-Kerberos-from-NTLM-in-a-HTTP-capture.aspx" target="_blank">Two easy (easier?) ways to determine Kerberos from NTLM in a HTTP capture</a></p>
<p> Microsoft &#8211; <a href="http://support.microsoft.com/kb/215383/en-us" target="_blank">How to configure IIS to support both the Kerberos protocol and the NTLM protocol for network authentication</a></p>
<p>Microsoft &#8211; <a href="http://support.microsoft.com/kb/907272/en-us" target="_blank">Kerberos authentication and troubleshooting delegation issues</a></p>
<p>MS Technet &#8211; <a href="http://technet.microsoft.com/en-us/library/cc786325.aspx" target="_blank">Troubleshooting Kerberos Problems</a></p>
<p>Microsoft Download &#8211; <a href="http://www.microsoft.com/downloads/details.aspx?familyid=4E3A58BE-29F6-49F6-85BE-E866AF8E7A88&amp;displaylang=en" target="_blank">Windows 2000 Resource Kit Tool: Kerbtray.exe </a></p>
<p><a href="http://www.microsoft.com/DownLoads/details.aspx?FamilyID=99b0f94f-e28a-4726-bffe-2f64ae2f59a2&amp;displaylang=en"></a></p>
<p><a href="http://technet.microsoft.com/en-us/library/cc779070.aspx"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/112/impersonate-delegate/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Autentication: loggarsi con un utente differente</title>
		<link>http://www.maurodalfreddo.it/archives/71/windows-autentication-loggarsi-on-con-un-utente-differente</link>
		<comments>http://www.maurodalfreddo.it/archives/71/windows-autentication-loggarsi-on-con-un-utente-differente#comments</comments>
		<pubDate>Thu, 06 Nov 2008 15:13:22 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows Autentication]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[integrated authentication]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=71</guid>
		<description><![CDATA[Come cambiare utente e forzare il popup di logon con la Windows authentication]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Recentemente ho avuto la necessità di forzare il cambio utente in un&#8217;applicazione asp.net che utilizza Windows Autentication come sistema di autenticazione.</p>
<p><a class="alignleft" href="http://www.maurodalfreddo.it/wp-content/uploads/2008/11/sharepoint_changeuser.jpg" target="_blank"><img class="alignleft size-medium wp-image-70" style="float:left; padding:5px" title="sharepoint_changeuser" src="http://www.maurodalfreddo.it/wp-content/uploads/2008/11/sharepoint_changeuser-300x160.jpg" alt="Sharepoint: Accedi come utente diverso" width="300" height="160" /></a>L&#8217;idea è stata presa dai siti di Micorsoft Office Sharpoint 2007 (MOSS): di default l&#8217;accesso viene effettuato con l&#8217;utente corrente di dominio; al bisogno è presente un link nel menù per cambiare l&#8217;utente connesso; viene presentato quindi il popup standard per l&#8217;immissione delle credenziali, dopo la nuova autenticazione l&#8217;utente viene ripresentata la pagina corrente&#8230;</p>
<p>I requirement erano simili, ovvero l&#8217;utente Windows connesso all&#8217;applicazione asp.net su IIS non doveva essere necessariamente quello loggato sulla macchina con il CTRL+ALT+CANC. La problematica è connessa anche col fatto che i siti di una intranet sono tutti trusted di default, per cui Explorer effettua tramite la Windows Authentication un&#8217;autenticazione implicita (single sign-on). </p>
<p>I vantaggi del cambiamento di profilo sono palesi: l&#8217;utente non deve scollegarsi e riconnettersi a Windows, chiudendo tutte le applicazioni, oppure eseguire Internet Explorer con l&#8217;opzione &#8220;Run as&#8221;; deve solo cliccare un link&#8230;</p>
<p>Il trucco sta nello spedire al browser uno <strong>status code 401</strong> &#8220;Access denied&#8221;, per cui il browser richiede all&#8217;utente ulteriori credenziali e richiama la pagina nuovamente.</p>
<p>Nella pagina desiderata, o nella master page, inserire il link alla pagina del cambio utente:</p>
<pre>&lt;a href="AccessDenied.aspx?loginasanotheruser=true"&gt;Cambio profilo&lt;/a&gt;</pre>
<p>In AccessDenied.aspx  <br />
 </p>
<pre>&lt;%@ Page Language="C#" autoeventwireup="true"%&gt;</pre>
<pre>&lt;%</pre>
<pre>if (Session.IsNewSession)  Response.Redirect("default.aspx", true);</pre>
<pre>Session.Abandon();</pre>
<pre>Response.StatusCode = 401;</pre>
<pre>Response.StatusDescription = "Access Denied";</pre>
<pre>%&gt;</pre>
<p>Questa pagina controlla se la sessione è appena stata creata, e nel qual caso reinvia l&#8217;utente, che si è appena autenticato ad IIS, alla home page. Viceversa viene reimpostato lo status cose a 401. Il client richiede nuovamente le credenziali e la pagina aspx viene eseguita nuovamente solo se queste sono valide (è IIS infatti che effettua questa verifica).</p>
<p>Al posto di redirezionare il client alla home page è possibile ritornare sulla pagina appena precedente; basta passare a AccessDenied.aspx un parametro con il valore di window.location; ma questa è un&#8217;altra storia&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/71/windows-autentication-loggarsi-on-con-un-utente-differente/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Motivi per veicolare il contesto utente fino al database</title>
		<link>http://www.maurodalfreddo.it/archives/59/motivi-per-veicolare-il-contesto-utente-fino-al-database</link>
		<comments>http://www.maurodalfreddo.it/archives/59/motivi-per-veicolare-il-contesto-utente-fino-al-database#comments</comments>
		<pubDate>Thu, 29 May 2008 13:00:27 +0000</pubDate>
		<dc:creator>Mauro Dalfreddo</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[Impersonation]]></category>
		<category><![CDATA[integrated authentication]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[security context]]></category>
		<category><![CDATA[trusted connection]]></category>

		<guid isPermaLink="false">http://www.maurodalfreddo.it/?p=59</guid>
		<description><![CDATA[Come e perchè veicolare il contesto di sicurezza dell'utente dal browser all'IIS, fino al database]]></description>
			<content:encoded><![CDATA[<p>Ho sempre piacevolmente apprezzato le implicazioni dell&#8217;autenticazione integrata windows e nelle mie applicazioni, a meno che non mi sia esplicitamente richiesto, cerco sempre di portare il contesto di sicurezza dell&#8217;utente più avanti possibile nelle sue varie componenti.</p>
<p>Per esempio: il browser viene eseguito nel contesto di sicurezza dell&#8217;utente che si logga al computer, poi l&#8217;utente si autentica al Web server e le pagine chiamate ed i componenti software che le sottintendono sono eseguiti nel contesto di sicurezza dell&#8217;utente stesso. Similmente accade per l&#8217;autenticazione e la fruizione di altri servizi di rete o della connessione al database (anche in cascata tramite <em>linked servers</em>).</p>
<p>La seguente figura rappresenta tale scenario.</p>
<p style="text-align: center;"><a class="aligncenter" title="Authentication and Delegation" href="http://www.maurodalfreddo.it/wp-content/uploads/2008/05/disegnoauthintegrata.jpg" target="_blank"><img class="alignnone size-medium wp-image-64 aligncenter" title="Authenticatione and Delegation" src="http://www.maurodalfreddo.it/wp-content/uploads/2008/05/disegnoauthintegrata-300x145.jpg" alt="Authenticatione and Delegation" width="300" height="145" /></a></p>
<p>Dopo aver effettuato un brevissimo e sintetico excursus sui concetti di base, che verranno dati per scontati nei miei prossimi articoli, comincerò a descriverne l&#8217;implementazione. Nei prossimi articoli descriverò come implementare questa funzionalità in un ambiente distribuito per mezzo del modello di impersonazione e delega.</p>
<p><span id="more-59"></span></p>
<h3>Autenticazione integrata</h3>
<p>Non mi dilungo a descrivere cos&#8217;é l&#8217;autenticazione integrata offerta dalla tecnologia Microsoft Windows, se non per porre l&#8217;enfasi sui principali vantaggi e benefici:</p>
<ul>
<li>per l&#8217;utente è principalmente il single sign-on ovvero la fruizione implicita dei servizi e delle applicazioni dopo l&#8217;unico login (il famoso Ctrl-Alt-Canc) !</li>
<li>per gli amministratori dell&#8217;infrastruttura di un&#8217;organizzazione, e quindi di un dominio o meglio di foreste Active Directory, è la drastica diminuzione del carico di lavoro, potendo gestire gli account degli utenti (che possono facilmente superare la migliaia di unità anche per una media azienda) e le policies in un unico punto.</li>
<li>per l&#8217;organizzazione l&#8217;aumento implicito della sicurezza e dell&#8217;affidabilità</li>
</ul>
<p> </p>
<h3>Autorizzazioni sulle risorse</h3>
<p>Le autorizzazioni sono concesse sulle risorse, che siano esse files e cartelle sul filesystem, share di rete, stampanti, virtual directory e URI (cfr. IIS), appartenenza a ruoli applicativi (cfr. Authorization Manager), mailbox (cfr. Exchange), oggetti di Active Directory,  GPO, ecc.</p>
<p>Le best practices e Microsoft consigliano, ove possibile, di assegnare tali autorizzazioni non direttamente ai singoli utenti, ma ai gruppi (<em>security groups</em>) che li contengono. Con le ultime features di Active Directory è possibile effettuare il nesting dei gruppi in svariati livelli.</p>
<p> </p>
<h3>Web applications e IIS </h3>
<p>Il Web, come piattaforma, è diventato sempre più importante per le aziende, non solo perchè permette di ridurre i tempi e i costi di deployment delle applicazioni, ma anche perché è diventato implicitamente strumento di produttività e collaborazione (cfr. Microsoft Sharepoint) anche tramite i consueti strumenti Office che vi si connettono per pubblicare e condividere documenti.</p>
<p>Nelle organizzazioni che utilizzano i sistemi Microsoft l&#8217;accesso e la fruizione delle risorse dell&#8217;Intranet aziendale (e dell&#8217;Extranet) deve essere il più semplice possibile e può beneficiare con IIS del single sign-on, grazie dell&#8217;autenticazione integrata.</p>
<p>Il beneficio dell&#8217;autenticazione integrata Windows è duplice, cioé gli utenti vengono riconosciuti e autenticati automaticamente:</p>
<ul>
<li>in modo trasparente per gli utenti, senza che debbano inserire alcuna credenziale</li>
<li>e senza sforzo da parte degli sviluppatori e amministratori che non devono implementare e manutenere alcun archivio degli utenti, essendo questo integrato in Active Directory</li>
</ul>
<p><strong>L&#8217;autenticazione di IIS</strong></p>
<p>IIS può autenticare quindi gli utenti di dominio in modo trasparente tramite l&#8217;integrazione con Active Directory; i prerequisiti sono i seguenti:</p>
<ol>
<li>Browser IE recente (5.5 o superiore), se è abilitata tra le opzioni avanzate &#8220;Abilita autenticazione windows integrata&#8221; e se il dominio relativo all&#8217;URL viene censito tra i siti dell&#8217; &#8220;Intranet locale&#8221;</li>
<li>sul server IIS, il site (o la virtual directory) deve essere impostato nelle opzioni di sicurezza per accettare solo l&#8217;autenticazione integrata</li>
</ol>
<p><span style="color: #339966;">N.B. in un ambiente <em>Corporate</em> il primo punto può essere ottenuto con estrema facilità con le <em>Group Policies</em> o con gli script di Logon.</span></p>
<p> <strong>Impersonificazione</strong></p>
<p> Generalmente il codice legato ad una pagina web, e quindi l&#8217;accesso alle risorse, viene eseguito nel contesto di sicurezza di IIS (di default IUSR_servername) o dell&#8217;<em>Application Pool</em> (solitamente NETWORK SERVICE o LOCAL SYSTEM), a seconda che si tratti di una pagina html/.asp o di una pagina aspx/.NET.</p>
<p>In qualche caso è utile che il codice venga eseguito nel contesto di sicurezza dell&#8217;utente chiamante, ovvero che il servizio/pool impersonifichi il chiamate (<em>impersonate</em>).</p>
<p><span style="color: #339966;">Per esempio se utilizzassimo l&#8217;impersonazione:</span></p>
<ul>
<li><span style="color: #339966;">l&#8217;accesso ai documenti del filesystem, verrebbe così regolato dalle DACL impostate sul filesystem; non avremmo bisogno di costruirci le strutture dati per replicare tale funzionalità</span></li>
<li><span style="color: #339966;">similmente verrebbe regolato l&#8217;accesso alle risorse e agli oggetti di rete</span></li>
<li><span style="color: #339966;">anche l&#8217;utilizzo di oggetti COM/DCOM potrebbe essere regolato dalle autorizzazioni già applicate per quell&#8217;utente o ai gruppi ai queli l&#8217;utente stesso appartiene</span></li>
</ul>
<p> Per abilitare l&#8217;impersonazione in un&#8217;applicazione .NET, basta impostare la seguente configurazione nel web.config:</p>
<pre>    &lt;system.web&gt;
        &lt;authentication mode="Windows" /&gt;
        &lt;identity impersonate="true"/&gt;
    &lt;/system.web&gt;</pre>
<p> </p>
<h3> Accesso al database SQL Server</h3>
<p>Un&#8217;applicazione web può accedere in due modi ad un database, tramite autenticazione SQL (<em>standard security</em>) oppure tramite autenticazione integrata (<em>trusted connection</em>). In particolare quindi, se si utilizza una SqlConnection .NET, le stringhe di connessione (<em>connection strings</em>) possono essere rispettivamente:</p>
<p><span style="color: #339966;">Data Source=myServer;Initial Catalog=dbName;User Id=username;Password=password;</span></p>
<p><span style="color: #339966;">Data Source=myServer;Initial Catalog=dbName;Integrated Security=SSPI;</span></p>
<p>nel primo caso la connessione avverrà tramite la login specificata, nel secondo con le credenziali dell&#8217;utente autenticato da IIS.</p>
<p> </p>
<h3>Due modelli di sicurezza a confronto</h3>
<p>Bisogna fare alcune considerazioni nell&#8217;utilizzo dei due modelli,<br />
ovvero il modello che utilizza un&#8217;utenza o login fissa per connettersi al database (<em>trusted subsystem</em>) e quello che utilizza l&#8217;impersonificazione ed una trusted connection (<em>impersontation/delegation</em>);<br />
entrambi i modelli hanno vantaggi e svantaggi.</p>
<p>I vantaggi del <strong>trusted subsystem</strong>, cioè quello in cui il database si fida della login utilizzata dall&#8217;applicazione indipendentemente dall&#8217;utente originale, sono:</p>
<ul>
<li>scalabilità. il connection pool è molto efficiente, poichè il contesto di sicurezza rimane sempre lo stesso</li>
<li>gestione minima delle ACL, che sono configurate solo per una singola identità.</li>
<li>l&#8217;utente non ha accesso diretto ai dati</li>
</ul>
<p>e gli svantaggi:</p>
<ul>
<li>l&#8217;auditing è difficile, non potendo distinguere l&#8217;utente chiamante effettivo</li>
<li>rischio elevato se l&#8217;application server viene compromesso, poichè ad esso viene garantito elevato accesso alle risorse.</li>
</ul>
<p>Invece i vantaggi del <strong>modello ad impersonazione/delega</strong> sono:</p>
<ul>
<li>Auditing semplice tramite le features offerte dal sistema operativo</li>
<li>Auditing a livello di tutti gli strati dell&#8217;applicazione</li>
<li>Accesso granulare, impostabile anche fino a livello utente</li>
</ul>
<p>Gli svantaggi sono:</p>
<ul>
<li>Il connection pool non è utilizzato efficientemente, poichè ogni connessione ha il suo specifico contesto</li>
<li>Il carico amministrativo è superiore, dovendo eventualmente essere gestite le ACL per utente.</li>
</ul>
<p>Nel modello ad impersonazione, è come se l&#8217;utente facesse una connessione al database, e quindi venisse riconosciuto dallo stesso. Le funzioni o le stored procedures potrebbero restituire risultati diversi a seconda dell&#8217;utente che le sta eseguendo; e le viste potrebbero restituire dati diversi (partizionati orrizontalmente) sempre in funzione dell&#8217;utente.</p>
<p><span style="color: #008000;">Un esempio pratico banale: se nella tabella MOVIMENTI ci fossero le movimentazioni in denaro in funzione dell&#8217;utente, allora la vista potrebbe ritornare solo le movimentazioni dell&#8217;utente collegato</span></p>
<p><span style="color: #008000;">CREATE VIEW v_movimenti AS SELECT * FROM movimenti WHERE utente = system_user;</span></p>
<p><span style="color: #008000;">e questo ci eviterebbe la noia di creare più viste&#8230;</span></p>
<p> </p>
<h3>Motivazioni per veicolare il contesto utente</h3>
<p>Anche da ciò che è stato prima esposto, si può capire come le più comuni ragioni per portare il contesto dell&#8217;utente chiamante fino al database siano:</p>
<ul>
<li>Necessità di effettuare l&#8217;auditing a livello di utenza, in contrapposizione all&#8217;auditing a livello applicativo.</li>
<li>Necessità di avere un accesso granulare al database e specifiche restrizioni sui suoi oggetti: specifici utenti possono leggere o eseguire alcuni oggetti, mentre altri possono scrivere su altri.</li>
<li>Necessità di filtrare i risultati a livello database in funzione dell&#8217;utente connesso, utilizzando anche il codice in view, funzioni e stored procedures</li>
<li>Maggior sicurezza in caso di application server compromessi</li>
<li>L&#8217;accesso al database è effettuato da diversi canali ( applicazioni web, applicazioni client/server, connessioni dirette tramite client sql, ecc.) per i quali devono essere garantite le autorizzazioni e la visibilità in funzione dell&#8217;utente connesso.</li>
</ul>
<p>Da tenere in considerazione gli aspetti legati alla minor scalabilità e il carico derivante dal fatto di applicare i permessi direttamente sulle utenze, e non sui ruoli.</p>
<p> </p>
<h3> Conclusioni</h3>
<p>Riassumendo, le condizioni per poter veicolare il contesto di sicurezza del chiamante fino al database, sono le seguenti:</p>
<ol>
<li>il browser deve essere Interne Explorer e deve essere abilitata l&#8217;Autenticazione Integrata Windows</li>
<li>il sito chiamato deve trovarsi tra i siti dell&#8217;Intranet</li>
<li>l&#8217;applicazione ospitata dall&#8217;IIS deve aver abilitata solo l&#8217;Autenticazione Integrata</li>
<li>nel caso di applicazioni .NET, l&#8217;applicazione deve Impersonare l&#8217;utente</li>
<li>la connessione al database SQL Server deve essere <em>trusted</em></li>
<li>ovviamente l&#8217;utente deve essere abilitato a connettersi allo specifico database</li>
</ol>
<p>Le precedenti condizioni <strong>sono solo necessarie</strong>, nel senso che non bastano in tutti gli scenari; diventano anche sufficienti quando il sistema viene interamente implementato su un <strong>singolo server</strong>, ovvero l&#8217;IIS e il SQL Server risiedono sulla stesso server oppure quando l&#8217;IIS ha abilitata la <strong>basic authentication</strong> (punto 3; ovviamente si perde la feature del single sign-on).</p>
<p>Se viceversa si volesse implementare questa feature in un sistema distribuito, allora bisognerebbe modificare leggermente il modello affinché l&#8217;IIS possa impersonare l&#8217;utente anche al di fuori della stessa macchina (<em>impersonate &amp; delegate</em>)</p>
<p>L&#8217;argomento segue nell&#8217;articolo <a href="http://www.maurodalfreddo.it/archives/112/impersonate-delegate" target="_self"><strong>Impersonate &amp; delegate</strong></a> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maurodalfreddo.it/archives/59/motivi-per-veicolare-il-contesto-utente-fino-al-database/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
