2017-02-27 1 views
1

J'ai essayé d'utiliser le support d'authentification de base Alamofire:auth de base avec Alamofire ne fonctionne pas

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

Cependant, je reçois un 403 de mon serveur web.

Si j'ajoute l'en-tête auth mon auto:

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

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

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

Il fonctionne très bien.

En vérifiant response.request!.allHTTPHeaderFields dans le gestionnaire d'achèvement/réponse d'Alamofire, je note qu'il n'y a aucune entrée Authorization. Pourquoi pas?

Répondre

1

Après lecture attentive de the documentation, nous trouvons:

La méthode authenticate sur un Request fournira automatiquement un URLCredential à un URLAuthenticationChallenge le cas échéant.

...

En fonction de l'implémentation du serveur, un en-tête Authorization peut aussi être approprié.

Il semble que mon serveur accepte que cette dernière variante, donc je en effet ont d'ajouter l'en-tête manuellement. Request.authorizationHeader peut prendre soin du travail de grognement.