我正在尝试使用ASWebAuthenticationSession与私有身份提供程序进行身份验证。
1.使用ASWebAuthenticationSession进行身份验证开始
1.调用了自定义方案的回调
1.我需要此请求的所有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?
}
有人有解决办法吗?
1条答案
按热度按时间xesrikrc1#
我遇到了同样的问题,不幸的是没有办法使用
ASWebAuthenticationSession
获取您的cookie我的解决方案是使用
WKWebView
而不是ASWebAuthenticationSession
进行身份验证。这将为您提供实现所需功能的灵活性,主要是因为您可以从
WebView
访问Cookie。主要的区别是,你需要手动关闭WebView,为此我想说我们必须选择:
1.将
origin or callback url
传递给身份验证提供程序后,您将在场景委托中接收它,并从那里到达您要呈现WebView的代码并将其关闭。1.实现
WKNavigationDelegate
,并检查重定向URL,直到它与验证过程中的最终重定向匹配,并从那里关闭Web视图,这可以在以下位置完成:最后,要访问cookie,
WKWebView
有自己的cookie存储,所以你可能不需要做任何其他事情,应该能够打开一个新的WKWebView
,最后一个应该已经有cookie了。注意:要读取WKWebView中的Cookie,您可以通过以下方式执行: