Как поделиться учетными данными NSURLConnection с Safari?

Я пытаюсь перехватить ссылку и войти в систему пользователя, затем отправить его в Safari и загрузить страницу без запроса аутентификации.

Итак, что я делаю до сих пор...

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

Другие вопросы по тегам