ASWebAuthenticationSession get Cookies



我尝试使用ASWebAuthenticationSession与私有身份提供者进行身份验证。

  1. 使用ASWebAuthenticationSession开始认证
  2. 自定义方案的回调被调用
  3. 我需要这些请求的所有cookie来验证我的WKWebView中的用户。回调只发送给我自定义方案的url,而不是请求。

我无法传输自定义方案url中的cookie,因为我达到了url的最大长度

ASWebAuthenticationSession不使用HTTPCookieStorage来存储cookie,而认证?!

session = ASWebAuthenticationSession(url: urlToCall, callbackURLScheme: scheme)
{ callbackURL, error in
let cookie = callbackURL?.absoluteString.split(separator: "=")[1]
print("Session is (cookie)")
//How to get Cookies here?
}

谁有解决方案?

我遇到了同样的问题,不幸的是,没有办法使用ASWebAuthenticationSession

获得您的cookie我的解决方案是使用WKWebView而不是ASWebAuthenticationSession进行身份验证。

这将为您提供实现所需的灵活性,主要是因为您将能够从WebView访问cookie。

主要的区别是,你将需要手动解散WebView,为此,我想说我们必须选择:

  1. 一旦你将origin or callback url传递给你的验证提供者,你将在你的场景委托中接收它,并从那里到达你呈现WebView的代码并取消它。
func scene(
_ scene: UIScene, 
openURLContexts URLContexts: Set<UIOpenURLContext>
) {
print("SCENE-DELEGATE : Callback received")
print(URLContexts)
}
  1. 实现WKNavigationDelegate,并检查重定向URL,直到它匹配您的认证过程中的最终重定向,并从那里取消web视图,这可以在
  2. 中完成:
func webView(
_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void
) {
if navigationAction.request.url?.host == "ssoResult" {
UIApplication.shared.open(navigationAction.request.url!)
<dismissYourWebView>
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}

最后访问cookieWKWebView有它自己的cookie存储,所以你可能不需要做任何其他事情,应该能够打开一个新的WKWebView,最后一个应该已经有cookie了。

注意:要在您的WKWebView中读取cookie,您可以通过:

WKWebsiteDataStore.default().httpCookieStore.getAllCookies { cookies in

}

相关内容

  • 没有找到相关文章

最新更新