Można wdrożyć wzajemnie uwierzytelniony protokół SSL między prawowitymi klientami a interfejsem API. Wygeneruj samopodpisany certyfikat klienta SSL i zapisz go w swoim kliencie. Skonfiguruj serwer tak, aby wymagał uwierzytelniania po stronie klienta i akceptuj tylko te certyfikaty, które wdrożyłeś na swoich klientach. Jeśli ktoś/coś próbujące się połączyć nie ma tego certyfikatu klienta, nie będzie mógł ustanowić sesji SSL i połączenie nie zostanie nawiązane. Zakładając, że kontrolujesz legalnych klientów i serwery, nie potrzebujesz tutaj certyfikatu wystawionego przez CA; po prostu używaj certyfikatów z podpisem własnym, ponieważ kontrolujesz zarówno zaufanie po stronie klienta, jak i po stronie serwera.
Teraz mówisz, że naprawdę trudno jest uniemożliwić komuś odwrócenie inżynierii klienta i odzyskanie poświadczeń (klucz prywatny należący do certyfikatu klienta, w tym przypadku). I masz rację. Normalnie przechowujesz ten klucz (i certyfikat) w magazynie kluczy czegoś (KeyStore
, jeśli używasz Androida) i ten magazyn kluczy zostanie zaszyfrowany. Szyfrowanie jest oparte na haśle, więc musisz albo (1) przechowywać to hasło w swoim kliencie, albo (2) zapytać użytkownika o hasło podczas uruchamiania aplikacji klienckiej. To, co musisz zrobić, zależy od Twojego zastosowania. Jeśli (2) jest akceptowalne, chroniłeś swoje referencje przed inżynierią wsteczną, ponieważ będzie ona zaszyfrowana, a hasło nie będzie przechowywane nigdzie (ale użytkownik będzie musiał wpisać to za każdym razem). Jeśli to zrobisz (1), wtedy ktoś będzie mógł wykonać inżynierię wsteczną, uzyskać hasło, pobrać magazyn kluczy, odszyfrować klucz prywatny i certyfikat oraz utworzyć kolejnego klienta, który będzie mógł połączyć się z serwerem.
Nic nie możesz zrobić, aby temu zapobiec; możesz sprawić, że inżynieria odwrotna będzie ciężej (przez zaciemnianie, itp.), ale nie możesz uniemożliwić.Musisz określić, jakie ryzyko próbujesz złagodzić za pomocą tych metod i ile pracy warto wykonać, aby je złagodzić.
Krok OAuth jest za pośrednictwem protokołu SSL. Próbuję chronić API, które będzie wywoływane przez kilku różnych klientów działających na komputerze użytkownika. Kod auth otrzymany z przepływu OAuth jest przekazywany do wszystkich wywołań API w nagłówku Authorization żądania. Kod jest następnie weryfikowany na serwerze. – Evan
To OAuth2, musi być przez SSL. –