Как поделиться учетными данными NSURLConnection с Safari?
Я пытаюсь перехватить ссылку и войти в систему пользователя, затем отправить его в Safari и загрузить страницу без запроса аутентификации.
Итак, что я делаю до сих пор...
Я зарегистрировал собственную схему URL для своего приложения. Назовите это "myhttp". Теперь кто-то нажимает на ссылку (скажем, из электронного письма) myhttp://secured.com/foo, и мое приложение запускается. Приложения откуда-то извлекают учетные данные пользователя и вызывают реальный URL с NSURLConnection
, NSURLConectionDelegate
инвентарь connection:didReceiveAuthenticationChallenge
и я хорошо перемещаюсь через слой безопасности. Затем я пытаюсь загрузить тот же URL, используя UIApplication
openURL
способ вызвать Safari, но я все еще получаю проверку подлинности.
Я думал, что это будет работать, потому что я прочитал следующее в документации Apple.
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
файл на ваш сайт. Этот файл должен содержать идентификаторы приложений для всех приложений, с которыми сайт хочет поделиться учетными данными, и он должен быть надлежащим образом подписан.Когда приложение установлено, система загружает и проверяет файл ассоциации сайта для каждого из связанных доменов. Если проверка прошла успешно, приложение связано с доменом.
Приложение может обмениваться учетными данными с любыми связанными доменами, вызывая
SecAddSharedWebCredential
а такжеSecRequestSharedWebCredential
,