为什么即使在WKWebView中设置cookie后,SSO仍不起作用?

时间:2018-10-29 06:29:43

标签: ios cookies webview single-sign-on wkwebview

我有2个应用程序,两个应用程序均使用WKWebview进行SSO登录。两个应用程序都可以单独正常运行。

现在让我们来看看下面的情况。

假设我登录了一个应用程序,从该应用程序检索了WKWebview cookie并在第二个应用程序的WKWebview中设置了该cookie信息。我的期望是SSO应该在第二个应用程序中工作,但它不起作用。

下面是我从第一个应用程序登录后用于从WKwebview检索Cookie的代码

  

扩展名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
    }
} }

下面是我用于在第二个应用程序的WKwebview中设置cookie的代码

 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 :(得分:0)

我觉得您在第二个应用程序 Wkwebview 中做错了自己的Cookie存储。但是您假设这将在 Wkwebview HTTPCookieStorage.shared.setCookie(cookie)中设置cookie。要在第二个应用 Wkwebview 中设置cookie,您应在中设置已登录Cookie Wkwebview 的> httpcookiestore

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

//在这里做任何您想做的事。现在在wkwebview中设置了cookie

})

使用此方法制作Cookie。

let newcookie = HTTPCookie(properties: [
        .domain: "your domain",
        .path: "/",
        .name: "name",
        .value: "value",
        .secure: "FALSE",
        .expires: NSDate(timeIntervalSinceNow: 31556926)
        ])!