Mamy aplikację intranetową ASP.NET MVC 4. Używamy uwierzytelniania systemu Windows i ten aspekt działa dobrze. Używane są poświadczenia użytkownika, a my uzyskujemy dostęp do tych danych uwierzytelniających z aplikacji internetowej.Hybrydowe uwierzytelnianie Windows i uwierzytelnianie formularzy w ASP.NET MVC 4
Tym, czego naprawdę chcemy, jest jednak tryb hybrydowy. Chcemy uzyskać dane uwierzytelniające użytkownika z przeglądarki, ale chcemy również sprawdzić, czy użytkownik znajduje się w naszej bazie danych aplikacji. Jeśli użytkownik jest w bazie danych, może po prostu kontynuować. Jeśli nie, chcemy przekierować je na stronę z prośbą o podanie alternatywnych danych uwierzytelniających. Co teraz robię, to w Global.asax.cs
, mam metodę Application_AuthenticateRequest
i sprawdzam, czy użytkownik jest uwierzytelniony. Jeśli są, a ich pliki cookie nie odzwierciedlają faktu, że są zalogowane do systemu, to loguję je i konfiguruję pliki cookie z informacjami o użytkowniku. Jeśli nie zostaną uwierzytelnione, przekierowuję je na stronę logowania. Nie możemy używać ról AD z powodów związanych z polityką firmy, więc musimy użyć bazy danych do dodatkowego uwierzytelnienia.
Zgaduję, że Application_AuthenticateRequest
nie jest odpowiednim miejscem, ale może tak jest. Ale w zasadzie potrzebujemy miejsca do filtrowania żądań uwierzytelnienia. Ale dodatkowo ta implementacja prowadzi mnie do innego problemu:
Mamy pewne adresy URL w naszej aplikacji, które umożliwiają anonimowy dostęp. Dodałem tagi <location>
do pliku web.config. Problem polega na tym, że w przypadku anonimowych połączeń do nich, dostaje się do Application_AuthenticateRequest
i próbuje zalogować użytkownika do DB. Teraz mogę dodać kod do Application_AuthenticateRequest
, aby obsłużyć te adresy URL i to jest obecnie mój plan, ale jeśli mam pisać i Application_AuthenticateRequest
nie jest to miejsce do robienia tego, wtedy wolałbym to rozgryźć teraz niż później.
Lubię to rozwiązanie, ale ja wciąż dostać 401 błędów na metody kontrolerów, które powinny umożliwić każdemu. W tym konkretnym przypadku wywołuję go z wywołania C# 'HttpWebRequest.GetResponse()'. 'DebugController.FlushCaches()' ma [AllowAnonymous] iw 'web.config' mam' '' tag dla 'Debug/FlushCaches', który ma' '. Ale kiedy mój 'HttpWebRequest' wzywa go, otrzymuję 401. –
Pete
użyć tego jako tagu: ' authorization> ' –
ataravati
http://stackoverflow.com/questions/15087755/use-anonymous-authentication-in-mvc4-on-single-controller-when-the-whole-applica – ataravati