Если ваш Mac продолжает запрашивать пароль связки ключей для входа

После того, как вы или ваш администратор Mac сбросите пароль вашей учетной записи macOS, ваш Mac может попросить вас обновить пароль связки ключей или ввести пароль вашей связки ключей для входа. Это также может сказать вам, что системе не удалось разблокировать вашу связку ключей для входа в систему. Это потому, что в вашей связке ключей для входа по-прежнему используется ваш старый пароль.

Содержание
  1. Если вы не знаете свой старый пароль
  2. Если вы знаете свой старый пароль
  3. /KeychainAccess
  4. 💡 Возможности
  5. 📖 Использование
  6. 🔑 Основы
  7. Сохранение пароля приложения
  8. Сохранение интернет-пароля
  9. 🔑 Создание экземпляра
  10. Создать связку ключей для пароля приложения
  11. Создать связку ключей для Интернет-пароля
  12. 🔑 Добавление элемента
  13. с подпиской
  14. метод установки
  15. обработка ошибок
  16. 🔑 Получение элемента
  17. индексирование
  18. получить методы
  19. 🔑 Удаление элемента
  20. подписка
  21. метод удаления
  22. 🔑 Установить метку и комментарий
  23. 🔑 Получение других атрибутов
  24. PersistentRef
  25. Дата создания
  26. Все атрибуты
  27. 🔑 Конфигурация n (доступность, совместное использование, синхронизация iCloud)
  28. Доступность
  29. 👫 Совместное использование элементов связки ключей
  30. 🔄 Синхронизация элементов связки ключей с iCloud
  31. 🌀 Интеграция Touch ID (Face ID)
  32. 🔐 Добавление элемента, защищенного Touch ID (Face ID)
  33. 🔐 Обновление защищенного элемента Touch ID (Face ID)
  34. 🔐 Получение Touch ID ( Face ID) защищенный предмет
  35. 🔐 Удаление защищенного элемента Touch ID (Face ID)
  36. 🔑 Общие веб-учетные данные
  37. Запросить все учетные данные связанного домена
  38. Сгенерировать надежный случайный пароль
  39. Как настроить общие веб-учетные данные
  40. 🔍 Отладка
  41. Отобразить все сохраненные элементы, если распечатать объект связки ключей
  42. Получение всех сохраненных ключей
  43. Получение всех сохраненных элементов
  44. Возможность совместного использования связки ключей
  45. Требования
  46. Установка
  47. CocoaPods
  48. Carthage
  49. Swift Package Manager
  50. Xcode
  51. CLI
  52. Чтобы добавить в проект вручную
  53. Автор
  54. Лицензия

Если вы не знаете свой старый пароль

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

Если вы знаете свой старый пароль

Если вы знаете свой старый пароль, используйте этот пароль для обновления существующей цепочки ключей входа:

  1. Откройте приложение Keychain Access, которое находится в служебных программах в папке «Приложения».
  2. В списке цепочек ключей в левой части окна выберите «Войти».
  3. В меню «Правка» в строке меню выберите «Изменить пароль для логина связки ключей».
  4. Введите старый пароль своей учетной записи в поле «Текущий пароль». поле. Это пароль, который вы использовали до сброса пароля.
  5. Введите новый пароль вашей учетной записи в поле «Новый пароль». Это пароль, который вы сейчас используете для входа на свой Mac. Введите тот же пароль в поле «Подтвердить».
  6. По завершении нажмите «ОК», затем закрыть доступ к связке ключей.


/KeychainAccess

KeychainAccess — это простая оболочка Swift для Keychain, которая работает на iOS и OS X. Делает использование API Keychain чрезвычайно простым и гораздо более удобным для использования в Swift. .

💡 Возможности

  • Простой интерфейс
  • Поддержка группы доступа
  • Поддержка специальных возможностей
  • Поддержка iCloud sha кольцо
  • Поддержка интеграции TouchID и Keychain (iOS 8+)
  • Поддержка общих веб-учетных данных (iOS 8 +)
  • Работает как на iOS, так и на macOS.
  • Поддерживаются watchOS и tvOS
  • Mac Поддерживается Catalyst.
  • Совместимость со Swift 3, 4 и 5

📖 Использование

👀 См. Также:
  • 🔗 Пример проекта iOS

🔑 Основы

Сохранение пароля приложения

 let keychain = Keychain (service: "com.example. github-token ") связка ключей [" kishikawakatsumi "] =" 01234567-89ab-cdef-0123-456789abcdef "

Сохранение интернет-пароля

 let keychain = Связка ключей (сервер: "https://github.com", protocolType: .https) связка ключей ["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" 

🔑 Создание экземпляра

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

 let keychain =  Связка ключей (служба: "com.example.github-token") 

 let keychain = Связка ключей (служба: "com.example.github-token", accessGroup  : "12ABCD3E4F.shared") 

Создать связку ключей для Интернет-пароля

 let keychain = Keychain (server: "https://github.com ", protocolType: .https) 

 let keychain = Keychain (server:" https://github.com ", protocolType: .https  , authenticationType: .htmlForm) 

🔑 Добавление элемента

с подпиской

для строки
 связка ключей ["кишикавака  tsumi "] =" 01234567-89ab-cdef-0123-456789abcdef "

 связка ключей [строка:" kishikawakatsumi "] =" 01234567-89ab-cdef-0123  -456789abcdef "

для NSData
 связка ключей [data:" secret "] = NSData (contentsOfFile:" secret.bin "  ) 

метод установки

 keychain.set ("01234567-89ab-cdef-0123-456789abcdef", ключ: "кишикавакацуми  ") 

обработка ошибок

 do {попробуйте keychain.set (" 01234567-89ab-cdef-0123-456789abcdef ",  key: "kishikawakatsumi")} catch let error {print (error)} 

🔑 Получение элемента

индексирование

для String (если значение — NSData, попытаться преобразовать в String)
 let token = keychain ["kishikawakatsumi"  ] 

 let token = keychain [string: "kishikawakatsumi"] 

для NSData
 let secretData = keychain [data: "secret"] 

получить методы

as String
 позволить  ken = попробовать?  keychain.get ("кишикавакацуми") 

 let token = try?  keychain.getString ("kishikawakatsumi") 

as NSData
 let data = try?  keychain.getData ("kishikawakatsumi") 

🔑 Удаление элемента

подписка

 связка ключей ["kishikawakatsumi"] = nil 

метод удаления

 do {попробуйте  keychain.remove ("kishikawakatsumi")} catch let error {print ("error:  (error)")} 

🔑 Установить метку и комментарий

 let keychain = Keychain (server: "https://github.com", protocolType: .https) do {try keychain .label ("github.  com (кишикавакацуми) ") .comment (" токен доступа к github "). set ("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")} catch let error {print ("error:  (error)")} 

🔑 Получение других атрибутов

PersistentRef

 let keychain = Keychain () let persistentRef = keychain [  атрибуты: "кишикавакацуми"] ?. persistentRef ... 

Дата создания

 let keychain = Keychain () let creationDate =  связка ключей [атрибуты: "кишикавакацуми"] ?. Дата создания ... 

Все атрибуты

 let keychain = Keychain () делать  {let attributes = try keychain.get ("kishikawakatsumi") {$ 0} print (attributes? .comment) print (attributes? .label) print (attributes? .creator) ...} catch let error {print ("error:   (error) ")} 

индексирование
 let keychain = Keychain () if let attributes = keychain [attributes:"  kishikawakatsumi "] {print (attributes.comment) print (attributes.label) print (attributes.creator)} 

🔑 Конфигурация n (доступность, совместное использование, синхронизация iCloud)

Обеспечивает плавный интерфейс

 let keychain = Keychain (service  : "com.example.github-token") .label ("github.com (kishikawakatsumi)") .synchronizable (true) .accessibility (.afterFirstUnlock) 

Доступность

Доступность по умолчанию соответствует фоновому приложению (= kSecAttrAccessibleAfterFirstUnlock)
 let keychain = Keychain (service: "com.example.github-token") 

Для фонового приложения
Создание экземпляра
 let keychain = Keychain (service: "com.example.  github-token ") .accessibility (.afterFirstUnlock) keychain [" kishikawakatsumi "] =" 01234567-89ab-cdef-0123-456789abcdef "

One-shot
 let keychain = Keychain (service: "com.example.github-token") do {попробуйте keychain .accessibility (.afterFirstUnlock) .set ("01234567-89ab-cdef-0123-456789abcdef"  , key: "kishikawakatsumi")} catch let error {print ("error:  (erro  r) ")} 

Для приложения переднего плана
Создание экземпляра
 let keychain = Keychain  (service: "com.example.github-token") .accessibility (.whenUnlocked) связка ключей ["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" 

Одноразовый
 let keychain = Keychain (service: "com.example.github-token") do {попробуйте связку ключей .accessibility (.whenUnlocked) .set ("01234567-  89ab-cdef-0123-456789abcdef ", key:" kishikawakatsumi ")} catch let error {print (" error:  (error) ")} 

👫 Совместное использование элементов связки ключей

 let keychain = Keychain (service: "com.example.github-token", accessGroup: "12ABCD3E4F. shared ") 

🔄 Синхронизация элементов связки ключей с iCloud

Создание экземпляра
 let keychain = Keychain (service: "com.example.github-token") .synchronizable (true) keychain ["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef" 

Одноразовый
 let keychain = Keychain (service: "com.example.github-token") do {попробуйте связку ключей.  synchronizable (true) .set ("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")} catch let error {print ("error:  (error)")} 

🌀 Интеграция Touch ID (Face ID)

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

Чтобы использовать Face ID, добавьте ключ NSFaceIDUsageDescription в свой Info.plist

🔐 Добавление элемента, защищенного Touch ID (Face ID)

Если вы хотите сохранить элемент Связки ключей, защищенный Touch ID, укажите accessibility и authenticationPolicy атрибуты.

 let keychain = Keychain (service: "com.example.github-token") DispatchQueue.global (). async {do {//Должен  будет ли секрет недействителен при удалении пароля?  Если нет, то используйте `.WhenUnlocked` try keychain .accessibility (.whenPasscodeSetThisDeviceOnly, authenticationPolicy: .userPresence) .set (" 01234567-89ab-cdef-0123-456789abcdef ", key:" kishikawakatsumi ")} ошибка catch let error {  обработка при необходимости ...}} 

🔐 Обновление защищенного элемента Touch ID (Face ID)

Так же, как и при добавлении.

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

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

 let keychain = Keychain (service: "com  .example.github-token ") DispatchQueue.global (). async {do {//Секрет должен быть недействительным, когда код доступа  устранен?  Если нет, то используйте `.WhenUnlocked` попробуйте связку ключей .accessibility (.whenPasscodeSetThisDeviceOnly, authenticationPolicy: .userPresence) .authenticationPrompt (« Выполните аутентификацию для обновления вашего токена доступа ») .set (« 01234567-89ab-cdef-0123-456789abc  "kishikawakatsumi")} catch let error {//Обработка ошибок при необходимости ...}} 

🔐 Получение Touch ID ( Face ID) защищенный предмет

Так же, как и при получении обычного предмета. Он будет отображаться автоматически Touch ID или аутентификация с паролем. Если элемент, который вы пытаетесь получить, защищен.
Если вы хотите показать пользовательское сообщение с запросом аутентификации, укажите атрибут authenticationPrompt . элемент не защищен, параметр authenticationPrompt просто игнорируется.

 let keychain = Keychain (service: "com.example.github-token  ") DispatchQueue.global (). Async {do {let password = try keychain .authenticationPrompt (" Authenticate to login to server ") .get (" kishikawakatsumi ") print (" password:  (password) ")} catch let error  {//Обработка ошибок при необходимости ...}} 

🔐 Удаление защищенного элемента Touch ID (Face ID)

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

 let keychain =  Связка ключей (служба: "com.example.github-token") {попробуйте keychain.remove ("kishikawakatsumi")} поймать ошибку let {//При необходимости обработка ошибок ...} 

🔑 Общие веб-учетные данные

Общие веб-учетные данные — это интерфейс программирования, который позволяет собственным приложениям iOS обмениваться учетными данными со своими аналогами на веб-сайтах. Например, пользователь может войти на веб-сайт в Safari, ввести имя пользователя и пароль и сохранить эти учетные данные с помощью Связки ключей iCloud. Позже пользователь может запустить собственное приложение от того же разработчика, и вместо приложения, требующего от пользователя повторного ввода имени пользователя и пароля, общие веб-учетные данные предоставляют ему доступ к учетным данным, которые были введены ранее в Safari. Пользователь также может создавать новые учетные записи, обновлять пароли или удалять свою учетную запись из приложения. Затем эти изменения сохраняются и используются Safari.
https://developer.apple.com/library/ios/documentation/Security/Reference/SharedWebCredentialsRef/

 let keychain = Keychain (server: "https://www.kishikawakatsumi.com", protocolType: .HTTPS) let username = "kishikawakatsumi@mac.com"//Сначала проверьте учетные данные в Keychain приложения, если  пусть пароль = попробовать?  keychain.get (username) {//Если пароль найден в Связке ключей,//затем войдите на сервер} else {//Если пароль не найден в Связке ключей,//попытайтесь прочитать из Shared Web Credentials keychain.getSharedPassword (username  ) {(пароль, ошибка) -> () in if password! = nil {//Если пароль найден в общих веб-учетных данных,//затем войдите на сервер//и сохраните пароль в связке ключей Keychain [имя пользователя] =  пароль} else {//Если пароль не найден ни в Связке ключей, так и в общих веб-учетных данных,//запрос имени пользователя и пароля//Вход на сервер//Если вход успешен,//сохраните учетные данные как в Связке ключей, так и в  Общие веб-учетные данные.  связка ключей [имя пользователя] = связка ключей inputPassword. setSharedPassword (inputPassword, account: username)}}} 

Запросить все учетные данные связанного домена

 Keychain.requestSharedWebCredential {(учетные данные,  error) -> () in} 

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

Сгенерировать надежный случайный пароль в том же формате, что и автозаполнение Safari (xxx -xxx-xxx-xxx).

 let password = Keychain.generatePassword ()//=> Nhu-GKm-s3n-pMx 

Как настроить общие веб-учетные данные

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

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

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

Подробнее:
https://developer.apple.com/library/ios/documentation/Security/Reference/SharedWebCredentialsRef/

🔍 Отладка

Отобразить все сохраненные элементы, если распечатать объект связки ключей

 let keychain = Keychain (server: "https://github.com", protocolType: .https) print  (" (связка ключей)") 

  => [[authenticationType: default, key: kishikawakatsumi, server: github.com, class: internetPassword, protocol:  https] [authenticationType: по умолчанию, ключ: hirohamada, сервер: github.com, класс: internetPassword, протокол: https] [authenticationType: по умолчанию, ключ: honeylemon, сервер: github.com, класс: internetPassword, протокол: https]]  

Получение всех сохраненных ключей

 let keychain = Keychain (server: "https://github.com", protocolType:.  https) let keys = keychain.allKeys () для ввода ключей {p  rint ("key:  (key)")} 

  => key: kishikawakatsumikey: hirohamadakey: honeylemon  

Получение всех сохраненных элементов

 let keychain = Keychain (server: "https://github.com", protocolType: .https) let items = keychain.allItems ()  для элемента в элементах {print ("item:  (item)")} 

  => item: [authenticationType: Default, key: kishikawakatsumi, server:  github.com, класс: InternetPassword, протокол: https] элемент: [authenticationType: по умолчанию, ключ: hirohamada, сервер: github.com, класс: InternetPassword, протокол: https] элемент: [authenticationType: по умолчанию, ключ: honeylemon, сервер:  github.com, класс: InternetPassword, протокол: https]  

Возможность совместного использования связки ключей

Если вы столкнулись с ошибкой ниже, вам необходимо добавить Keychain.entitlements .

  Ошибка OSStatus: [- 34018] Внутренняя ошибка, когда требуемое разрешение отсутствует, клиент не имеет полномочий ни идентификатора приложения, ни прав доступа групп ключей.   

Требования

th> OS Swift
v1.1.x iOS 7+, macOS 10.9+ 1.1
v1.2.x iOS 7+, macOS 10.9+ 1.2
v2.0.x iOS 7+, macOS 10.9+, watchOS 2+ 2.0
v2.1.x iOS 7+, macOS 10.9+, watchOS 2+ 2.0
v2.2.x iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ 2.0, 2.1
v2.3.x iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ 2.0, 2.1, 2.2
v2.4.x iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ 2.2, 2.3
v3.0.x iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ 3.x
v3.1.x iOS 8 +, macOS 10.9+, watchOS 2+, tvOS 9+ 4.0, 4.1, 4.2
v3.2.x iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ 4.0, 4.1, 4.2, 5.0
iOS 8+, macOS 10.9+, watchOS 2 +, tvOS 9+ 4.0, 4.1, 4.2, 5.1
v4.1.x iOS 8+, macOS 10.9+, watchOS 3+, tvOS 9+, Mac Catalyst 13+ 4.0, 4.1, 4.2, 5.1

Установка

CocoaPods

KeychainAccess доступен через CocoaPods. Чтобы установить его, просто добавьте следующие строки в свой Podfile:

 use_frameworks! Pod 'KeychainAccess' 

Carthage

Доступ к KeychainAccess доступен через Carthage. Чтобы установить его, просто добавьте следующую строку в свой Cartfile:

github "kishikawakatsumi/KeychainAccess"

Swift Package Manager

KeychainAccess также доступен через Swift Package Manager.

Xcode

Выберите Файл> Swift Packages> Добавить зависимость пакета. .. ,

CLI

Сначала создайте Package.swift , который включает в себя объявление пакета:

//swift-tools-version  : 5.0import PackageDescriptionlet package = Package (name: "MyLibrary", продукты: [.library (name: "MyLibrary", цели: ["MyLibrary"]),], зависимости: [.package (url: "https:// github.com/kishikawakatsumi/KeychainAccess.git ", от:" 3.0.0 "),], цели: [. target (имя: "MyLibrary", зависимости: ["KeychainAccess"]),]) 

Затем введите

 $  быстрая сборка 

Чтобы добавить в проект вручную

  1. Добавьте Lib/KeychainAccess.xcodeproj к вашему проекту
  2. Свяжите KeychainAccess.framework с вашей целью
  3. Добавить Скопируйте файлы, этап сборки , чтобы включить платформу в пакет приложений.

См. пример проекта iOS в качестве справки.

Автор

кишикава кацуми, kishikawakatsumi@mac.com

Лицензия

KeychainAccess доступен по лицензии MIT. Дополнительную информацию см. В файле LICENSE.

Оцените статью
clickpad.ru
Добавить комментарий