Oauthlib: Ungültiger HTTP-Status bei Fehlerantwort

Erstellt am 15. Sept. 2014  ·  11Kommentare  ·  Quelle: oauthlib/oauthlib

RFC 6749 Abschnitt 5.2 (http://tools.ietf.org/html/rfc6749#section-5.2) beschreibt die Fehlerreaktion. Es besagt, dass der Server mit HTTP 400 (Bad Request) antworten sollte. Aber oauthlib verwendet stattdessen HTTP 401 (nicht autorisiert) für Fehler wie InvalidClientError , InvalidGrantError , UnauthorizedClientError und andere verwandte Fehler.

Zum Beispiel https://github.com/idan/oauthlib/blob/master/oauthlib/oauth2/rfc6749/errors.py#L181

Contributor Friendly

Hilfreichster Kommentar

Bevor ich hier weiterkomme, möchte ich die Diskussion zusammenfassen, die in der Vergangenheit stattgefunden hat.

  1. invalid_client , wobei es 401 sein MUSS , wenn HTTP-Authentifizierung verwendet wird, andernfalls KÖNNTE es 401 sein.
  2. invalid_token , wo es 401 sein SOLLTE .

Wenn 401 verwendet wird, MUSS auf jeden Fall WWW-Authenticate gesetzt werden ( RFC2616 ).

Andere OAuth2.0-Implementierungen

Ein kurzer Überblick über die gängigsten OAuth2.0-Implementierungen ähneln dem allgemeinen Konsens:

Schlussfolgerung

Wir müssen uns an den RFC anpassen, aber um keine Implementierungen zu beschädigen, dürfen wir diese Änderungen nicht in Version 2.xx aufnehmen, sondern bis Version 3.xx warten

Bitte melden Sie sich gerne an.

Alle 11 Kommentare

Die Spezifikation erwähnt, dass 401 mit ungültigen Client-Fehlern verwendet werden kann und verwendet werden muss, wenn die Authentifizierung über das Autorisierungs-Header-Feld erfolgt ist. Obwohl oauthlib derzeit nicht darauf hindeutet, dass das Header-Feld „WWW-Authenticate“ in die Antwort aufgenommen werden sollte, wie es die Spezifikation erfordert. Ich denke, dass es in Ordnung ist, 401 für diesen Fehler zu behalten, aber wir sollten der Ausnahme einen Header-Vorschlag hinzufügen.

Bezüglich der anderen besagt die Spezifikation nicht ausdrücklich, dass 401 verwendet werden darf, und daher sollten wir wahrscheinlich in Betracht ziehen, zu 400 zu wechseln. Es scheint jedoch angemessener zu sein, mit einem 401 sowohl bei ungültiger Gewährung als auch insbesondere bei nicht autorisierten Client-Fehlern.

@asteinlein , @lepture , @masci Gedanken?

@ib-lundgren Hallo - bin gerade auf genau dieses Problem gestoßen und möchte mich einschalten. Wenn Sie die Spezifikation lesen und sich nach anderen Antworten umsehen, ist IMO ein 400 die richtige Antwort.

Erstmal die Spezifikation:

Der Autorisierungsserver antwortet mit einem HTTP 400 (Bad Request)
Statuscode (sofern nicht anders angegeben) und umfasst Folgendes
Parameter mit der Antwort:

Bei den 400 Anforderungen gibt es kein MUSS, aber auch kein DÜRFEN.

Zweitens, und der Grund, warum ich darauf gestoßen bin, war eine Art Fehler im Sun-JDK auf meinem Client (siehe hier: http://stackoverflow.com/a/7524681/1137254 )

Im Wesentlichen würde der HTTP-Stack meines Clients die Verbindung für einen 401-Fehler vorzeitig schließen, aber der obige OAuth-Stack (google-http-oauth-client) würde versuchen, das Lesen fortzusetzen und die Ergebnisse zu analysieren. Ich denke, dies wurde gemäß der Definition und den Erwartungen um einen 401 in OpenJDK geschrieben (UPDATE: Es hat tatsächlich mit dem „Streaming“ -Modus zu tun). IMO OpenJDK ist auch falsch und ich denke, ich würde auf dasselbe Problem stoßen, wenn ich während /token-Endpunktanforderungen einen „invalid_client“ 401 erhalten würde.

Fügen Sie hier eine weitere Stimme hinzu, damit 400 der richtige Fehlercode ist. Früher haben wir django-oauth2-provider für die oauth2-Authentifizierung von mobilen Apps verwendet und in diesem Fall 400 zurückgegeben. Beim Wechsel zu django-oauth-toolkit (das oauthlib verwendet), um auf neuere Django-Versionen zu aktualisieren, mussten wir die Token-Anforderungsansicht hacken, um stattdessen 400 zurückzugeben, damit die mobilen Apps ordnungsgemäß funktionieren.

Hier ist einer der Autoren der Spezifikation, der ausdrücklich erklärt, dass eine 400 die beabsichtigte Antwort für ungültige Authentifizierungsdaten ist, wenn ein Token angefordert wird, und warum: https://www.ietf.org/mail-archive/web/oauth/current/msg02127 .html

Und hier ist ein weiteres Beispiel für ein Projekt, das unter diesen Umständen Probleme hat, mit oauthlib unter Verwendung eines 401 zurechtzukommen.

+1 für 400

Stimmen Sie für 400

Ich belebe diesen alten Thread wieder und starte eine PR mit den oben vorgeschlagenen Änderungen.

Bevor ich hier weiterkomme, möchte ich die Diskussion zusammenfassen, die in der Vergangenheit stattgefunden hat.

  1. invalid_client , wobei es 401 sein MUSS , wenn HTTP-Authentifizierung verwendet wird, andernfalls KÖNNTE es 401 sein.
  2. invalid_token , wo es 401 sein SOLLTE .

Wenn 401 verwendet wird, MUSS auf jeden Fall WWW-Authenticate gesetzt werden ( RFC2616 ).

Andere OAuth2.0-Implementierungen

Ein kurzer Überblick über die gängigsten OAuth2.0-Implementierungen ähneln dem allgemeinen Konsens:

Schlussfolgerung

Wir müssen uns an den RFC anpassen, aber um keine Implementierungen zu beschädigen, dürfen wir diese Änderungen nicht in Version 2.xx aufnehmen, sondern bis Version 3.xx warten

Bitte melden Sie sich gerne an.

Ich kann mich nicht an den Grund/die Kunden erinnern, die mich veranlasst haben, PR Nr. 247 zu pushen, aber ich sehe und verstehe die Gründe dafür, dies rückgängig zu machen. Vielen Dank für die großartige Recherche @JonathanHuot , und dies in 3.x zu tun, klingt nach dem besten Ansatz.

Behoben in #561 / oauthlib>= 3.0.0

Laut diesem RFC sollte der oben erwähnte ungültige Client auch den Status 400 zurückgeben, aber im Paket ist immer noch 401

Hallo @esfandiaryfard , könntest du den genauen Text des RFC zeigen? Danke!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

thedrow picture thedrow  ·  31Kommentare

JonathanHuot picture JonathanHuot  ·  10Kommentare

ib-lundgren picture ib-lundgren  ·  21Kommentare

jcampbell05 picture jcampbell05  ·  14Kommentare

ryarnyah picture ryarnyah  ·  3Kommentare