6

Pozwól mi wyjaśnić: aplikacja używa już zintegrowanych zabezpieczeń systemu Windows, a nie formularzy. Co staram się osiągnąć to tak zwany „step-up” uwierzytelnianie, lub „siła ponownego uwierzytelniania” dla następującego scenariusza:Jak ponownie uwierzytelnić użytkownika w aplikacji ASP.Net MVC 3 _Intranet_?

  1. użytkownik przegląda witrynę robi wspólną, trywialne rzeczy
  2. nagle użytkownik musi wykonać wrażliwe działanie, takie jak autoryzacja alokacji zasobów źródłowych lub potwierdzenie kredytu samochodowego lub coś podobnego. Użytkownik jest monitowany o dane uwierzytelniające przed (s) przekierowaniem na na wrażliwej stronie, w sposób podobny do programu SharePoint "Zaloguj się jako inny użytkownik"
  3. i tylko wtedy, gdy wprowadzone poświadczenia są takie same, jak dla aktualnie zalogowanego użytkownika, aplikacja przechodzi do obszaru poufnego.

To uniemożliwiłoby 2 następujących kwestii:

  1. Użytkownik idzie na spotkanie lub kawę i zapomni zablokować roboczą i kolega używa sesję dostęp do wrażliwych Powierzchnia
  2. Użytkownik wprowadza poświadczenia swojego szefa (ponieważ, powiedzmy, powiedzmy, że zajrzał do sholderu szefa), aby uzyskać dostęp do wrażliwego obszaru.

wiem, niektórzy będą patrzeć na to jako „paranoję”, ale także niektórzy mówią, że to zdrowy rozsądek i powinny być budowane w ramach gdzieś (jQuery lub .NET)

będę naprawdę wdzięczny dowolne wejście. Dziękuję Ci!

+1

Nie sądzę, aby istniało coś takiego jak "bycie paranoikiem" w przypadku wrażliwych informacji. Czy próbowałeś już skonfigurować katalog wirtualny swojej witryny? –

+0

Jest to jeden z powodów, dla których prawie nigdy nie korzystam z uwierzytelniania zintegrowanego - przekazuje on bezpieczeństwo na bezpieczeństwo stacji roboczej, nad którym nie mam kontroli. – tvanfosson

Odpowiedz

4

Formularz należy przesłać poświadczenia wraz z żądaniem wykonania czynności, tj. Niektóre działania wymagają podania nazwy użytkownika/hasła. Użyj metody PrincipalContext ValidateCredentials, aby upewnić się, że wprowadzono prawidłowe poświadczenia i sprawdź, czy podana nazwa użytkownika jest zgodna z bieżącą nazwą użytkownika w obiekcie User.Identity.

public ActionResult SensitiveAction(SensitiveModel model, string username, string password) 
{ 
    using (var context = new PrincipalContext(ContextType.Domain)) 
    { 
     if (!string.Equals(this.User.Identity.Name,username,StringComparison.OrdinalIgnoreCase) 
      || !context.ValidateCredentials(username,password)) 
     { 
       return View("PermissionDenied"); 
     } 
    } 

    ... 
} 
+1

dziękuję za szybką odpowiedź!ale będzie to oznaczać utworzenie nowego widoku, aby ręcznie uzyskać poświadczenia przez HTTPS. Czy istnieje sposób, aby użyć zachęty do poświadczeń wbudowanych, tak jak to robi SharePoint? Chyba robi to, próbując uzyskać dostęp do chronionego pliku, '_layouts/AccessDenied.aspx'. – PricklyMaster

2

Użytkownik idzie na spotkanie lub kawę i zapomni zablokować stację roboczą i kolega używa sesję dostęp do obszaru wrażliwego To działa tylko za pierwszym razem, ale teraz szef wchodzi wrażliwy obszar, ponownie wpisuje swoje dane uwierzytelniające, a następnie idzie na kawę. Czy zamierzasz poprosić o podanie każdej wrażliwej prośby? Użytkownicy nie będą tego znosić.

Użytkownik wprowadza poświadczenia swojego szefa (ponieważ, powiedzmy, zaglądał do sholdera szefa), aby uzyskać dostęp do wrażliwego obszaru. Jeśli ktoś zna i wpisuje referencje swojego szefa, nic nie możesz zrobić, aby to wykryć.