У меня 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)