2013-06-20 29 views
13

Bardzo trudno było odzyskać hasło, ponieważ nigdy wcześniej tego nie robiłem.Przewodnik dotyczący wdrażania odzyskiwania hasła zabezpieczeń sprężynowych za pomocą dynamicznego adresu URL wysłanego na adres e-mail

tej pory mam aplikację, która ma:

Wiosna Security, gdzie hasło jest odpowiednio zakodowane i role użytkowników wdrożony i działa poprawnie.

Strategia wskazówki badań z stackoverflow: przycisk

  1. hity konta Przypomnienie-password, gdzie wprowadza swój adres e-mail.
  2. Dynamic Link jest wysyłana na adres e-mail
  3. otwiera Użytkownik ogniwem adres email
  4. które przekierowuje go do resetowania hasła stronie

Co nie jest znana:

  • Jak dać odnośnik dynamiczny charakter - metody generacji
  • Link ma limit czasu - niektóre pytania zostały znalezione tutaj, ale często dotyczą niestandardowego programu obsługi lub rozszerzenia do wiosny funkcja przydatności
  • Metody odwzorowania żądań w odpowiedzi na taki dynamiczny link
  • Tymczasowe metody przechowywania linków - baza danych, sesja itp.?

Jak widać, lista jest dość poważna w przypadku pojedynczego pytania. Miałem więc nadzieję, że będziesz w stanie dostarczyć przewodnikowi zasoby, jak to zrobić krok po kroku. Byłem trochę zaskoczony, że nie znalazłem zbyt wiele na temat dokumentacji Spring Security. Dzięki.

Jestem studentką, więc nie znam najlepszych praktyk branżowych, szczególnie w kontekście Javy, więc mam nadzieję, że ktoś będzie w stanie pomóc.

+0

Mam wdrożony projekt JAVA dla tego przypadku użycia. Jest na GitHub, open source. Możesz rzucić okiem: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows – OhadR

Odpowiedz

18

Problem nie ma wiele wspólnego ze Spring Security. Jeśli znasz strukturę bazy danych użytkownika i kodera haseł, to po prostu wdrażasz przepływ pracy obejmujący dostęp do danych, kontrolery internetowe i wysyłanie wiadomości e-mail. Łącze powinno zawierać losowy ciąg znaków (na przykład użyj SecureRandom i kodera base64) i powinno być przechowywane w bazie danych z identyfikatorem użytkownika i znacznikiem czasu (do sprawdzania poprawności okna, w którym link jest ważny). Kontroler po prostu wyodrębniłby token z przychodzącego żądania, załadował dane z bazy danych za pomocą tokena. Sprawdzałoby to sygnaturę czasową, a następnie przekazywało użytkownika do formularza wprowadzania hasła. W zależności od wymagań możesz również chcieć odpowiedzieć na kilka innych pytań bezpieczeństwa. Następnie należy zweryfikować i zakodować hasło i zapisać je na koncie odpowiadającym identyfikatorowi użytkownika zapisanemu w tabeli resetowania łącza. Miałoby również sens uruchomienie zadania wsadowego w celu usunięcia z bazy danych wygasłych łączy.

Wtyczka Grails Spring Security UI ma już opcję forgot password, którą można użyć bezpośrednio lub użyć jako odniesienia.

+0

świetny, prosty i zwięzły. Wierzę, że generowanie linków emailadress + timestamp (jako sól) generowałoby łącze do generowania linków? Również po to, by szybko odpowiedzieć na link dynamiczny, używam czegoś takiego: \t @RequestMapping (value = "/ var/{name}", method = RequestMethod.GET) – Aubergine

+0

Czy możesz potwierdzić, że zanim przyjmuję? :-) – Aubergine

+0

Dlaczego warto używać skrótu? Mimo to nadal trzeba by zachować token, aby go zweryfikować, a sygnatury czasowe można odgadnąć. Gdybym wiedział, że ktoś zażądał resetu i znał ich adres e-mail, mógłbym przetestować wszystkie możliwe znaczniki czasu w odpowiednim oknie, dopóki system mnie nie wpuści. Użyj losowych bajtów dla tokena łącza i uczyń go na tyle długim, że nie Nie martw się o to (np. 16 bajtów). –

5

Mam wdrożony projekt JAVA dla tego przypadku użycia. Jest na GitHub, open source.

Istnieje wyjaśnienie wszystkiego (a jeśli czegoś brakuje - daj mi znać ...)


spojrzeć: https://github.com/OhadR/Authentication-Flows

Jest to klient sieci web-app, który wykorzystuje auth-przepływy, z README ze wszystkimi wyjaśnieniami. kieruje on implementacją: https://github.com/OhadR/oAuth2-sample/tree/master/authentication-flows

+0

Czy jest wystarczająco stabilny, aby dostosować się do użytku produkcyjnego? – Kafkaesque

+0

to jest dobre pytanie. W skrócie: TAK. Należy pamiętać, że w przypadku produkcji każdy (zwykle) ma swoje własne potrzeby. na przykład są firmy, które potrzebują mechanizmu "tajnego pytania", którego nie wdrożyłem. ale jest to bardzo dobra podstawa do rozpoczęcia i dodawania wszystkiego, co jest potrzebne. zajrzyj do README. daj mi znać, jeśli coś nie jest jasne. i tak - jest stabilny :-) UWAGA: Zmieniłem linki w mojej odpowiedzi. spojrzeć .. – OhadR

+0

Witam @OhadR: Mam na myśli twój projekt, przydaje mi się, otrzymałem wyjątek: AuthenticationFlowsProcessorImpl - Uwierzytelnianie nie powiodło się; Zagnieżdżony wyjątek to javax.mail.AuthenticationFailedException, UserActionController - Konto jest zablokowane lub nie istnieje, sprawdziłem i dane użytkownika zostały wstawione do db –