如何与Safari共享NSURLConnection凭据?

时间:2014-11-13 20:17:21

标签: ios nsurlconnection nsurlcredential nsurlcredentialstorage

我尝试拦截链接并登录用户,然后将其发送到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时会收到身份验证质询。

所以问题是,我是否只是在某个地方搞砸了,忘记了一些重要的一点,或者我是否以错误的方式解决这个问题?

1 个答案:

答案 0 :(得分:1)

在iOS 8之前,这是不可能的,但现在具有Shared Web Credentials功能。

  

为您的应用添加com.apple.developer.associated-domains权利。   此权利必须包含您想要的所有域   分享凭证。

     

apple-app-site-association文件添加到您的网站。这个文件必须   包括该网站所有应用程序的应用程序标识符   想要共享凭据,并且必须正确签名。

     

安装该应用后,系统会下载并验证该网站   每个关联域的关联文件。如果   验证成功,应用与域名相关联。

     

应用可以通过调用与任何关联的域共享凭据   SecAddSharedWebCredentialSecRequestSharedWebCredential