Pracuję więc teraz nad aplikacją mobilną, która będzie wysyłać żądania do REST API zbudowanego z Django.Jak udostępnić tajny klucz mojej aplikacji mobilnej serwerowi podczas jego pierwszego generowania?
W celu zabezpieczenia interfejsu API planuję użyć systemu uwierzytelniania par prywatnego/publicznego.
Workflow mam przemyślane wychodzi coś takiego:
- użytkownik loguje się za pomocą Facebooka
- Gdy użytkownik podpisuje aplikacja generuje klucz
- Klucz prywatny jest dzielona pomiędzy serwer i aplikacja, aby serwer mógł mapować ten klucz prywatny do określonego użytkownika.
- Za każdym razem, gdy aplikacja mobilna zgłasza żądanie, aplikacja generuje HMAC/podpis przy użyciu parametrów żądania i klucza prywatnego. Oprócz HMAC aplikacja wysyła także identyfikator użytkownika użytkownika, który go wysłał (będzie to działać jako klucz publiczny).
- Po otrzymaniu żądania serwer generuje własny HMAC. Przyjmuje on identyfikator użytkownika i wyszukuje klucz prywatny w tabeli. Za pomocą klucza prywatnego odtwarza HMAC z parametrami żądania i porównuje go z HMAC wysłanym przez aplikację mobilną. Jeśli serwer i telefon komórkowy mają pasujące HMAC, wówczas wykonuje żądanie.
Teraz mój problem leży w kroku 3, w którym klucz prywatny musi być w jakiś sposób udostępniony między aplikacją mobilną a serwerem. Jak mogę bezpiecznie wysłać klucz prywatny?