64

Ich entwickle gerade eine REST-API, die für die Entwicklungsumgebung HTTP-Basic geschützt ist. Da die echte Authentifizierung über ein Token erfolgt, versuche ich immer noch herauszufinden, wie zwei Autorisierungsheader gesendet werden.Basic HTTP und Bearer Token Authentifizierung

Ich habe dies versucht, ein:

curl -i http://dev.myapp.com/api/users \ 
    -H "Authorization: Basic Ym9zY236Ym9zY28=" \ 
    -H "Authorization: Bearer mytoken123" 

Ich könnte zum Beispiel der HTTP-Authentifizierung für meine IP deaktivieren, aber als ich in der Regel in verschiedenen Umgebungen mit dynamischen IP-Adressen arbeitet, ist dies keine gute Lösung. Also vermisse ich etwas?

+0

Es gibt viele Möglichkeiten, die Authentifizierung (nicht mit der Autorisierung zu verwechseln) über http. Benutzt du irgendeinen Rahmen oder ist das deine eigene Kreation? warum brauchst du zwei authorization-header? – plc

+1

Ich muss mich über HTTP Basic authentifizieren, da der Dev-Server damit geschützt ist und ich die tokenbasierte Authentifizierung für die API benötige. Aber wie ich curl verwende, um die API zu testen, brauche ich eine Möglichkeit, beide Authentifizierungsheader zu senden.So die erste (grundlegende), um HTTP Basic und die zweite (Token), um meine Anwendung zu authentifizieren. Und ja, es ist meine eigene Schöpfung. – Azngeek

+1

Sie finden das jemals heraus? Ich füge ein Kopfgeld hinzu –

Antwort

37

versuchen diese grundlegende Authentifizierung auf URL drücken:

curl -i http://username:[email protected]/api/users -H "Authorization: Bearer mytoken123" 
       ^^^^^^^^^^^^^^^^^^ 

Wenn über eine nicht, dann funktioniert sie nichts damit zu tun haben. Versuchen Sie die folgenden Alternativen.

Sie können das Token unter einem anderen Namen übergeben. Weil Sie die Autorisierung von Ihrer Anwendung bearbeiten. So können Sie diese Flexibilität für diesen speziellen Zweck einfach nutzen.

curl -i http://dev.myapp.com/api/users \ 
    -H "Authorization: Basic Ym9zY236Ym9zY28=" \ 
    -H "Application-Authorization: mytoken123" 

Hinweis Ich habe die Kopfzeile in Application-Authorization geändert. So fangen Sie von Ihrer Anwendung den Token unter dieser Kopfzeile und verarbeiten, was Sie tun müssen.

Eine andere Sache, die Sie tun können, ist, die token durch die POST Parameter zu übergeben und den Wert des Parameters von der Server-Seite zu greifen. Zum Beispiel verläuft Token mit Curl-Pfosten Parameter:

-d "auth-token=mytoken123" 
+0

Hallo Sabuj, das Problem ist nicht die Art, wie Sie den Benutzernamen und das Passwort weitergeben, aber mehrere Autorisierungsheader funktionieren einfach nicht. Mit Blick auf die Spezifikationen (https://www.ietf.org/rfc/rfc2617.txt) kann ich sehen, dass dies möglich sein sollte. Aber wie auch gesagt "" Der User-Agent MUSS wählen, um eine der Herausforderungen mit der stärkste Auth-Schema zu verwenden, die es versteht und Anfragen von Benutzer basierend auf dieser Herausforderung. "So wie ich vor 2 Tagen geschrieben habe, musste ich Übergeben Sie das Token an einen Nicht-Standard-Header, der absolut in Ordnung ist, wenn Sie mit Nicht-Standard-Architekturen umgehen .. – Azngeek

+4

@Azngeek Curl sendet beide Autorisierungsheader, wenn Sie die Aufgabe ausführen.Sie müssen es von Ihrem Server-Ende behandeln Dein curl-Befehl mit beiden Headern mit '-v' param. Du wirst feststellen, dass er' Authorization: Basic Ym9zY236Ym9zY28 =, Authorization: Bearer mytoken123' auf Anfrage header sendet. Von deinem Server-Ende aus, wenn du das überprüfst, wirst du das finden Sie haben Authorization header auf diese Weise 'Authorization: Basic Ym9zY236Ym9zY28 =, Bearer mytoken123' getrennt durch Komma. Also, ich sollte Ihnen vorschlagen, dass Sie sich abwechseln. –

1

curl --anyauth

Tells curl Authentifizierungsverfahren, um herauszufinden, für sich allein, und verwenden die sichersten eine die Gegenstelle zu unterstützen behauptet. Dies geschieht durch zuerst eine Anfrage und Überprüfung der Antwort-Header, damit möglicherweise eine zusätzliche Netzwerk-Round-Trip induzieren. Dies wird verwendet anstelle einer spezifischen Authentifizierungsmethode, die Sie tun können mit --basic, --digest, --ntlm und - verhandeln.

22

Standard (https://tools.ietf.org/html/rfc6750) sagt, die Sie verwenden können:

  • Form-Encoded Körper Parameter: Berechtigung: Bearer mytoken123
  • URI-Abfrage Parameter: access_token = mytoken123

So ist es möglich, viele Träger Token mit URI zu übergeben, aber dies wird abgeraten (siehe se ction 5 in der Norm).

Verwandte Themen