2015-09-22 12 views
12

Ich habe eine iOS-Anwendung, die mit Uber-API mit OAuth2 in einem UIWebView authentifiziert. Beim Upgrade auf iOS 9 liefere ich das Problem, dass ATS die https-Anfrage für die Anmeldeseite blockiert. Ich habe dann eine Ausnahme für die Uber-Login-Seite hinzugefügt, aber dann bemerkt, dass die Login-Seite mehrere Anfragen an Facebook, Amazon Web Services und andere Webseiten stellt, die alle von ATS blockiert werden.SFSafariViewController Entfernen OAuth2 Cookie

Ich möchte nicht eine Liste von Ausnahmen für die Uber-Login-Seite pflegen müssen, da Uber kann einfach ihre Seite ändern und meine App wird nicht die richtigen Ausnahmen haben. Also habe ich beschlossen, SFSafariViewController eine Chance zu geben.

Ich bin in der Lage, OAuth2 Prozess mit der SFSafariViewController abzuschließen, ist das Problem, gibt es eine Art von Cookie von Uber gespeichert wird, wenn die Authentifizierung abgeschlossen ist. Wenn ich ein anderes Konto authentifizieren möchte und die SFSafariViewController erneut aufrufen, wird das Cookie von der vorherigen Authentifizierung übernommen und es besteht keine Möglichkeit, ein anderes Konto zu authentifizieren. Ich habe das mit der UIWebView durch Löschen des Cookies durch NSHTTPCookieStorage umgehen, aber ich sehe keine Möglichkeit, den Cookie von SFSafariViewController zu löschen.

+0

Haben Sie es geschafft, dies zu lösen? Ich habe das gleiche Problem. – goldengil

+0

Ich habe keine Lösung zum Entfernen des Cookies gefunden. Ich habe meine App geändert, um das OAuth-Token beim Abmelden zu sperren, sodass das gespeicherte OAuth-Cookie nicht mehr gültig war. – duncanc4

Antwort

0

Für iOS 9 und weiter die beste Wahl ist, um die WKWebView Klasse in den WebKit Framework

zu verwenden, die ein WKWebsiteDataStore liefert, die verwendet werden können Cookies/Cache-Speicher von der Webansicht verwendet, um zu löschen, siehe zum Beispiel: https://stackoverflow.com/a/31803708/313113 oder https://stackoverflow.com/a/32491271/313113

nach der Dokumentation: SFSafariViewController Aktien Cookies und andere Website-Daten mit Safari und weil es läuft außerhalb Prozess Ihrer App (aus Sicherheitsgründen) Sie nicht modifizieren Zustand ist aus Ihrem App. Siehe diese Antwort: https://stackoverflow.com/a/34136074/313113 von jemandem, der Apple-Kunden-Support kontaktiert und bekam folgende Antwort:

SFSafariViewController läuft außerhalb meiner App-Prozess und um zu meiner App zu sichern ändern kann nicht SFSafariViewController des Staates. In anderen Worten, meine App kann Anmeldeinformationen nicht löschen, die von SFSafariViewController gespeichert werden.

+2

'WKWebView' wird nicht funktionieren, da ich dann eine Domäne für jede HTTP-Anfrage angeben muss, die von der Uber-Login-Seite gemacht wird. Da die Seite von mir nicht gepflegt wird und sich höchstwahrscheinlich ändern wird, wird die Verwendung von ATS-Ausnahmen leicht zusammenbrechen. Deshalb musste ich auf 'SFSafariViewController' wechseln. – duncanc4

0

Also ich lief in das gleiche Problem und sah Ihre Frage bei der Suche nach, wie das zu lösen. In meinem Fall war die beste Lösung, die ich mir ausgedacht hatte, das Abmelden in der App durchzuführen und dann einen SFSafariViewController zu präsentieren, der auf unsere Abmelde-URL zeigte. Früher habe ich dann dies die SFSafariViewController so schnell zu schließen, wie es geladen Geographie:

extension AlertsTableViewController: SFSafariViewControllerDelegate { 

    public func safariViewController(_ controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) { 
     if controller == logoutSVC { 
      controller.dismiss(animated: false) 
     } 
    } 

} 

ich die SFSafariViewController in logoutSVC gespeichert, so dass nur ich diesen Code ausführen, wenn dies der Abmelde SFSafariViewController ist. In Ihrem Fall klingt es so, als hätten Sie gerade einen API-Aufruf ausgeführt, um das OAuth-Token zu entziehen, das ein wenig netter ist, da es dem Benutzer überhaupt nicht angezeigt wird, aber das ist gut für Fälle, in denen Sie keinen solchen Zugriff haben. Noch eine Sache, aus irgendeinem Grund musste ich aus irgendeinem Grund die Methode "Ablehnen" (animiert: falsch) auf dem SFSafariViewController anstelle des aktuellen aktuellen UIViewController aufrufen. Ich brauchte eine Sekunde, um herauszufinden, warum es für mich nicht funktionierte.

Verwandte Themen