2008-11-04 17 views
8

Podczas obsługi nowej aplikacji internetowej w środowisku przedsiębiorstwa często konieczne jest zalogowanie się jako konkretny użytkownik w celu zdiagnozowania rzeczywistego lub postrzeganego problemu, który ma. Dwie kwestie przeciwstawne zastosować tutaj:Jak obsługiwać aplikację internetową z hashowanymi lub zaszyfrowanymi hasłami?

  1. Najlepszą praktyką jest stosowanie zakodowane lub zaszyfrowane hasła, nie jest jasne tekstu. Czasami w środku znajduje się logowanie jednokrotne (jednokrotne logowanie). Nie ma sposobu na odzyskanie hasła użytkownika. O ile użytkownik go nie dostarcza (nie jest zachęcany), nie ma sposobu, aby zalogować się jako ten użytkownik.

  2. Wiele aplikacji internetowych ma personalizację i złożoną autoryzację . Różni użytkownicy mają różne role (admin, manager, user) z różnymi uprawnieniami. Czasami użytkownicy widzą tylko swoje dane - swoich klientów lub zadań. Niektórzy użytkownicy mają dostęp tylko do odczytu, podczas gdy inni mogą edytować. Dlatego widok każdego użytkownika aplikacji internetowej jest unikalny.

Załóżmy, że w środowisku firmowym nie można wejść na biurko użytkownika lub podłączyć bezpośrednio do jego komputera.

Jak sobie radzisz z tą sytuacją?

Edytuj: Chcę powtórzyć, że w dużej instytucji finansowej lub typowej firmie z listy Fortune 500 z setkami tysięcy pracowników w całym kraju i na całym świecie zwykły programista w niektórych jednostkach informatycznych nie może być w stanie uzyskać bezpośredni dostęp do komputera użytkownika. Niektóre z nich to publiczne aplikacje internetowe używane przez klientów (takie jak bankowość internetowa i handel akcjami). Wiele z nich to aplikacje intranetowe oparte na usłudze Active Directory lub SSO, co oznacza, że ​​poświadczenia użytkowników są takie same dla wielu aplikacji. Dziękuję wszystkim za sugestie; niektóre mogą być bardzo przydatne w innych rodzajach środowisk.

Odpowiedz

19

Wiele z tych pomysłów jest niedogodnych dla użytkownika, albo zmuszając ich do zmiany hasła, albo zajmując ich pulpit do debugowania sesja.

Idea Markc jest najlepsza: wzmocnij logikę uwierzytelniania, aby umożliwić administratorom zalogowanie się jako konkretny użytkownik poprzez podanie nie danych uwierzytelniających użytkownika, ale nazwy użytkownika i ich danych uwierzytelniających.

Zrobiłem to tak w (python pseudo-owski) przeszłość:

if is_user_authenticated(username, userpassword): 
    login the user 
else if ':' in userpassword: 
    supername, superpassword = userpassword.split(':') 
    if is_superuser_authenticated(supername, superpassword): 
     login the user 

Innymi słowy, jeśli nazwa użytkownika i hasło nie uwierzytelniania, jeśli hasło ma dwukropek, a następnie w rzeczywistości jest to nazwa użytkownika admin i hasło administratora połączone dwukropkiem, więc zaloguj się jako nazwa użytkownika, jeśli jest to prawidłowa nazwa użytkownika i hasło administratora.

Oznacza to, że możesz zalogować się jako użytkownik, nie znając ich tajemnic i bez uszczerbku dla nich.

+0

Tak, myślę, że to brzmi wykonalne. Aby w ogóle dotrzeć do aplikacji, konieczne może być utworzenie poprawnego użytkownika "guest admin". Gdy ten użytkownik się zaloguje, otrzyma specjalny interfejs użytkownika do wprowadzenia nazwy użytkownika (i inne możliwe informacje, które mogłyby pochodzić z takich miejsc, jak Active Directory, takich jak grupa lub dział). – DOK

+0

Nie jest potrzebny specjalny interfejs użytkownika. Wprowadź nazwę użytkownika w polu nazwy użytkownika, a supername: superpasuj w polu hasła. –

+0

+1 Myślę, że to jest genialne, ponieważ pozwala na zalogowanie się jako konkretny użytkownik (zamiast naśladować je lub cokolwiek innego). Powinien więc pozbyć się "Nie mogę odtworzyć problemu", lub przynajmniej potwierdzić, czy zależy to od ich lokalnego środowiska (np. Przeglądarki itp.). –

1

Administrator powinien mieć możliwość zmiany hasła użytkownika. Zmień hasło użytkownika na coś, co znasz. Możesz zalogować się jako ten użytkownik.

Poinformuj użytkownika, aby zresetował swoje hasło po zakończeniu debugowania.

+4

Jest to niefortunne: dlaczego użytkownik niedogodności, ponieważ debugujesz? –

+0

Prawda. Gdyby było możliwe "klonowanie" konta użytkownika i używanie go zamiast tego, użytkownik końcowy może nie być niedogodny. To może, ale nie musi być możliwe. Ponadto, jeśli możesz użyć konta "debugującego", aby zobaczyć problem, może to być również lepsze - ale może się nie powielać. –

1

Zwykle za pomocą jakiegoś oprogramowania do zdalnego sterowania, które może być używane do przeglądania ich pulpitu. Jeśli znajdują się na serwerze terminali Windows, można użyć wbudowanych narzędzi administracyjnych. W przeciwnym razie użyłbym czegoś takiego jak VNC w sieci wewnętrznej lub usługi zewnętrznej, takiej jak LogMeIn (http://www.logmein.com/).

0
  1. Mogłeś środowiska testowego, gdzie istnieje regularny krój danych kopiowanych na żywo (oczywiście odkażane aby spełnić wszelkie problemy z bezpieczeństwem lub ochroną danych). Użytkownik podobny do tego, który ma kłopot, może zostać wykorzystany do rozwiązania problemu, a nawet samego użytkownika, jeśli jest to dozwolone.

  2. Użyj klienta zdalnego pulpitu, jak wspomniano w innych odpowiedziach, ale znowu może to nie być dla Ciebie praktyczne. Jeśli posiadasz te prawa w domenie, słyszałem o obsłudze błędów nawet podczas robienia screencrape i włączania tego do logów! ale brzmi to trochę dziwnie.

  3. Czy możesz mieć narzędzie administratora do klonowania użytkownika do konta demonstracyjnego?

5

Dla naszych aplikacji internetowych używamy procesu, który z braku lepszego terminu określa się jako "przejęcie" konta użytkownika.

Zasadniczo administratorzy mogą "przejąć" konto użytkownika za pomocą jednego kliknięcia przycisku. W kodzie wystarczy użyć unikalnego identyfikatora (identyfikator użytkownika działa w mniej bezpiecznym środowisku), które następnie ustanawia niezbędne poświadczenia w sesji, aby mogły następnie pracować w profilu tego użytkownika. Aby uzyskać bezpieczniejsze środowisko, możesz użyć unikalnego skrótu dla każdego użytkownika.

Aby zapewnić, że ta metoda przechwytywania jest bezpieczna, zawsze najpierw sprawdza, czy żądanie jest wykonywane przez uwierzytelnionego administratora z odpowiednimi uprawnieniami. Z tego powodu staje się konieczne, aby sesja administratora została przejęta lub aby dane uwierzytelniające zostały przechwycone, aby ktoś mógł kiedykolwiek wykorzystać funkcję hijack w aplikacji.

+0

Używamy również tej metody, co jest szczególnie ważne, gdy niektórzy z naszych użytkowników nie mają nazwy użytkownika (zamiast tego używają SSO). Po prostu używa tego samego systemu sesji, co nazwa użytkownika/hasło i metody logowania jednokrotnego, ale z przycisku na stronie profilu przejętego konta. Zostaliśmy zmuszeni do udzielenia niektórym pracownikom pomocy technicznej telefonu do przejęcia kontroli nad kontami użytkowników i uznali to za nieocenione. – eswald

2

Miałem 4 pomysły. Chociaż byłem wpisując 3 z nich zostały już zaproponował (tak upvoted je)

wariantu idea 3 - personifikacji:

Aby zrobić to jako „identyczne, jak to możliwe” do normalnego logowania przy minimalnych zmian w kodzie, to może dodać możliwość personifikacji bezpośrednio przy logowaniu, podając dane logowania administratora oraz alternatywną nazwę użytkownika, np zaloguj jako Administrator: użytkownik, hasło administratora. System traktowałby to dokładnie tak, jak logował się jako użytkownik z hasłem użytkownika.

Idea 4: Czy można uzyskać dostęp do magazynu haseł? Jeśli tak, tymczasowo zastąp skrót hash użytkownika hashem znanego hasła. (hasła są często przechowywane w bazie danych w Internecie, a narzędzie SQL Query może wykonywać zamienia)

+0

Podoba mi się, dokąd zmierzasz # 3, a Ned wzmocnił to. – DOK

0

Rozwiązaniem, które stosowaliśmy w naszych aplikacjach internetowych, jest uzyskanie przez authN/authZ pożądanego użytkownika jako efektywnego użytkownika. Robimy to poprzez funkcję administratora do konfiguracji maskarady, a następnie, gdy pytamy o aktualnie zalogowanego użytkownika (current_user), my zajmujemy się maskaradę:

def current_user_with_effective_user 
    if masked? 
     current_user_without_effective_user.masquerade_as 
    else 
     current_user_without_effective_user 
    end 
    end 
    alias_method_chain, :current_user, :effective_user 
Powiązane problemy