Создайте URLSessionDelegate, который решает две проблемы одновременно (аутентификация NTLM + доверие настраиваемого сервера) - PullRequest
0 голосов
/ 20 апреля 2020

Я использую URLSessionDelegate для решения двух задач:

  1. Пользовательское доверие сертификатов сервера (проверка пользовательской цепочки)
  2. Проверка подлинности NTLM (Windows Проверка подлинности)

Я обнаружил, что оба могут быть решены путем реализации URLSessionDelegate.urlSession(_:didReceive:completionHandler:), где оба вызова заканчиваются созданием URLCredential объекта и вызовом

completionHandler(.useCredential, credential)

Для пользовательских сертификатов сервера я использую

let credential = URLCredential(trust: mySecTrust)

и для NTLM auth я использую

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

Теперь проблема. Я должен связаться с этим сервером, который использует и NTLM-аутентификацию и пользовательскую проверку сертификата сервера. Поэтому мне нужно как-то объединить два объекта URLCredential, чтобы получить один, который имеет собственный объект SecTrust, а также имя пользователя и пароль для аутентификации NTLM. Я не нашел никакого способа добиться этого.

Я также пытался создать делегата, чтобы он решал одну проблему при первом вызове URLSessionDelegate.urlSession(_:didReceive:completionHandler:) и вторую проблему при втором вызове. Но он не работал ни с одним из возможных заказов.

Как правильно объединить SecTrust и учетные данные для входа?

...