2010-01-21 8 views
13

Chcę używać uwierzytelniania HTTP Digest Authentication z centralną bazą danych, która przechowuje nazwy użytkowników i zaszyfrowane hasła. Dane te powinny być używane przez różne serwery, na przykład serwer Apache httpd lub Tomcat. Klientami będą ludzie z przeglądarkami i innymi aplikacjami komunikującymi się w sposób RESTOWNOWY.HTTP Digest Authentication

O ile rozumiem, nie mogłem użyć tabeli z hasłami haseł. Możliwe jest tylko przechowywanie HA1 = MD5(username:realm:password), gdzie wymagane jest hasło tekstowe - poprawne?

Z drugiej strony wydaje się być możliwe do wykorzystania mieszany haseł z Apache httpd:

Apache httpd doc mówi:

Pierwsza wartość kolumny pierwszej rzędu zwrócony przez instrukcję zapytania powinien być ciągiem zawierającym zaszyfrowane hasło .

Czy działa z uwierzytelnianiem digest? Nie ma parametru określającego algorytm skrótu. W jaki sposób serwer httpd Apache decyduje, którego algorytmu użyć?

RFC 2617 mówi:

4,13 przechowywania haseł

uwierzytelniania Digest wymaga agent uwierzytelniający (zwykle serwer) przechowywać pewne dane pochodzące z nazwy użytkownika i hasła w „hasło plik "powiązany z daną domeną. Zwykle może to być zawiera pary składające się z nazwy użytkownika i H (A1), gdzie H (A1) jest strawioną wartością nazwy użytkownika, dziedziny, i hasłem, jak opisano powyżej.

Wygląda na to, że hasło musi być czystym tekstem.

Servlet 3.0 Spec mówi:

Chociaż hasła nie są wysyłane na drucie , HTTP Digest uwierzytelniania wymaga jasnych Hasło Text ekwiwalenty być dostepne do uwierzytelniający pojemnika tak, że może potwierdzić otrzymali uwierzytelnienia , obliczając oczekiwany skrót.

Co to jest "równoważny odpowiednik hasła tekstowego" tutaj? Skrót hasła?

Tomcat documentation mówi:

przypadku korzystania strawionych haseł z uwierzytelniania szyfrowanego, w postaci zwykłego tekstu użyte do wygenerowania szyfrowane jest inaczej. W powyższych przykładach {tekst jawny-hasło} należy zastąpić z {nazwa użytkownika}: {dziedzina}: {tekst jawny-hasło}. Na przykład w środowisku rozwojowym może to mieć postać testUser: localhost: 8080: testPassword.

Tu jest wymagane jasne hasło tekstowe.

Czy można używać uwierzytelniania HTTP Digest z już zaszyfrowanymi hasłami lub czy hasła mają być czystym tekstem?

Czy użytkownik musi ponownie wprowadzić swoje poświadczenia, jeśli zażąda strony z innej subdomeny?

Czy przeglądarka kasuje hasło z pamięci podręcznej, gdy karta jest zamknięta lub tylko gdy całość jest zamknięta? Może to różni się od przeglądarki do przeglądarki - chciałbym wiedzieć, która przeglądarka ją usuwa i która ją zachowuje.

Ogólne pytanie dotyczy tego, czy uwierzytelnianie digest jest odpowiednie dla mojego scenariusza z db użytkownika centralnego z już zaszyfrowanymi hasłami. A może lepiej skorzystać z usługi pojedynczego logowania opartej na sesji?

Odpowiedz

6

W tym scenariuszu, w którym baza danych zawiera już haszowane hasła, nie można używać uwierzytelniania szyfrowania, o ile nie zostały one zahartowane przy użyciu tej samej funkcji.

Myślę, że najlepszym rozwiązaniem dla Ciebie jest stworzenie strony logowania i używanie sesji cookie do kontrolowania uprawnień użytkowników. Dzięki takiemu rozwiązaniu można uzyskać odpowiedzi na inne pytania:

  • cookie może być ustawiona na stosowanie między subdomen: http://en.wikipedia.org/wiki/HTTP_cookie#Cookie_attributes
  • Sesja będzie ważna do użytkowników zamknąć przeglądarkę, limit czasu upłynął lub użytkownicy klikają przycisk wylogowania. Nigdy nie zapomnij zaoferować tej opcji swoim użytkownikom !!!
+0

używam również md5 hash hasła na mojej bazy danych, możliwe jest użycie uwierzytelniania strawić? – vrunoa

0

myślę, że można hash hasła wprowadzane użytkownik po raz pierwszy z tej samej funkcji używany do przechowywania haseł w bazie danych, a następnie przekazać go jako hasło strawienia i reszta procedury będą takie same.

i trzeba będzie przekazać nazwę użytkownika i hasło w adresie URL HTTP zamiast normalnej postaci http://www.rojotek.com/blog/2008/05/19/http-authentication-in-a-url/