Wie sollte eine API die HTTP-Basisauthentifizierung verwenden?

17

Wenn für eine API die Authentifizierung eines Clients erforderlich ist, wurden zwei verschiedene Szenarien verwendet, und ich frage mich, welchen Fall ich für meine Situation verwenden soll.

Beispiel 1. Eine API wird von einem Unternehmen angeboten, um Dritten die Authentifizierung mit einem Token und einem Geheimnis unter Verwendung von HTTP Basic zu ermöglichen.

Beispiel 2. Eine API akzeptiert einen Benutzernamen und ein Kennwort über HTTP Basic, um einen Endbenutzer zu authentifizieren. Im Allgemeinen erhalten sie ein Token für zukünftige Anfragen zurück.

Mein Setup: Ich werde eine JSON-API haben, die ich als Backend für eine Mobil- und Web-App verwende. Es scheint eine gute Praxis zu sein, dass sowohl die mobile als auch die Web-App ein Token und ein Geheimnis mitsenden, sodass nur diese beiden Apps auf die API zugreifen können und andere Drittanbieter blockieren.

Mit der Mobil- und Web-App können sich Benutzer anmelden und Beiträge übermitteln, ihre Daten anzeigen usw. Ich möchte, dass sie sich bei jeder Anforderung auch über HTTP Basic anmelden.

Verwende ich irgendwie eine Kombination dieser beiden Methoden oder sende ich nur die Anmeldeinformationen des Endbenutzers (Benutzername und Token) bei jeder Anforderung? Wenn ich nur die Anmeldeinformationen des Endbenutzers sende, speichere ich sie in einem Cookie auf dem Client?

Paul Sylling
quelle
Beachten Sie, dass Cookies nicht Teil des HTTP-Protokolls sind und lediglich eine allgemeine Browserfunktion darstellen. Also, wenn Sie nicht für das Web bereitstellen, vergessen Sie sie.
Yam Marcovic
Wenn Cookies nicht empfohlen werden, wie / wo speichern Sie die Creds, um sie an die API weiterzuleiten?
Paul Sylling
Cookies sind nur eine Möglichkeit für Browserbenutzer, Sitzungstoken nahtlos zu speichern. Wenn Sie mit einem Entwickler interagieren, muss dies nicht nahtlos sein. Sie können einen öffentlichen Verbindungsdienst einrichten, der "Tickets" gewährt, und Entwickler können ihr Ticket im Speicher behalten, oder wo immer sie möchten. Beachten Sie, dass ich keine praktische Erfahrung mit Webdiensten habe und es wahrscheinlich Standardlösungen für diese Art von Dingen gibt.
Yam Marcovic
Was halten Sie von meiner Frage zu Endbenutzerauthentifizierung und API-Authentifizierung? Ich bin mir noch nicht sicher
Paul Sylling

Antworten:

7

Bei der HTTP-Basisauthentifizierung müssen der Benutzername und das Kennwort bei jeder Ressourcenanforderung gesendet werden. Der Benutzername: Kennwort wird in der Base64-codierten Zeichenfolge mit dem Präfix "Basic" im Anforderungsheader "Authorization" übergeben. Wenn Ihre gesamte HTTP-Kommunikation verschlüsselt ist (über SSL), können die Informationen des Authorization-Headers möglicherweise nicht einfach von Angreifern verwendet werden, da es unwahrscheinlich ist, dass sie darauf zugreifen können.

SSL-verschlüsseltes http mit einfacher Authentifizierung sollte ausreichen.

Nathan Pilling
quelle
2
Können Sie ein Beispiel dafür geben? Es ist, was ich brauche, nur im
Moment
0

Kann OAuth / OpenID zusammen mit Token / Secret funktionieren?

Ich habe kürzlich folgendes Szenario in Betracht gezogen:

  • Webanwendungs-Front-End
  • Zugrunde liegende REST-API
  • Anwendungen für mobile Geräte, Zugriff auf die REST-API

Als einfachen Test konnte ich:

  • Authentifizieren Sie Benutzer über die Webanwendung mit OAuth
  • Die über OAuth autorisierte REST-API führt dazu, dass ein Geheimnis generiert und an den Client zurückgegeben wird
  • Das mobile Gerät würde sich dann über OAuth authentifizieren und dann von der REST-API über das Geheimnis autorisiert werden

Auf diese Weise kann sich die mobile Geräteanwendung mit denselben Anmeldeinformationen wie über das Web-Front-End (dasselbe Konto) authentifizieren und den Zugriff auf die API autorisieren.

Brendan Green
quelle
1
In Ihrem Beispiel authentifiziert sich also nur der Benutzer. Die Clients, mit denen die API (Web-App, mobile App) aufgerufen wird, authentifizieren nicht, wer sie sind. Theoretisch ist die API öffentlich und jede Anwendung könnte einen Benutzernamen und ein Passwort veröffentlichen und möglicherweise einen Token zurückbekommen
Paul Sylling,
Der Benutzer authentifiziert sich über die App und die App tätigt die Anrufe im Namen des Benutzers. Der Authentifizierungsprozess leitet den Token ab, den die App dann weiterleitet.
Brendan Green