SFSafariViewController删除OAuth2 Cookie

dun*_*nc4 19 oauth ios uber-api ios9

我有一个iOS应用程序,使用OAuth2在Uber API中进行身份验证UIWebView.升级到iOS 9时,我遇到了ATS阻止登录页面的https请求的问题.然后我为优步登录页面添加了一个例外,但随后注意到登录页面向Facebook,亚马逊网络服务和其他网站发出了几个其他请求,这些请求都被ATS阻止.

我不想维护优步登录页面的例外列表,因为优步可以轻松更改其页面,我的应用程序将没有正确的例外.所以我决定SFSafariViewController试一试.

我能够完成OAuth2进程SFSafariViewController,问题是当身份验证完成时,Uber会存储某种类型的cookie.如果我想验证其他帐户并SFSafariViewController再次启动,则会从之前的身份验证中获取Cookie,并且无法对其他帐户进行身份验证.我UIWebView通过删除cookie来解决这个问题NSHTTPCookieStorage,但我没有看到从中删除cookie的方法SFSafariViewController.

bit*_*tek 5

对于 iOS 9 及更高版本,最佳选择是使用WebKit 框架中可用的WKWebView

它提供了一个WKWebsiteDataStore,可用于删除 webview 使用的 cookie/缓存,例如参见:https : //stackoverflow.com/a/31803708/313113/sf/answers/2274389001/

根据文档:SFSafariViewController与 Safari 共享 cookie 和其他网站数据,因为它在您的应用程序进程之外运行(出于安全原因),您无法从应用程序内部修改它的状态。请参阅此答案:https : //stackoverflow.com/a/34136074/313113来自联系 Apple 客户支持并得到以下回复的人:

SFSafariViewController 在我的应用程序进程之外运行,为了确保安全,我的应用程序不能修改 SFSafariViewController 的状态。换句话说,我的应用程序无法清除 SFSafariViewController 存储的凭据。

  • `WKWebView` 将不起作用,因为我需要为 Uber 登录页面发出的每个 HTTP 请求指定一个域。鉴于页面不是由我维护并且很可能会更改,使用 ATS 异常很容易崩溃。这就是为什么我必须切换到`SFSafariViewController`。 (4认同)
  • 我想使用 SFAuthenticationSession 但无法删除 cookie,所以我最终使用 WKWebView 并自己处理东西...... (3认同)