проблема с автоматическим входом в систему с HTTPS-сайта с ненадежным SSL-сертификатом в Swift

Я столкнулся с трудностями при входе на сайт HTTPS с ненадежным SSL-сертификатом в быстром режиме. Я могу просмотреть страницу внутри своего UIWebView, используя методы NSURLConnectionDelegate. Я могу автоматически войти на этот веб-сайт с помощью веб-браузера, например: URL - https://mywebsite.com:8003/home.html?session_id=sessionVariable . Но не из UIWEbView

Вот мой код внутри ViewDidLoad:

 let websiteURL = "https://mywebsite.com:8003/home.html?session_id=\(Session_Id)"

        print(websiteURL)
        let url = NSURL (string: websiteURL)
        let urlRequest = NSURLRequest(URL: url!)
        let urlConnection:NSURLConnection = NSURLConnection(request: urlRequest, delegate: self)!
        self.webviewInstance.loadRequest(urlRequest)

Мои функции делегата

func connection(connection: NSURLConnection, canAuthenticateAgainstProtectionSpace protectionSpace: NSURLProtectionSpace) -> Bool{
    print("canAuthenticateAgainstProtectionSpace method Returning True")
    return true
}


func connection(connection: NSURLConnection, didReceiveAuthenticationChallenge challenge: NSURLAuthenticationChallenge){

    print("did autherntcationchallenge = \(challenge.protectionSpace.authenticationMethod)")

    if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust  {
        print("send credential Server Trust")
        let credential = NSURLCredential(forTrust: challenge.protectionSpace.serverTrust!)
        challenge.sender!.useCredential(credential, forAuthenticationChallenge: challenge)

    }else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodHTTPBasic{
        print("send credential HTTP Basic")
        let defaultCredentials: NSURLCredential = NSURLCredential(user: "username", password: "password", persistence:NSURLCredentialPersistence.ForSession)
        challenge.sender!.useCredential(defaultCredentials, forAuthenticationChallenge: challenge)

    }else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodNTLM{
        print("send credential NTLM")

    } else{
        challenge.sender!.performDefaultHandlingForAuthenticationChallenge!(challenge)
    }
}

Я добавил изменения в свой файл plist для ключей NSAppTransportSecurity , NSAllowsArbitraryLoads и т. д.

Я мог бы взаимодействовать с вызовами JSON с этим сервером. Но автоматический вход из webView не работает. Пожалуйста посоветуй.


person Vinod    schedule 24.06.2016    source источник


Ответы (1)


Эти методы делегата не вызываются, за исключением запросов, которые вы создаете сами, и я не думаю, что файлы cookie также используются совместно между веб-представлениями и обычными запросами приложений.

Лучше всего было бы создать собственный NSURLProtocol, который перехватывает запросы http/https (из веб-представления и в других местах), добавляет собственный заголовок (чтобы вы могли распознавать повторно отправленные запросы всякий раз, когда ваш класс протокола снова их видит), а затем повторно отправляет запрос, используя ваш собственный объект NSURLConnection.

Подробнее см. в разделе Использование пользовательской схемы URL с UIWebView.

person dgatwood    schedule 02.08.2016