Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека Разработчика iOS

Разработчик

Ссылка концепции безопасности совместно используемая веб-ссылка учетных данных

Опции
Развертывание Target:

На этой странице
Язык:

Совместно используемая веб-ссылка учетных данных

Наследование


Не применимый

Соответствует


Не применимый

Оператор импорта


Swift

import Security

Objective C

@import Security;

Совместно используемые веб-учетные данные являются интерфейсом программирования, позволяющим собственным приложениям для iOS совместно использовать учетные данные со своими дубликатами веб-сайта. Например, пользователь может войти на сайт в Safari, введя имя пользователя и пароль, и сохранить те учетные данные с помощью Цепочки для ключей iCloud. Позже, пользователь может выполнить исходное приложение от того же разработчика, и вместо приложения, требующего, чтобы пользователь повторно вошел в имя пользователя и пароль, совместно использованные веб-учетные данные предоставляют ему доступ к учетным данным, вводившимся ранее в Safari. Пользователь может также создать новые учетные записи, пароли обновления, или удалить ее учетную запись из приложения. Эти изменения тогда сохраняются и используются Safari.

Совместно используемые веб-учетные данные, которые API определяет Базовые Основанные на основе функции для того, чтобы сохранить и запросить, совместно использовали основанные на пароле учетные данные. Существует четыре шага к совместному использованию учетных данных:

  1. Добавьте a com.apple.developer.associated-domains право на Ваше приложение. Это право должно включать все домены, с которыми Вы хотите совместно использовать учетные данные.

  2. Добавьте apple-app-site-association файл к Вашему веб-сайту. Этот файл должен включать идентификаторы приложений для всех приложений, с которыми сайт хочет совместно использовать учетные данные, и это должно быть должным образом подписано.

  3. Когда приложение установлено, система загружает и проверяет файл ассоциации сайта для каждого из его связанных доменов. Если проверка успешна, приложение связано с доменом.

  4. Приложение может совместно использовать учетные данные с любыми связанными доменами путем вызова SecAddSharedWebCredential и SecRequestSharedWebCredential.

Добавление связанного права доменов

Для включения совместно использованных учетных данных в приложении добавьте com.apple.developer.associated-domains ключ к правам Вашего приложения. Можно добавить это право с помощью области возможностей цели (см. рисунок 1).

Включайте список всех доменов, с которыми Ваше приложение хочет совместно использовать учетные данные. Каждая запись использует следующий формат:

<service>:<fully qualified domain>[:port number]

Для совместно используемых веб-учетных данных всегда используйте webcredentials служба.

Рисунок 1Adding связанные домены для Вашего приложения image: ../Art/Screen Shot 2014-11-06 at 12.25.03 PM_2x.png

Добавление файла ассоциации сайта

Поместите названный файл JSON со знаком apple-app-site-association на веб-сайте, соответствующем один из доменов в связанном праве доменов Вашего приложения. URL файла должен соответствовать следующий формат:

https://<fully qualified domain>/apple-app-site-association

Содержание файла JSON должно содержать a webcredentials словарь с apps массив. apps списки массива идентификаторы приложений для всех приложений, которые могут получить доступ к совместно используемым учетным данным для этого сайта. Для примера см. Перечисление 1.

Перечисление веб-учетных данных 1Server-стороны
  • {
  • "webcredentials": {
  • "apps": [ "D3KQX62K1A.com.example.DemoApp",
  • "D3KQX62K1A.com.example.DemoAdminApp" ]
  • }
  • }

Файл должен удовлетворить следующие требования:

  • Файл должен быть размещен на https:// сайт с допустимым сертификатом (например, Safari не должен выпускать сертификат, предупреждающий при просмотре сайта).

  • Файл не должен использовать перенаправления.

  • Файл должен иметь тип MIME application/pkcs7-mime.

  • Файлом должен быть CMS, подписанный допустимым сертификатом TLS.

Можно подписать файл JSON с помощью команд Terminal, таких как показанные в Перечислении 2. echo команда помещает веб-учетные данные серверной стороны от Перечисления 2 в названный файл json.txt, удаление большей части пробела из текста для минимизации требуемой пропускной способности. Строка, начинающаяся cat команда читает файл и передает вывод по каналу к openssl команда, подписывающая файл с помощью сертификата и ключа для идентификационных данных, допустимых для example.com.

Перечисление 2Signing файл учетных данных
  • echo '{"webcredentials":{"apps":["D3KQX62K1A.com.example.DemoApp",
  • "D3KQX62K1A.com.example.DemoAdminApp"]}}' > json.txt
  • cat json.txt | openssl smime -sign -inkey example.com.key -signer example.com.cert -certfile intermediate.cert -noattr -nodetach -outform DER > apple-app-site-association

Вывод openssl команда является файлом JSON со знаком, что Вы ставите свой веб-сайт в apple-app-site-association URL, в этом примере https://example.com/apple-app-site-association.

Сертификат, используемый для подписания файла JSON, должен удовлетворить следующие требования:

  • Сертификат должен быть допустимым сертификатом TLS для доменного имени. Например, сертификат должен иметь Общее название или Подчиненное Альтернативное Имя, соответствующее домен (example.com в примере).

  • Сертификат не должен истекать.

  • Цепочка сертификата сервера должна привести к корневому сертификату, выпущенному центром сертификации, которому доверяет iOS.

Некоторые, доверенные центры сертификации упоминаются ниже. Для полного списка центров сертификации, которым доверяет iOS, посмотрите http://support.apple.com/kb/ht5012.

  • Symantec Corporation. www.verisign.com

  • Go Daddy Group, Inc. www.godaddy.com

  • DigiCert, Inc. www.digicert.com

  • Comodo Group, Inc. www.comodo.com

  • GlobalSign Ltd. www.globalsign.com

Проверка файла ассоциации сайта

Когда приложение установлено, iOS пытается связать его со всеми доменами, перечисленными в его связанном праве доменов. iOS выполняет следующие шаги:

  1. Берет каждый домен от связанного элемента доменов.

  2. Добавляет “/apple-app-site-association” до конца домена и загрузок содержание в получающемся URL.

  3. Заверяет подпись файла JSON.

  4. Удостоверяется, что файл JSON включает идентификатор приложения приложения.

Если все эти шаги успешно выполняются, приложение связано с доменом, и можно использовать SecAddSharedWebCredential и SecRequestSharedWebCredential получить доступ и изменить совместно используемые веб-учетные данные. После того, как приложение успешно связано с доменом, это остается связанным, пока приложение не удалено из устройства.

Много проблем могли бы заставить проверку перестать работать.

  • Подпись JSON недопустима. Ассоциации отказывают.

  • Файл JSON недопустим или не содержит идентификатор приложения. Ассоциации отказывают.

  • Сервер возвращает код 300-499. Это включает перенаправления. Ассоциации отказывают.

  • Сервер возвращает код 500-599. Система предполагает, что файл временно недоступен и попробовал еще раз. По умолчанию система пробует каждые 3 часа максимум за восемь попыток. Это также пробует каждый раз, когда приложение вызывает SecAddSharedWebCredential или SecRequestSharedWebCredential метод.

Совместное использование учетных данных

Существует широкий диапазон общих ситуаций, где можно хотеть использовать совместно использованные веб-учетные данные. Этот раздел покрывает четыре: вход в удаленный сервер, создание учетной записи пользователя в приложении, изменение пароля пользователя и удаление учетной записи пользователя.

Вход в удаленный сервер

Как правило, когда приложение должно войти в систему удаленной службы, Вы запускаете путем проверки на учетные данные пользователя в цепочке для ключей iOS. Если у Вас есть текущие учетные данные для пользователя, можно зарегистрировать их в непосредственно. В противном случае предложите пользователям их имя пользователя и пароль, и затем попытайтесь зарегистрировать их в. Вы также захотите сохранить их учетные данные после того, как вход в систему будет успешен. Этот поток операций показан на рисунке 2.

Поток операций входа в систему рисунка 2Basic image: ../Art/Basic Login Workflow 2.pdf

При использовании совместно используемых веб-учетных данных Вы добавляете два шага к этой процедуре. Как прежде, Вы запускаете путем проверки, сохранены ли учетные данные пользователя в цепочке для ключей. Если Вы не можете найти учетные данные пользователя, Вы проверяете на совместно используемые веб-учетные данные. Если Вы все еще не можете найти учетные данные, или если пользователь отказывается использовать совместно используемые учетные данные, необходимо предложить пользователю ее имя и пароль. Попытайтесь зарегистрировать пользователя в, и если вход в систему успешен, сохраните учетные данные и к цепочке для ключей и к совместно используемым веб-учетным данным. Это гарантирует, что у пользователя есть доступ к учетным данным в Safari, а также в Вашем приложении. Этот поток операций показан на рисунке 3.

Поток операций рисунка 3Login с совместно используемыми веб-учетными данными image: ../Art/Shared Credential Login Workflow 2.pdf

Не используйте совместно используемые веб-учетные данные в качестве своей основной памяти для безопасных удостоверений пользователя. Вместо этого сохраните учетные данные пользователя в цепочке для ключей, и только используйте совместно используемые веб-учетные данные, когда Вы не сможете найти учетные данные входа в систему в цепочке для ключей.

Для чтения учетных данных пользователя из совместно используемых веб-учетных данных используйте SecRequestSharedWebCredential функционируйте как показано в Перечислении 3.

Перечисление 3Accessing совместно использовало веб-учетные данные
  • SecRequestSharedWebCredential(NULL, NULL, ^(CFArrayRef credentials, CFErrorRef error) {
  • if (error != NULL) {
  • // If an error occurs, handle the error here.
  • [self handleError:error];
  • return;
  • }
  • BOOL success = NO;
  • CFStringRef server = NULL;
  • CFStringRef userName = NULL;
  • CFStringRef password = NULL;
  • // If credentials are found, use them.
  • if (CFArrayGetCount(credentials) > 0) {
  • // There will only ever be one credential dictionary
  • CFDictionaryRef credentialDict =
  • CFArrayGetValueAtIndex(credentials, 0);
  • server = CFDictionaryGetValue(credentialDict, kSecAttrServer);
  • userName = CFDictionaryGetValue(credentialDict, kSecAttrAccount);
  • password = CFDictionaryGetValue(credentialDict, kSecSharedPassword);
  • // Attempt to log in
  • success = [self logIntoServer:server user:userName password:password];
  • }
  • if (!success) {
  • [self promptForUserNameAndPassword];
  • } else {
  • [self saveCredentialsToKeychainForServer: server user:userName password:password];
  • }
  • });

Создание учетной записи пользователя в приложении

Если пользователь может создать новые учетные записи в Вашем приложении, необходимо сохранить имя пользователя и пароль к совместно используемым веб-учетным данным. Таким образом пользователь может легко получить доступ к учетной записи от Safari, а также из Вашего приложения. Можно сохранить имя и пароль пользователя к совместно используемым веб-учетным данным с помощью SecAddSharedWebCredential функция как показано.

Перечисление 4Creating учетная запись пользователя
  • SecAddSharedWebCredential(domain, name, password, ^(CFErrorRef error) {
  • if (error == NULL) {
  • // Handle the error here...
  • return;
  • }
  • // The credentials have been successfully saved.
  • });

Если нет никаких существующих учетных данных для этого имени пользователя и домена, этот метод завершается, не предлагая пользователю разрешение.

Изменение пароля пользователя

Если пользователь изменяет ее пароль в приложении, необходимо обновить и учетные данные, сохраненные в цепочке для ключей и в совместно используемых веб-учетных данных. Можно изменить пароль с помощью SecAddSharedWebCredential функция. Это - точно та же процедура, используемая при создании новой учетной записи пользователя (см. Перечисление 4). Однако, если учетные данные уже существуют для данного имени пользователя и домена, этот метод предлагает пользователю разрешение прежде, чем внести изменение. Пользователь может отменить это изменение.

Удаление учетной записи пользователя

Если пользователь удаляет ее учетную запись, необходимо удалить учетные данные и из цепочки для ключей и из совместно используемых веб-учетных данных. Можно удалить учетные данные для данного доменного имени и имени пользователя путем вызова SecAddSharedWebCredential функция и передача NULL для пароля.

Перечисление 5Deleting учетная запись пользователя
  • SecAddSharedWebCredential(domain, name, NULL, ^(CFErrorRef error) {
  • if (error == NULL) {
  • // Handle the error here...
  • return;
  • }
  • // The account information has been successfully deleted.
  • });

Системные приглашения пользователь для разрешения прежде, чем удалить их имя пользователя и пароль из совместно используемых веб-учетных данных. Пользователи могут отменить это изменение.

Функции

  • Асинхронно хранилища (или обновления) совместно используемый пароль для веб-сайта.

    Объявление

    Swift

    func SecAddSharedWebCredential(_ fqdn: CFString!, _ account: CFString!, _ password: CFString!, _ completionHandler: ((CFError!) -> Void)!)

    Objective C

    void SecAddSharedWebCredential ( CFStringRef fqdn, CFStringRef account, CFStringRef password, void (^completionHandler)( CFErrorRef error) );

    Параметры

    fqdn

    Полностью определенное доменное имя веб-сайта, требующего пароля.

    account

    Название счета связалось с этим паролем.

    password

    Пароль, который будет сохранен. Передача NULL удалить совместно используемый пароль, если это существует.

    completionHandler

    Когда функция завершилась, блок вызвал.

    Блок берет один параметр:

    error

    Если совместно используемый пароль был успешно добавлен (или удален), NULL; если не успешный, a CFErrorRef объект, инкапсулирующий причину, почему пароль не мог быть добавлен (или удален). Ошибочная ссылка автоматически выпущена после того, как этот обработчик вызывают, хотя можно дополнительно сохранить его столько, сколько необходимый.

    Обсуждение

    Эта функция добавляет совместно используемый элемент пароля, который будет доступен Safari и приложениями, имеющими указанное полностью определенное доменное имя в их com.apple.developer.associated-domains право. Если совместно используемый элемент пароля уже существует для указанного веб-сайта и учетной записи, это обновляется с указанным паролем. Удалить пароль, передачу NULL для параметра пароля.

    Оператор импорта

    Objective C

    @import Security;

    Swift

    import Security

    Доступность

    Доступный в iOS 8.0 и позже.

  • Асинхронно получает один или несколько совместно используемые пароли для веб-сайта.

    Объявление

    Swift

    func SecRequestSharedWebCredential(_ fqdn: CFString!, _ account: CFString!, _ completionHandler: ((CFArray!, CFError!) -> Void)!)

    Objective C

    void SecRequestSharedWebCredential ( CFStringRef fqdn, CFStringRef account, void (^completionHandler)( CFArrayRef credentials, CFErrorRef error) );

    Параметры

    fqdn

    (Необязательно) полностью определенное доменное имя веб-сайта, на который требуют пароли. Если NULL передается в этом параметре, доменное имя (ена), перечисленное в приложении вызова com.apple.developer.associated-domains право ищется неявно.

    account

    (Необязательно) название счета, на которое требуют пароли. Учетная запись может быть NULL запрашивать все совместно используемые учетные данные, которые доступны для сайта, позволяя вызывающей стороне обнаружить существующую учетную запись.

    completionHandler

    Блок, который вызывают для поставки требуемых учетных данных.

    Блок берет два параметра:

    credentials

    Массив, содержащий требуемые пароли. Если никакие элементы соответствия не найдены, массив учетных данных пуст. Ссылка учетных данных автоматически выпущена после того, как этот обработчик вызывают, хотя можно дополнительно сохранить его столько, сколько необходимый.

    error

    Если совместно используемый пароль был успешно добавлен (или удален), NULL; если не успешный, a CFErrorRef объект, инкапсулирующий причину, почему пароль не мог быть добавлен (или удален). Ошибочная ссылка автоматически выпущена после того, как этот обработчик вызывают, хотя можно дополнительно сохранить его столько, сколько необходимый.

    Обсуждение

    Эта функция запрашивает один или несколько совместно используемые пароли для данного веб-сайта, в зависимости от того, предоставляется ли дополнительный параметр учетной записи. Получить результаты, веб-сайт, указанный в fqdn параметр должен быть тем, соответствующим запись в приложении вызова com.apple.developer.associated-domains право.

    Если совместно использованные элементы пароля соответствия будут найдены, то учетные данные, предоставленные для обработчика завершения, будут a CFArrayRef тип данных, содержащий CFDictionaryRef записи. Каждый словарь содержит следующих пар (см. Security/SecItem.h):

    Ключ

    Значение

    kSecAttrServer

    CFStringRef (веб-сайт)

    kSecAttrAccount

    CFStringRef (учетная запись)

    kSecSharedPassword

    CFStringRef (пароль)

    Если найденный элемент указывает нестандартный номер порта (кроме 443 для https), следующий ключ может также присутствовать:

    kSecAttrPort

    CFNumberRef (номер порта)

    Оператор импорта

    Objective C

    @import Security;

    Swift

    import Security

    Доступность

    Доступный в iOS 8.0 и позже.

  • Возвращает случайным образом сгенерированный пароль.

    Объявление

    Swift

    func SecCreateSharedWebCredentialPassword() -> Unmanaged<CFString>!

    Objective C

    CFStringRef SecCreateSharedWebCredentialPassword ( void );

    Возвращаемое значение

    Пароль в форме xxx-xxx-xxx-xxx, где x взят от наборов abcdefghkmnopqrstuvwxy, ABCDEFGHJKLMNPQRSTUVWXYZ, и 3456789, по крайней мере с одним символом от каждого присутствующего набора.

    Оператор импорта

    Objective C

    @import Security;

    Swift

    import Security

    Доступность

    Доступный в iOS 8.0 и позже.

Константы

Учетные ключевые константы

  • Ключ словаря, значение которого является совместно используемым паролем.

    Объявление

    Swift

    var kSecSharedPassword: Unmanaged<AnyObject>!

    Objective C

    extern CFTypeRef kSecSharedPassword;

    Константы

    • kSecSharedPassword

      Ключевая константа для доступа к совместно используемым паролям. Используйте это включает словарь, возвращенный SecRequestSharedWebCredential функция.

      Можно также получить доступ к URL сервера и имени пользователя из этого словаря. Для доступа к серверу используйте kSecAttrServer постоянный. Для доступа к имени пользователя используйте kSecAttrAccount постоянный. Для получения дополнительной информации об этих константах, посмотрите Ссылку Keychain Services.

      Доступный в iOS 8.0 и позже.