(Legacy) iOS-Authentifizierungsfehler - adobepass.ios.app wurde nicht gefunden ios-authentication-error-adobepass.ios.app-cannot-be-found
Problem issue
Der Benutzer durchläuft den Authentifizierungsfluss und wird nach der erfolgreichen Eingabe der Anmeldeinformationen bei seinem Anbieter entweder zurück zu einer Fehlerseite, zu einer Suchseite oder zu einer anderen benutzerdefinierten Seite weitergeleitet, wo er darüber informiert wird, dass adobepass.ios.app nicht gefunden/aufgelöst werden konnte.
Erklärung explanation
In iOS wird adobepass.ios.app als endgültige Umleitungs-URL verwendet, um anzugeben, dass der AuthN-Fluss abgeschlossen ist. An dieser Stelle muss die App eine Anfrage an AccessEnabler stellen, um das AuthN-Token abzurufen und den AuthN-Fluss abzuschließen.
Das Problem besteht darin, dass adobepass.ios.app nicht wirklich existiert und eine Fehlermeldung im webView Trigger. In älteren Versionen der iOS DemoApp wurde davon ausgegangen, dass dieser Fehler immer am Ende des AuthN-Flusses ausgelöst wird, und für die entsprechende Behandlung eingerichtet (indidFailLoadWithError).
Hinweis: Dieses Problem wurde in späteren Versionen der DemoApp behoben (im iOS SDK-Download enthalten).
Leider ist diese Annahme NICHT korrekt. Es gibt einige so genannte „intelligente“ DNS- oder Proxy-Server, die den ausgelösten Fehler nicht einfach weitergeben, sondern stattdessen einen der folgenden Schritte ausführen:
- Erstellen einer benutzerdefinierten Fehlerseite
- Weiterleiten an eine Suchseite oder einen anderen Typ von Kundenseite oder Portal.
In diesen Fällen ist die Antwort, die an die iOS-WebView zurückgegeben wird, eine vollkommen gültige Antwort, soweit die WebView betroffen ist, und führt NICHT zum Trigger des Fehlers, von dem die alte DemoApp abhängig war.
Lösung solution
Machen Sie NICHT die gleiche Annahme, die die DemoApp macht. Stattdessen sollten Sie die Anfrage abfangen, bevor Sie ausgeführt wird (in shouldStartLoadWithRequest), und sie entsprechend verarbeiten.
Beispiel für das Abfangen der Anforderung vor ihrer Ausführung:
- (BOOL)webView:(UIWebView*)localWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *absolutePath = [[request URL] absoluteString];
if ([absolutePath isEqualToString:ADOBEPASS_REDIRECT_URL] && ![APP_DELEGATE getAuthenticationWasCalled]) {
// user was logged ok => call getAuthenticationToken()
[APP_DELEGATE setGetAuthenticationWasCalled:YES];
[[APP_DELEGATE accessEnabler] getAuthenticationToken];
return NO;
}
return YES;
}
Beachten Sie Folgendes:
- Verwenden Sie
adobepass.ios.appNIE direkt an einer Stelle im Code. Verwenden Sie stattdessen die konstanteADOBEPASS_REDIRECT_URL - Die
return NO;-Anweisung verhindert das Laden der Seite - Stellen Sie sicher, dass der
getAuthenticationTokenAufruf nur einmal im Code aufgerufen wird. Mehrere Aufrufe vongetAuthenticationTokenführen zu undefinierten Ergebnissen.