2017-02-27 4 views
1

Ich habe Alamofire Grundauthentifizierungsunterstützung zu verwenden versucht:Grund Auth mit Alamofire funktioniert nicht

self.sessionManager.request(request) 
    .authenticate(user: user, 
        password: passwordHashAsHex) 

Allerdings bekomme ich einen 403 von meinem Webserver.

Wenn ich den Auth-Header mich selbst hinzufügen:

let authString = "\(user):\(passwordHashAsHex)" 

guard let auth = authString.data(using: String.Encoding.utf8) else { 
     throw ... 
} 

request.setValue("Basic \(auth.base64EncodedString())", 
    forHTTPHeaderField: "Authorization" 
) 

Es funktioniert gut.

Überprüfen response.request!.allHTTPHeaderFields in Alamofire Abschluss-/Antwort-Handler, stelle fest, dass es keinen Eintrag Authorization gibt. Warum nicht?

Antwort

1

Bei sorgfältiger Lektüre the documentation finden wir:

Die authenticate-Methode auf einem Request automatisch ein URLCredential einen URLAuthenticationChallenge bei Bedarf zur Verfügung stellt.

...

auf Ihrer Server-Implementierung Je ein Authorization Header kann auch sinnvoll sein.

Es scheint, dass mein Server nur die letztere Variante akzeptiert, so dass ich haben in der Tat den Header manuell hinzufügen. Request.authorizationHeader kann auf die Grunzarbeit aufpassen.