W jaki sposób interfejs API powinien używać podstawowego uwierzytelniania HTTP

17

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?

Paul Sylling
źródło
Pamiętaj, że pliki cookie nie są częścią protokołu HTTP, a jedynie zwykłą funkcją przeglądarki. Jeśli więc nie wdrażasz Internetu, zapomnij o nich.
Yam Marcovic,
Jeśli pliki cookie nie są zalecane, w jaki sposób / gdzie przechowujesz dane do przekazania do interfejsu API?
Paul Sylling,
Pliki cookie to tylko sposób na bezproblemowe przechowywanie tokenów sesji przez użytkowników przeglądarki. Jeśli współpracujesz z programistą, nie musi to być płynne. Możesz skonfigurować usługę publicznego połączenia, która przyznaje „bilety”, a programiści mogą przechowywać bilet w pamięci lub w dowolnym miejscu. Pamiętaj, że nie mam praktycznego doświadczenia z usługami internetowymi i prawdopodobnie istnieją standardowe rozwiązania tego typu.
Yam Marcovic,
Jakie są twoje przemyślenia ze strony mojego pytania na temat autoryzacji użytkownika końcowego i autoryzacji interfejsu API? Nadal nie jestem tego pewien
Paul Sylling,

Odpowiedzi:

7

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.

Nathan Pilling
źródło
2
czy możesz podać przykład tego? Właśnie tego potrzebuję, BARDZO utknąłem w tej chwili ...
patrzy
0

Czy OAuth / OpenID może działać razem z tokenem / sekretem?

Niedawno rozważałem następujący scenariusz:

  • Interfejs aplikacji sieci Web
  • Bazowy interfejs API REST
  • Aplikacje na urządzenia mobilne, dostęp do interfejsu API REST

Jako prosty test mogłem:

  • Uwierzytelnij użytkowników za pomocą aplikacji sieci Web przy użyciu protokołu OAuth
  • Interfejs API REST autoryzowany przez OAuth, w wyniku czego sekret jest generowany i przekazywany z powrotem do klienta
  • Urządzenie mobilne zostanie następnie uwierzytelnione za pomocą OAuth, a następnie autoryzowane przez interfejs API REST za pośrednictwem tajnego klucza

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.

Brendan Green
źródło
1
Tak więc w twoim przykładzie uwierzytelnia się tylko użytkownik. Klienci, którzy wykonują połączenia z interfejsem API (aplikacja internetowa, aplikacja mobilna), nie uwierzytelniają się. Teoretycznie interfejs API jest publiczny i każda aplikacja może opublikować nazwę użytkownika i hasło oraz potencjalnie odzyskać token
Paul Sylling,
Użytkownik uwierzytelnia się za pośrednictwem aplikacji, a aplikacja wykonuje połączenia w imieniu użytkownika. Proces uwierzytelniania uzyskuje token, który następnie przekazuje aplikacja.
Brendan Green,