Почему SSO не работает даже после установки cookie в WKWebView? - PullRequest
0 голосов
/ 29 октября 2018

У меня 2 приложения, оба приложения используют WKWebview для единого входа в систему. Оба приложения работают нормально по отдельности.

Теперь давайте рассмотрим следующий сценарий.

Предположим, я вошел в одно приложение, получил cookie-файл WKWebview из этого приложения и установил эту информацию о cookie-файлах в WKWebview 2-го приложения. Я ожидаю, что SSO должен работать во 2-м приложении, но он не работает.

Ниже приведен код, который я использую для получения файлов cookie из WKwebview после входа в систему из первого приложения

расширение WKWebView {

@available(iOS 11.0, *)
private var httpCookieStore: WKHTTPCookieStore  {
    return WKWebsiteDataStore.default().httpCookieStore
}

func getCookies(for domain: String? = nil, completion: @escaping ([String : Any])->())  {
    var cookieDict = [String : AnyObject]()
    if #available(iOS 11.0, *) {
        httpCookieStore.getAllCookies { (cookies) in
            for cookie in cookies {
                print("cookie iterator started")
                print("cookie=======\(cookie)")

                if let domain = domain {
                    if cookie.domain.contains(domain) {
                        cookieDict[cookie.name] = cookie.properties as AnyObject?
                    }
                } else {
                    cookieDict[cookie.name] = cookie.properties as AnyObject?
                }
            }
            completion(cookieDict)
        }
    } else {
        // Fallback on earlier versions
    }
} }

Ниже приведен код, который я использую для настройки cookie в WKwebview 2-го приложения

 let cookie= HTTPCookie(properties: [
              .domain: "dev.mycompany.net",
              .path: "/",
              .name: "PF",
              .value: "327y48234g2hgdhjwedguyw23oSYVbVLwf9",
              .secure: "TRUE",
             .version: 1,
             .expires: NSDate(timeIntervalSinceNow: (562225018+1000000))
              ])!

HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always
HTTPCookieStorage.shared.setCookie(cookie)

1 Ответ

0 голосов
/ 29 октября 2018

Я чувствую, что вы ошибаетесь во втором приложении Wkwebview имеет собственное хранилище файлов cookie. но вы предполагаете, что это установит cookie в Wkwebview HTTPCookieStorage.shared.setCookie(cookie). Чтобы установить cookie во 2-м приложении Wkwebview , вы должны настроить свой файл cookie для входа в систему в httpcookiestore из Wkwebview .

self.webview.configuration.websiteDataStore.httpCookieStore.setCookie("your http cookie here", completionHandler: {

// делай что хочешь здесь. теперь cookie установлен в wkwebview

})

Используйте этот метод для создания cookie.

let newcookie = HTTPCookie(properties: [
        .domain: "your domain",
        .path: "/",
        .name: "name",
        .value: "value",
        .secure: "FALSE",
        .expires: NSDate(timeIntervalSinceNow: 31556926)
        ])!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...