使用Alamofire的基本身份验证不起作用

时间:2017-02-27 08:47:42

标签: swift http-headers alamofire basic-authentication

我一直在尝试使用Alamofire的基本身份验证支持:

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

但是,我从我的网络服务器获得了403。

如果我添加auth标头我自己:

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

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

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

它运作得很好。

在Alamofire的完成/响应处理程序中检查response.request!.allHTTPHeaderFields,我注意到没有条目Authorization。为什么不呢?

1 个答案:

答案 0 :(得分:2)

仔细阅读the documentation后,我们发现:

  

Request上的身份验证方法会在适当时自动向URLCredential提供URLAuthenticationChallenge

     

...

     

根据您的服务器实施情况,Authorization标头也可能是合适的。

似乎我的服务器只接受后一种变体,所以我确实手动添加标头。 Request.authorizationHeader可以处理咕噜咕噜的工作。