ho un'app intranet asp.net sito mvc. c'è comunque per catturare il login di windows nt da parte dell'utente senza avere un sistema di login completo nel sito. non desidero l'autorizzazione ma vorrei fare qualche registrazione sul server per tenere traccia delle richieste, ecc. .acquisizione nome utente windows in asp.net richiesta mvc
risposta
È possibile utilizzare HttpContext.Current.User.Identity.Name
se si imposta il sito per utilizzare Windows Authentication. Molti browser passano il nome utente in modo trasparente.
Se si imposta IIS per utilizzare l'autenticazione di Windows e il sito si trova nella zona Intranet per i propri client, gli accessi si verificheranno automaticamente senza alcuna richiesta.
Quale versione di Windows è in esecuzione questa app mvc?
si potrebbe provare la seguente:
- utilizzare Gestione IIS per disabilitare l'accesso anonimo al sito, e assicurarsi che digest e/o l'autenticazione di Windows è abilitata.
- Modificare il web.config dell'app mvc per utilizzare l'autenticazione di Windows
- Accedere al nome di accesso nel controller utilizzando User.Identity.Name.
Ciò farebbe?
Vai al file web.config dell'applicazione (essere sicuro che sia quella principale, non il web.config sotto Viste), osservazione fuori <authentication mode="Forms">
se si vede, quindi aggiungere linee come questa:
<authentication mode="Windows"/>
<identity impersonate="true"/>
<authorization>
<allow roles="DOMAIN\PersonnelGroup" />
<allow users="DOMAIN\jdoe"/>
<deny users="*"/>
</authorization>
Non è necessario includere la sezione <authorization>
ma è utile se si desidera consentire l'accesso per determinati gruppi e utenti e negare a tutti gli altri. Quando si utilizza IE, le credenziali vengono inoltrate automaticamente. È possibile verificare questo stampando il nome utente nella vista:
@HttpContext.Current.User.Identity.Name
Se si apre il sito utilizzando Firefox o qualsiasi altro browser oltre IE, vi verrà chiesto il nome utente e la password, perché non sta passando automaticamente lungo le credenziali (Anche se a quanto pare è possibile ottenere che Firefox trasmetta le credenziali, come menzionato da Dan Diplo sopra).
Se si desidera passare queste credenziali insieme a un altro server, come ad esempio uno SQLServer, diventa più di un mal di testa dalla mia esperienza, perché si esegue in un problema di doppio hop. L'unica soluzione che conosco è di ospitare IIS e SqlServer sullo stesso server, o di avere un accesso per la tua intranet in modo da avere il nome utente e la password da passare insieme a SQLServer.
var s = HttpContext.User.Identity.Name;
sembra con firefox, richiede un nome utente/pwd anche se IE sembra non averlo richiesto. . Qualche idea sul perché questo è felice? – leora
Dan Diplo - qualche idea? – leora
FireFox, per impostazione predefinita, non trasmette il nome utente. Tuttavia, può essere fatto funzionare - vedi http://markmonica.com/2007/11/20/firefox-and-integrated-windows-authentication/ –