Аутентификация Swift iOS Digest возвращает 401 - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь использовать конечную точку API, которая аутентифицируется с помощью дайджест-аутентификации. Моя цель состоит в том, чтобы не использовать AlamoFire и вместо этого использовать стандартный URLSession.

Сначала я создаю запрос и запускаю задачу

var request = URLRequest(url: url)
let task = urlSession?.dataTask(with: request, completionHandler: { (data, response, error) in
        // hide network activity
        DispatchQueue.main.async {
            UIApplication.shared.isNetworkActivityIndicatorVisible = false
        }

        // log success/error
        if let method = request.httpMethod, let url = response?.url?.obfuscateForPII() {
            if let error = error {
                DDLogError("\(method) \(url) \(error.localizedDescription)")
            } else {
                DDLogInfo("Success \(method) \(url)")
            }
        }

        // pass endpoint results to completion block
        completionBlock(data, response, error)
    })

    // run the task
    if let task = task {
        task.resume()
    }

Мой класс реализует URLSessionDelegate, в котором обрабатывается задача

func urlSession(_ session: URLSession,
                didReceive challenge: URLAuthenticationChallenge,
                completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {

    if challenge.previousFailureCount == 0 {
        let keyChainStore = UICKeyChainStore.init(service: kKeychainStore)

        if let username = UserDefaults.standard.value(forKey: kUsername) as? String,
            let password = keyChainStore[kPassword] {

            let credentials = URLCredential(user: username, password: password, persistence: .forSession)

            completionHandler(.useCredential, credentials)
        }

    } else {
        completionHandler(.performDefaultHandling, nil)
    }
}

Моя проблема в том, что когда я достигаю конечной точки, я получаю ответ 401. Когда я просматриваю ответ, возвращающийся, я вижу заголовок www-authenticate, но он не содержит правильную информацию о дайджесте.

Как правильно использовать конечную точку с проверкой подлинности дайджеста, не полагаясь на AlamoFire?

...