Alamofire无法处理身份验证挑战

4

使用 Alamofire,我注意到以下代码未被断点命中。我建立了一个连接,但是出现了以下错误:(Error Domain=NSURLErrorDomain Code=-1200 "发生 SSL 错误,无法建立到服务器的安全连接。" UserInfo=0x1741b3f60 {_kCFStreamErrorCodeKey=-9806, NSLocalizedRecoverySuggestion=是否仍要连接到服务器?, NSUnderlyingError=0x17484b8e0 "操作无法完成。(kCFErrorDomainCFNetwork 错误 -1200。)", NSLocalizedDescription=发生 SSL 错误,无法建立到服务器的安全连接。

func connection(urlRequest:NSURLRequest,rest:RESTFull?, completion: (AnyObject?, NSError?)->Void){
    let req = request(urlRequest).responseJSON(options: .AllowFragments) { (_, response, data, error) -> Void in
        if let actualData: AnyObject = data {
            completion(actualData, nil)
        }else {
            completion(nil, error)
        }
    }

    req.delegate.taskDidReceiveChallenge = { session,_, challenge in
        println("Got challenge: \(challenge), in session \(session)")

        var disposition: NSURLSessionAuthChallengeDisposition = .UseCredential
        var credential: NSURLCredential = NSURLCredential()

        if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust){
            disposition = NSURLSessionAuthChallengeDisposition.UseCredential
            credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!)
        }
        return(disposition, credential)
    }
}
1个回答

2
您不能为Request类的taskDidReceiveChallenge设置值。您可以使用Manager类的委托代替。
Manager.sharedInstance.delegate.taskDidReceiveChallenge = { session, _, challenge in
    print("Got challenge: \(challenge), in session \(session)")
    var disposition: NSURLSessionAuthChallengeDisposition = .UseCredential
    var credential: NSURLCredential = NSURLCredential()

    if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust){
        disposition = NSURLSessionAuthChallengeDisposition.UseCredential
        credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!)
    }
    return(disposition, credential)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接