(旧版)iOS身份验证错误 — 找不到adobepass.ios.app ios-authentication-error-adobepass.ios.app-cannot-be-found
NOTE
此页面上的内容仅供参考。 使用此API需要来自Adobe的当前许可证。 不允许未经授权使用。
IMPORTANT
确保随时了解汇总在产品公告页中的最新Adobe Pass身份验证产品公告和停用时间表。
问题 issue
用户正在经历身份验证流程,当他们成功与提供商输入凭据后,他们将被重定向回错误页面、搜索页面或其他自定义页面,告知他们无法找到/解决adobepass.ios.app。
说明 explanation
在iOS上,adobepass.ios.app用作最终重定向URL,以指示AuthN流已完成。 此时,应用程序需要向AccessEnabler发出请求,以获取身份验证令牌并完成身份验证流程。
问题是adobepass.ios.app实际上不存在,将在webView中触发错误消息。 旧版iOS DemoApp假定此错误将始终在AuthN流结束时触发,并设置为相应地处理它(indidFailLoadWithError)。
注意:此问题已在DemoApp的更高版本中修复(包含在iOS SDK下载中)。
不幸的是,这一假设并不正确。 有一些所谓的“智能” DNS或代理服务器不仅传递所引发的错误,而且会执行以下操作之一:
- 创建自定义错误页面
- 转发到搜索页面或其他类型的客户页面或门户。
在这些情况下,返回到iOS webView的响应将是对webView而言完全有效的响应,并且不会触发旧DemoApp所依赖的错误。
解决方案 solution
请勿做出与DemoApp相同的假设。 相反,在执行请求之前(在shouldStartLoadWithRequest中)截取该请求并进行适当处理。
在执行请求之前截获请求的示例:
- (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;
}
需要注意以下几点:
- 绝不要在代码中的任意位置直接使用
adobepass.ios.app。 改为使用常量ADOBEPASS_REDIRECT_URL return NO;语句将阻止加载页面- 绝对确保代码中只调用一次
getAuthenticationToken调用。 多次调用getAuthenticationToken将导致未定义的结果。
recommendation-more-help
3f5e655c-af63-48cc-9769-2b6803cc5f4b