Hybryda uwierzytelniania Windows i uwierzytelniania formularzy w ASP.NET MVC 4
Mamy aplikację intranetową ASP.NET MVC 4. Używamy uwierzytelniania systemu Windows i ten aspekt działa dobrze. Poświadczenia użytkownika są używane i możemy uzyskać dostęp do tych danych z aplikacji internetowej.
Tym, czego naprawdę chcemy, jest jakiś tryb hybrydowy. Chcemy uzyskać poświadczenia użytkownika z przeglądarki, ale chcemy również sprawdzić, czy użytkownik znajduje się w bazie danych naszej aplikacji. Jeśli użytkownik znajduje się w bazie danych, może po prostu kontynuować. Jeśli nie, chcemy przekierować je na stronę z prośbą o alternatywne poświadczenia. Co teraz robię, toGlobal.asax.cs
, MamApplication_AuthenticateRequest
i sprawdzam, czy użytkownik jest uwierzytelniony. Jeśli tak, a informacje o ich plikach cookie nie odzwierciedlają faktu, że są zalogowani do systemu, loguję się i konfiguruję pliki cookie z informacjami o użytkowniku. Jeśli nie są uwierzytelnione, przekierowuję je na stronę logowania. Nie możemy korzystać z ról AD z powodów związanych z polityką firmy, dlatego musimy użyć bazy danych do dodatkowego uwierzytelnienia.
ZgadujęApplication_AuthenticateRequest
nie jest to miejsce, aby to zrobić, ale może tak jest. Ale zasadniczo potrzebujemy miejsca do filtrowania żądań uwierzytelnienia. Ale dodatkowo ta implementacja prowadzi mnie do innego problemu:
W naszej aplikacji mamy pewne adresy URL, które umożliwiają anonimowy dostęp. Dodałem<location>
znaczniki do web.config dla tych. Problem polega na tym, że w przypadku anonimowych połączeń dochodzi do tegoApplication_AuthenticateRequest
i próbuje zalogować użytkownika do bazy danych. Teraz mogę dodać kod doApplication_AuthenticateRequest
do obsługi tych adresów URL i to jest obecnie mój plan, ale jeśli piszę iApplication_AuthenticateRequest
czy nie jest to miejsce, w którym to robię, to wolałbym to teraz rozgryźć niż później.