Obsłużenie logowania do aplikacji Windows Forms

0

Tworzę aplikację Windows Forms w któej chce umiescic logowanie uzytkownika. Obsuługę logowania chciałbym zrobić jakims servicem w infrastrukturze. Może mi ktoś doradzić jak to powinno wyglądać. Przy zakładaniu uzytkownika jego login oraz zahaszowane hasło wrzucam do bazy.
Teraz jak uzytkownik bedzie chciał się zalogować do aplikacji to jak to obsłużyć?
Myślałem zeby zrobić to w takiej kolejności

  1. użytkownik wpisuje login i hasło

  2. sprawdzam czy taki uzytkownik istnieje w bazie, jeśli nie istnieje to wywalam komunikat ze niepoprawne dane logowania

  3. jeśli użytkonik istniej to porównuuje hash wpisanego hasła z hasem który jest w bazie. Jak nie pasuje to komunikat

No i właśnie teraz pojawia się problem. Czy jeśli logowanie przebiegło pomyślnie to gdzieś w aplikacji powinienem mieć jakąś zmienną globalną do której wrzucę informację o zalogowanym użytkowniku tak abym mógł je używać w innych częściach aplikacji?
Mam np w service metodę którą używam do logowania(w niej jest obsługa tych trzech punktów któe wczesniej wymieniłem):

public void Login(string name, string password)

Czy ta metoda powinna właśnie tak wyglądać, czy jednak powinna zwracać obiekt klasy User, w którym będą dane zalogowanego użytkonwika?
A jeśli powinna zwracać Usera, to czy ma on być przypisany do zmiennej globalnej, czy jakoś inaczej się to robi, aby była możliwość korzystania z danych tego usera w innych miejscach aplikacji?

0

Tak naprawdę możesz to załatwić na wiele sposobów. Najbardziej "po Bożemu" byłaby jakaś metoda w tym serwisie. Oczywiscie serwis musiałby być singletonem. Wtedy on sobie zapisuje usera w jakimś prywatnym polu, a Ty przez metodę/właściwość wyciągasz tego usera.

PS. Jeśli logujesz dokładnie tak, jak opisałeś, to jest ok, ale można lepiej. Nie rób hasha z samego hasła. Doklejaj do tego salt. Tzn. np:
hash(id_usera.ToString() + data_rejestracji.ToString() + pass)

I jak logujesz usera, to robisz podobnie. Szukasz jego ID (po podanym loginie) i odpowiednio dalej tworzysz hasha do porównania. Ta metoda jest bardziej bezpieczna i dużo bardziej odporna na brute force.

1 użytkowników online, w tym zalogowanych: 0, gości: 1