Logowanie do programu desktopowego

0

Hej,
mógłby mi ktoś doradzić w miarę prostą i bezpieczną metodę do zabezpieczenia programu za pomocą loginu i hasła?
Obecnie jest połączenie z BD mysql zdalną, no ale wiadomo, że nie może zostać. Program w .net (ale metoda ma być uniwersalna pod inne języki i programy).

Rozważałem:

  1. WordPress z jakąś wtyczką do autoryzacji (sam nie napisze bo z WP jestem słaby),
  • plusy: tanie utrzymanie systemu, jedynie koszt wtyczki
  • minuty: gdybym chciał dodać jakiś system zapisu błędów / ostatnie logowanie / ip logowania to będę miał z tym problem
  1. Własna aplikacja w Django z autoryzacja po rest API
  • plusy: jestem w stanie zrobić logowanie błędów, statystki dla usera i wiele innych,
  • minusy: dużo pracy, droższe utrzymanie

Mogę liczyć na jakieś rady / sugestie?

4

Nie mam zielonego pojęcia o co ty pytasz. W dawnych czasach aplikacje tak zwany groby klient łączyły sie z bazą i logowanie było na podstawie użytkownika i hasła z bazy danych. Mam wrażenie że coś grubo kombinujesz beż potrzeby. Napisz co to za aplikacja i jakie dane tam trzymasz. Czy to ma działać przez internet czy lokalnie?

0

@UglyMan:
Postaram się jaśniej:
Mam program do wysyłania maili (zwykły na PC) i chcę, ale korzystać z niego mogli jedynie klienci, który posiadają aktualną licencje. Bazę z klientami mam zdalną.

5

To wystaw sobie rest api do którego co jakiś czas będziesz odpytywal o klucz klienta. Takie api zrobisz przy pomocy bylejakiego tutoriala

1

Podczas instalacji:

  • generujesz unikalny identyfikator instalacji i zapisujesz lokalnie.
  • wywołujesz API zabezpieczone (np. użytkownik + hasło) przesyłając ten identyfikator.
  • serwer dopisuje (jeżeli może) instalację do konta użytkownika, oraz jeżeli wszystko OK, zwraca token JWT, z długą datą ważności (typu rok), zapisujesz sobie i używasz w dalszej części sekwencji jako refresh token
  • wywołujesz endpoint sprawdzający ważność licencji na danym urządzeniu, przedstawiając się tokenem JWT (pozyskanym wyżej)
  • serwer zwraca krótkotrwały token JWT, dalej nazwany JWT-licencja. Token zawiera warunki licencji (np. z jakiego adresu można wysyłać maile, czy coś tam) + datę ważności licencji na lokalnym komputerze (np. 7 dni)
  • zapisujesz sobie lokalnie i sprawdzasz przy każdym uruchomieniu jakie są warunki licencji i czy data nie została przekroczona, jeśli tak, to kasujesz.

Potencjalne zagrożenia:

  • Przeniesienie pliku z pobranym tokenem na inny komputer pozwala na obejście limitu, więc warto zadbać, żeby były tam dane istotne dla użytkownika (żeby nie chciał się nimi dzielić)
  • Alternatywnie/dodatkowo można w identyfikatorze urządzenia umieścić np. mac adres. Opcją ultimate jest wygenerowanie i zapisanie kluczy asymetrycznych za pomocą TPM (dla użytkownika teoretycznie nie do wyciągnięcia) i użycie tego jako sekretu urządzenia.

Oczywiście pozostaje kwestia zabezpieczenia samej aplikacji przed dekompilacją / deassemblacją (nie wiem jakiego języka używasz). Z tym nie poradził sobie skutecznie chyba nikt, więc popularną metodą jest przeniesienie kluczowych funkcji aplikacji na serwer. Czyli w twoim przypadku miałbyś tego grubego klienta u użytkownika, aplikacja przesyła treść i adresatów maili na serwer, a serwer (twój) zajmuje się wysłaniem tego dalej.

Czyli tak jak napisał @UglyMan tylko trochę bardziej rozpisane.

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