Windows Autentication: loggarsi con con un utente differente

Recentemente ho avuto la necessità di forzare il cambio utente in un’applicazione asp.net che utilizza Windows Autentication come sistema di autenticazione.

Sharepoint: Accedi come utente diversoL’idea è stata presa dai siti di Micorsoft Office Sharpoint 2007 (MOSS): di default l’accesso viene effettuato con l’utente corrente di dominio; al bisogno è presente un link nel menù per cambiare l’utente connesso; viene presentato quindi il popup standard per l’immissione delle credenziali, dopo la nuova autenticazione l’utente viene ripresentata la pagina corrente…

I requirement erano simili, ovvero l’utente Windows connesso all’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’autenticazione implicita (single sign-on). 

I vantaggi del cambiamento di profilo sono palesi: l’utente non deve scollegarsi e riconnettersi a Windows, chiudendo tutte le applicazioni, oppure eseguire Internet Explorer con l’opzione “Run as”; deve solo cliccare un link…

Il trucco sta nello spedire al browser uno status code 401 “Access denied”, per cui il browser richiede all’utente ulteriori credenziali e richiama la pagina nuovamente.

Nella pagina desiderata, o nella master page, inserire il link alla pagina del cambio utente:

<a href="AccessDenied.aspx?loginasanotheruser=true">Cambio profilo</a>

In AccessDenied.aspx  
 

<%@ Page Language="C#" autoeventwireup="true"%>
<%
if (Session.IsNewSession)  Response.Redirect("default.aspx", true);
Session.Abandon();
Response.StatusCode = 401;
Response.StatusDescription = "Access Denied";
%>

Questa pagina controlla se la sessione è appena stata creata, e nel qual caso reinvia l’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).

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’altra storia…

Questa voce è stata pubblicata in Active Directory, Software, Web, Windows Autentication e contrassegnata con , . Contrassegna il permalink.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


*