Я использую URLSessionDelegate
для решения двух задач:
- Пользовательское доверие сертификатов сервера (проверка пользовательской цепочки)
- Проверка подлинности 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
и учетные данные для входа?