Ich erstelle eine Anwendung, die in Anwendungen von Drittanbietern integriert ist.
Zu diesem Zweck sendet der angemeldete Benutzer einen API-Schlüssel für die Integration durch Dritte.
Welche HTTP-Antwort sollte ich zurückgeben, falls der von ihnen übermittelte API-Schlüssel ungültig ist (und einen 401 vom Drittanbieter zurückgibt)?
Die Rückgabe eines 401 aus meiner Anwendung klingt verwirrend, da aus Sicht des Frontends unklar ist, ob sie von meiner Anwendung oder der Anwendung eines Drittanbieters nicht authentifiziert wurden.
Ich bin versucht, nur 400 zu vergeben - als hätten sie ein Formular mit einer ungültigen E-Mail-Adresse usw. gesendet.
quelle
Proxy-Authenticate
Kopfzeile gesendet , die Informationen zur korrekten Autorisierung enthält." Was denkst du sollte drin stehen? In RFC 7235 heißt es außerdem: "Der Client kann die Anforderung mit einem neuen oder ersetzten Proxy-Authorization-Header-Feld wiederholen." Es scheint also Teil eines sehr spezifischen Mechanismus zu sein, der für die Situation des Fragestellers nicht gilt.407
das ist nicht richtig. In diesem Fall ist Ihr Code der Proxy und wird authentifiziert. Es ist ein fremdes System, das nicht authentifiziert ist.401
ist vernünftig, aber es ist irreführend, was nicht authentifiziert ist, da der Client bei Ihrem System authentifiziert ist. Dies funktioniert auch nicht, wenn Ihre ausländische Authentifizierung erst nach einem 100Continue zurückgestellt wird.400
ist nicht korrekt, da die Anforderung im Format gültig war, die Authentifizierung jedoch beim Fremdagenten fehlgeschlagen ist.Alle anderen
4xx
Antworten werden hier leicht als nicht zutreffend abgetan.Damit bleibt
403
Verboten, was meiner Meinung nach Ihre einzige echte Option in diesem Fall ist:403
Verboten Der Client hat keine Zugriffsrechte auf den Inhalt. Das heißt, es ist nicht autorisiert, sodass der Server die Angabe der angeforderten Ressource verweigert. Im Gegensatz zu 401 ist die Identität des Clients dem Server bekannt. In diesem Fall kann es auch geeignet sein, auch mit einer Statusmeldung zu antworten, die die "Grundursache" des Fehlers angibt. Es hängt wirklich von der Sicherheitsbereitschaft Ihrer Anwendung ab.Meine $ .02
quelle
Ich würde mit 400 gehen, es erfüllt die semantische Anforderung. Der Benutzer hat einige schlechte Daten angegeben. Wie Sie sagen, impliziert ein 401/403 ein Problem zwischen dem Benutzer und Ihrer Site, nicht zwischen Ihrer Site und einer anderen Anwendung.
In Abschnitt 1 des HTTP 1.1-RFC heißt es:
Ergo ist die Definition von Statuscodes zwischen einem Client und einem Server. Für mich bedeutet dies, dass Sie diejenige auswählen, die für andere Interaktionen (Server zu Server, Backend usw.) am besten geeignet ist.
Alle anderen hier angebotenen Exoten werden den Verbraucher des Dienstes nur verwirren.
quelle
Es ist immer gut, 403 zu senden
aber bei Bedarf können Sie json info- hinzufügen
Und dann fügen Sie in der Antwort auch die folgenden Informationen hinzu
Wenn eine Anfrage gestellt wird, können Sie die Anmeldeschaltfläche deaktivieren - und nur wenn eine Aktualisierung vorgenommen wird, kann die Schaltfläche aktiviert werden - clientseitige Logik.
quelle
Das
424 - Failed Dependency
passt in diesem Fall ganz gut.quelle
RFC4918
tools.ietf.org/html/rfc4918 . 11.4 Seite 78Ich neige mich zu 407. 407 Proxy-Authentifizierung erforderlich Dieser Code ähnelt 401 (nicht autorisiert), gibt jedoch an, dass sich der Client zuerst beim Proxy authentifizieren muss. Der Proxy MUSS ein Proxy-Authenticate-Header-Feld (Abschnitt 14.33) zurückgeben, das eine Herausforderung enthält, die für den Proxy für die angeforderte Ressource gilt. Der Client kann die Anforderung mit einem geeigneten Proxy-Authorization-Header-Feld wiederholen (Abschnitt 14.34). Die HTTP-Zugriffsauthentifizierung wird unter "HTTP-Authentifizierung: Standard- und Digest-Zugriffsauthentifizierung" erläutert. wie Iskander erwähnte.
Es weist den Benutzer am besten darauf hin, wo das Problem liegen könnte. Sie können auch fortfahren und den Proxy-Autorisierungsheader so implementieren, dass er vollständig mit den Spezifikationen übereinstimmt.
Wenn Sie 400 verwenden, kratzt sich Ihr Kunde am Kopf und sucht nach dem, was er beim Erstellen der Anfrage falsch macht.
Die Verwendung von 401 oder 403 ist sinnvoller, um sie für Ihre eigene API-Authentifizierung und -Autorisierung aufzubewahren.
502 weist den Benutzer darauf hin, dass das Problem vorgelagert ist, sodass er möglicherweise hängen bleibt, bis Sie es beheben.
quelle
Ich würde mit 401 stehen. Der 401 401 Unauthorized-Fehler ist ein HTTP-Statuscode. Dies bedeutet, dass die Seite, auf die der Benutzer zugreifen wollte, erst geladen werden kann, wenn sich der Benutzer zum ersten Mal mit einer gültigen Benutzer-ID und einem gültigen Kennwort anmeldet. Wenn sich der Benutzer gerade angemeldet und den Fehler 401 Unauthorized erhalten hat, bedeutet dies, dass die vom Benutzer eingegebenen Anmeldeinformationen aus irgendeinem Grund ungültig waren. In unserem Fall war der von ihnen übermittelte API-Schlüssel ungültig. Es gibt ein Aktivitätsdiagramm, das ich verwendet habe, als ich eine Verwechslung mit den Fehlercodes habe.
Hier unten ist der Link für das gleiche:
https://i.stack.imgur.com/ppsbq.jpg
quelle
In diesem Fall wurde der Zwischenserver erfolgreich protokolliert, und der Upstream-Server weigert sich, die Authentifizierung aufgrund des ungültigen Schlüssels durchzuführen. Es scheint, dass der 502-Code (Bad Gateway) für diese Situation geeignet ist, da dieser Code für einen Server steht, der als Gateway fungiert (Ihr) und eine ungültige Antwort vom Upstream-Server (Drittanbieter) erhält.
quelle