Dies ist eine konzeptionelle Frage.
Ich habe eine Client- (mobile) Anwendung, die eine Anmeldeaktion für einen RESTful-Webdienst unterstützen muss. Da der Webdienst RESTful ist, bedeutet dies, dass der Client einen Benutzernamen / ein Kennwort vom Benutzer akzeptiert, diesen Benutzernamen / dieses Kennwort mit dem Dienst überprüft und dann nur daran denkt, diesen Benutzernamen / dieses Kennwort bei allen nachfolgenden Anforderungen zu senden.
Alle anderen Antworten in diesem Webdienst werden in einem JSON-Format bereitgestellt.
Die Frage ist, wenn ich den Webdienst einfach abfrage, um herauszufinden, ob ein bestimmter Benutzername / ein bestimmtes Kennwort gültig ist, ob der Webdienst immer mit JSON-Daten antwortet, die mir mitteilen, ob er erfolgreich oder nicht erfolgreich ist, oder ob er HTTP 200 mit guten Anmeldeinformationen und HTTP zurückgibt 401 bei schlechten Anmeldeinformationen.
Der Grund, den ich frage, ist, dass einige andere RESTful-Dienste 401 für fehlerhafte Anmeldeinformationen verwenden, selbst wenn Sie nur fragen, ob die Anmeldeinformationen gültig sind. Nach meinem Verständnis von 401-Antworten handelt es sich jedoch um eine Ressource, auf die Sie ohne gültige Anmeldeinformationen keinen Zugriff haben sollten. Die Anmelderessource SOLLTE jedoch für jedermann zugänglich sein, da der gesamte Zweck der Anmelderessource darin besteht, Ihnen mitzuteilen, ob Ihre Anmeldeinformationen gültig sind.
Anders ausgedrückt, es scheint mir, dass eine Anfrage wie:
myservice.com/this/is/a/user/action
sollte 401 zurückgeben, wenn falsche Anmeldeinformationen angegeben werden. Aber eine Anfrage wie:
myservice.com/are/these/credentials/valid
sollte niemals 401 zurückgeben, da diese bestimmte URL (Anfrage) mit oder ohne gültige Anmeldeinformationen autorisiert ist.
Ich würde gerne einige berechtigte Meinungen dazu hören. Was ist die Standardmethode, um damit umzugehen, und ist die Standardmethode, um damit umzugehen, logisch angemessen?
authentication is required and has failed or has not yet been provided
gilt auch, da Sie nicht nach der Gültigkeit der Anmeldeinformationen fragen, sondern nach einer bestimmten Ressource, die auf den von Ihnen angegebenen Anmeldeinformationen basiert.401 sollte nur gesendet werden, wenn die Anforderung ein Autorisierungsheaderfeld benötigt und die Autorisierung fehlschlägt. Da für die Login-API keine Autorisierung erforderlich ist, ist 401 meiner Meinung nach der falsche Fehlercode
Gemäß dem Standard hier https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
* 10.4.2 401 Nicht autorisiert
Die Anforderung erfordert eine Benutzerauthentifizierung. Die Antwort MUSS ein WWW-Authenticate-Headerfeld (Abschnitt 14.47) enthalten, das eine Herausforderung enthält, die für die angeforderte Ressource gilt. Der Client kann die Anforderung mit einem geeigneten Feld für den Autorisierungsheader wiederholen (Abschnitt 14.8). Wenn die Anforderung bereits Berechtigungsnachweise enthielt, zeigt die Antwort 401 an, dass die Berechtigung für diese Anmeldeinformationen verweigert wurde. Wenn die 401-Antwort dieselbe Herausforderung wie die vorherige Antwort enthält und der Benutzeragent bereits mindestens einmal versucht hat, sich zu authentifizieren, MUSS dem Benutzer die Entität angezeigt werden, die in der Antwort angegeben wurde, da diese Entität möglicherweise relevante Diagnoseinformationen enthält. Die HTTP-Zugriffsauthentifizierung wird unter "HTTP-Authentifizierung: Standard- und Digest-Zugriffsauthentifizierung" [43] erläutert. *
quelle
Geben Sie 409 mit einer korrekten Fehlermeldung zurück.
quelle