0

我試圖攔截鏈接並登錄一個用戶,然後將它們發送到Safari並使網頁加載時沒有驗證請求。如何使用Safari共享NSURLConnection憑證?

所以,我在做什麼,到目前爲止...

我註冊了我的應用程序自定義URL方案。稱它爲「myhttp」。現在有人點擊myhttp://secured.com/foo的鏈接(從電子郵件中說出)並運行我的應用程序。應用程序從某個地方抽取用戶的憑證,並用NSURLConnection撥打實際URL。 NSURLConectionDelegate執行connection:didReceiveAuthenticationChallenge,我通過安全層導航罰款。接下來,我嘗試使用UIApplicationopenURL方法加載相同的URL來調出Safari,但我仍然收到驗證檢查。

我認爲這將工作,因爲我閱讀了蘋果文檔中的後續內容。

Credentials stored in persistent storage are kept in the user’s keychain and shared among all apps.

當我檢查NSURLCredentialStorage我可以看到我只是用正確的信息,保護空間,方案等存儲在那裏的憑據,但很明顯,我做錯了什麼或者我不會當我切換到Safari時遇到身份驗證挑戰。

所以問題是,我是不是在某處沿線搞錯了,忘記了一些重要的位置,或者我是以這種錯誤的方式去做的?

回答

1

這在iOS 8之前是不可能的,但現在是Shared Web Credentials功能。

com.apple.developer.associated-domains添加到您的應用程序的權利。 此權利必須包含您要共享憑證的所有域。

添加apple-app-site-association文件到您的網站。該文件必須包含 所需的所有應用程序的應用程序標識符,該應用程序標識符與站點 想要共享憑據並且必須正確簽名。

安裝應用程序時,系統會爲每個關聯域下載並驗證網站 關聯文件。如果 驗證成功,則該應用與該域關聯。

應用程序可以通過調用 SecAddSharedWebCredentialSecRequestSharedWebCredential與任何關聯的域共享憑據。

+0

只是爲了澄清爲什麼會出現這種情況,有關共享憑據的文檔中的註釋非常過時。它僅適用於OS X,不適用於iOS。在OS X中,鑰匙串是共享的,ACL限制哪些應用可以訪問每個項目。如果應用程序要求使用無法訪問的信用,操作系統會要求用戶提供許可。在iOS中,鑰匙串基本上是按應用程序(具有各種例外,例如鑰匙串訪問組)。 – dgatwood