我一直在尝试使用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
。为什么不呢?
答案 0 :(得分:2)
仔细阅读the documentation后,我们发现:
Request
上的身份验证方法会在适当时自动向URLCredential
提供URLAuthenticationChallenge
。...
根据您的服务器实施情况,
Authorization
标头也可能是合适的。
似乎我的服务器只接受后一种变体,所以我确实有手动添加标头。 Request.authorizationHeader
可以处理咕噜咕噜的工作。