我尝试拦截链接并登录用户,然后将其发送到Safari,并在没有身份验证请求的情况下加载页面。
那么,到目前为止我做了什么......
我为自己的应用注册了自定义网址方案。称之为" myhttp"。现在有人点击了myhttp://secured.com/foo的链接(比如来自电子邮件)并且我的应用程序运行了。应用从某个位置提取用户的凭据,并使用NSURLConnection
调用真实网址。 NSURLConectionDelegate
实现了connection:didReceiveAuthenticationChallenge
,我可以很好地浏览安全层。接下来,我尝试使用UIApplication
openURL
方法加载相同的网址以启动Safari,但我仍然会收到身份验证检查。
我认为这样可行,因为我在Apple文档中阅读了以下内容。
Credentials stored in persistent storage are kept in the user’s keychain and shared among all apps.
当我检查NSURLCredentialStorage
时,我可以看到我刚刚使用的凭据存储了正确的信息,保护空间,方案等,但显然我做错了什么或者我不会&#39 ;当我切换到Safari时会收到身份验证质询。
所以问题是,我是否只是在某个地方搞砸了,忘记了一些重要的一点,或者我是否以错误的方式解决这个问题?
答案 0 :(得分:1)
在iOS 8之前,这是不可能的,但现在具有Shared Web Credentials功能。
为您的应用添加
com.apple.developer.associated-domains
权利。 此权利必须包含您想要的所有域 分享凭证。将
apple-app-site-association
文件添加到您的网站。这个文件必须 包括该网站所有应用程序的应用程序标识符 想要共享凭据,并且必须正确签名。安装该应用后,系统会下载并验证该网站 每个关联域的关联文件。如果 验证成功,应用与域名相关联。
应用可以通过调用与任何关联的域共享凭据
SecAddSharedWebCredential
和SecRequestSharedWebCredential
。