NSURLConnection - Deaktiviert den Antwortmechanismus für Authentifizierungsanfragen

9

SITUATION

  • Verwenden von AFNetworking (NSURLConnection) für den Zugriff auf meine Server-API
  • Die API benötigt eine Standardauthentifizierung mit dem Token als Benutzername
  • Die API gibt HTTP 401 zurück, wenn das Token ungültig ist
  • Ich habe die Basic Authentication Header vor jeder Anfrage
  • gesetzt
  • Wenn 401 zurückgegeben wird, versuche ich es wie folgt:

    %Vor%

PROBLEM

  • Wenn der Server HTTP 401 mit einer Standardauthentifizierungsanforderung zurückgibt, sendet AFNetworking / NSURLConnection die identische Anforderung zweimal (anfängliche Anforderung und dann als Antwort auf die Authentifizierungsanforderung)
  • Aber wegen des obigen Codes behandle ich das HTTP 401 selbst, das ist völlig unnötig und ich möchte, dass es die Authentifizierungsanfrage nicht mehr automatisch beantwortet

WAS ICH VERSUCHT HABE

  • Wenn Sie mit cancelAuthenticationChallenge: auf willSendRequestForAuthenticationChallenge: antworten, wird der zweite Aufruf abgebrochen, aber anstelle von 401 wird der Fehlercode -1012 (NSURLErrorUserCancelledAuthentication) ausgegeben und die tatsächliche Antwort maskiert

Wie deaktivierst du den Authentifizierungs-Challenge-Response-Mechanismus, damit du die Server-Antwort erhältst, ohne sie zweimal aufzurufen?

    
thejaz 28.06.2013, 06:20
quelle

2 Antworten

9

Sie haben einige Optionen, um die Authentifizierungsbehandlung vollständig anzupassen:

  1. Nutzen Sie setWillSendRequestForAuthenticationChallengeBlock: und setAuthenticationAgainstProtectionSpaceBlock: von der Klasse AFURLConnectionOperation und setzen Sie entsprechende Blöcke, in denen Sie den benötigten Mechanismus anpassen können.

    Die Header enthalten Dokumentation.

  2. Überschreibe connection:willSendRequestForAuthenticationChallenge: in einer Unterklasse von AFURLConnectionOperation . Dadurch wird die vollständige Einrichtung des Authentifizierungsmechanismus in AFNetworking überschrieben.

Beachten Sie, dass Sie die Authentifizierungsanfrage "Server validiert Client-Identität" nicht deaktivieren können - dies ist Teil des Servers. Sie MÜSSEN die korrekten Anmeldeinformationen für die angeforderte Authentifizierungsmethode angeben.

    
CouchDeveloper 05.07.2013, 06:40
quelle
4

Versuchen Sie es.

%Vor%     
Muralikrishna 08.07.2013 11:49
quelle