Cześć, mam lokalnie postawione selfhosted webapi i do tego apkę w electronie do pobierania i wizualizowania danych z tego webapi. Czy macie jakiś pomysł jak mógłbym dać dostęp jedynie do odpytywania api tylko tej jednej aplikacji? Oczywiście mam w głowie standardowe sposoby uwierzytelnienia dla webapi, ale ciekawi mnie czy na podstawie jakiegoś identyfikatora można rozpoznać program/proces? System to Windows.
Najszybciej to chyba autoryzacja i autentykacja za pomocą tokena, którego miała by tylko ta jedna aplikacja, a przy każdym kontrolerze dopisujesz tylko [Authorize]
i bez tokena w headerze dostaniesz 401 lub 403.
Możesz po nazwie znaleźć taki proces - dla ekspresa to będzie pewnie jakiś Node, ale api nie wie kto go odpytuje i nie ma jak połączyć te dane w kupę. Pozostaje zrobić jakiś klucz autoryzacyjny.
Osobiście nie polegałbym na żadnych identyfikatorach procesów tylko użył bardziej standardowych metod uwierzytelniania jak np Identity.
Jeśli wszystko masz postawione w jakiejś lokalnej sieci czy na jednej maszynie i jesteś pewien że nikt niepowołany się tam nie dostanie a jeśli nawet dostanie to nie znajdzie nic czego byś żałował to możesz od biedy wygenerować sobie jakiś klucz uwierzytelniający który dodasz do każdego żądania (np header) a w samym api dodasz middleware który sprawdzi czy wartość przekazana w danym nagłówku odpowiada temu co masz w konfiguracji. Tyle, że to nie zapewnia zbyt dużego bezpieczeństwa
A jakie to ma znaczenie? To ty decydujesz o tym co API ma zwrócić i kto ma mieć do tego dostęp. Użytkownik bez praw administracyjnych może mieć jedynie problem z uruchomieniem electronowej apki.
Najlepszym rozwiązaniem jest odpowiedź @AdamWox. Inne aplikacje będa mogły nawiązać połączenie z API, ale nie będą mogły korzystać z jej dóbr.
Jeżeli nie przekonuje Cię to i zależy Ci na tym, aby nikt poza apką nie mógł się połączyć z API, to postaw API na stałym porcie i zezwól tylko jednej aplikacji na łączenie sie z tym portem
@gswidwa1: Tylko w jaki sposób zezwolić tej jednej aplikacji na łączenie się z tym portem?
Żeby rozpoznać proces/aplikację, używa się ApiKey i ApiSecret. Wtedy wiesz, co za aplikacja się łączy z API.