(Heredado) Error de autenticación de iOS: no se encuentra adobepass.ios.app ios-authentication-error-adobepass.ios.app-cannot-be-found
Problema issue
El usuario está siguiendo el flujo de autenticación y, después de que haya escrito correctamente sus credenciales con su proveedor, se le redirigirá a una página de error, a una página de búsqueda o a otra página personalizada que le informará de que no se pudo encontrar o resolver adobepass.ios.app.
Explicación explanation
En iOS, adobepass.ios.app se usa como dirección URL de redirección final para indicar que el flujo de AuthN ha finalizado. En este punto, la aplicación debe realizar una solicitud al AccessEnabler para obtener el token de AuthN y finalizar el flujo de AuthN.
El problema es que adobepass.ios.app no existe realmente y almacenará en déclencheur un mensaje de error en webView. Las versiones anteriores de iOS DemoApp daban por hecho que este error siempre se activaría al final del flujo de AuthN y se configuraba para gestionarlo en consecuencia (indidFailLoadWithError).
Nota: Este problema se ha corregido en versiones posteriores de DemoApp (incluida en la descarga de iOS SDK).
Desafortunadamente, esta suposición NO es correcta. Hay algunos servidores DNS o proxy "inteligentes" que no solo transmitirán el error generado, sino que, en su lugar, harán una de las siguientes acciones:
- Crear una página de error personalizada
- Reenviar a una página de búsqueda o a algún otro tipo de página o portal de cliente.
En estos casos, la respuesta que vuelva a iOS webView será una respuesta perfectamente válida en lo que respecta a webView y NO almacenará en déclencheur el error del que dependía la antigua DemoApp.
Solución solution
NO realice la misma suposición que hace DemoApp. En su lugar, intercepte la solicitud antes de que se ejecute (en shouldStartLoadWithRequest) y gestiónela adecuadamente.
Ejemplo de cómo interceptar la solicitud antes de ejecutarla:
- (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;
}
Algunas cosas que hay que tener en cuenta:
- NUNCA use
adobepass.ios.appdirectamente en ningún lugar del código. En su lugar, utilice la constanteADOBEPASS_REDIRECT_URL - La instrucción
return NO;evitará que la página se cargue - Asegúrese de que la llamada a
getAuthenticationTokense realice una vez y solo una vez en el código. Si llama varias veces agetAuthenticationToken, se obtendrán resultados no definidos.