Gdy interfejs API wymaga uwierzytelnienia klienta, widziałem dwa różne scenariusze i zastanawiam się, który przypadek powinienem zastosować w mojej sytuacji.
Przykład 1. Firma oferuje interfejs API, aby umożliwić stronom trzecim uwierzytelnianie za pomocą tokena i tajnego przy użyciu HTTP Basic.
Przykład 2. Interfejs API akceptuje nazwę użytkownika i hasło za pośrednictwem HTTP Basic w celu uwierzytelnienia użytkownika końcowego. Zazwyczaj otrzymują token z powrotem na przyszłe żądania.
Moja konfiguracja: będę mieć interfejs API JSON, którego używam jako zaplecza aplikacji mobilnej i internetowej. Wydaje się, że dobrą praktyką jest, aby zarówno aplikacja mobilna, jak i internetowa wysyłały token i klucz tajny, aby tylko te dwie aplikacje mogły uzyskać dostęp do interfejsu API blokującego wszelkie strony trzecie.
Ale aplikacja mobilna i internetowa umożliwiają użytkownikom logowanie się i przesyłanie postów, przeglądanie ich danych itp. Chciałbym więc, aby logowali się również przez HTTP Basic na każde żądanie.
Czy w jakiś sposób używam kombinacji obu tych metod, czy wysyłam tylko poświadczenia użytkownika końcowego (nazwę użytkownika i token) na każde żądanie? Jeśli przesyłam tylko poświadczenia użytkownika końcowego, czy przechowuję je w pliku cookie na kliencie?
źródło
Odpowiedzi:
Podstawowe uwierzytelnianie HTTP wymaga wysłania nazwy użytkownika i hasła przy każdym żądaniu zasobu. Nazwa użytkownika: hasło jest przekazywane w nagłówku żądania „Autoryzacja” ciąg znaków zakodowany w formacie base64, poprzedzony „Podstawowy”. Jeśli cała komunikacja HTTP jest zaszyfrowana (przez ssl), informacje nagłówka autoryzacji nie powinny być łatwo wykorzystywane przez atakujących, ponieważ jest mało prawdopodobne, aby mogli je zdobyć.
Wystarczy szyfrowany http protokół HTTP z podstawowym uwierzytelnianiem.
źródło
Czy OAuth / OpenID może działać razem z tokenem / sekretem?
Niedawno rozważałem następujący scenariusz:
Jako prosty test mogłem:
Pozwoliłoby to aplikacji mobilnej na uwierzytelnianie przy użyciu tych samych danych uwierzytelniających jak w interfejsie internetowym (to samo konto), a także na autoryzacji dostępu do interfejsu API.
źródło