Câu hỏi liên quan đến móc khóa của tôi trong iOS (iPhone, iPad, ...). Tôi nghĩ (nhưng không chắc chắn) rằng việc thực hiện các móc khóa trong Mac OS X làm tăng cùng một câu hỏi với cùng một câu trả lời.Điều gì làm cho một mục keychain độc đáo (trong iOS)?
iOS cung cấp năm loại (lớp) của các mặt hàng keychain. Bạn phải chọn một trong những năm giá trị cho khóa kSecClass
để xác định loại:
kSecClassGenericPassword used to store a generic password
kSecClassInternetPassword used to store an internet password
kSecClassCertificate used to store a certificate
kSecClassKey used to store a kryptographic key
kSecClassIdentity used to store an identity (certificate + private key)
Sau thời gian dài của việc đọc tài liệu hướng dẫn táo, blog và diễn đàn-mục, tôi phát hiện ra rằng một mục keychain loại kSecClassGenericPassword
được nó tính duy nhất từ các thuộc tính kSecAttrAccessGroup
, kSecAttrAccount
và kSecAttrService
.
Nếu ba thuộc tính đó trong yêu cầu 1 giống như trong yêu cầu 2, thì bạn sẽ nhận được cùng một mục keychain mật khẩu chung, bất kể thuộc tính nào khác. Nếu một (hoặc hai hoặc tất cả) thuộc tính này thay đổi giá trị của nó thì bạn sẽ nhận được các mục khác nhau.
Nhưng kSecAttrService
chỉ có sẵn cho các mặt hàng loại kSecClassGenericPassword
, vì vậy nó không thể là một phần của "khóa duy nhất" của một mục thuộc bất kỳ loại nào khác và dường như không có tài liệu nào chỉ ra rõ ràng thuộc tính nào xác định một mục keychain.
Mã mẫu trong lớp "KeychainItemWrapper" của "GenericKeychain" sử dụng thuộc tính kSecAttrGeneric
để tạo một mục duy nhất, nhưng đây là lỗi. Hai mục trong ví dụ này chỉ được lưu trữ như hai mục riêng biệt, bởi vì kSecAttrAccessGroup
của chúng là khác nhau (một nhóm có nhóm truy cập, phần còn lại cho phép nó miễn phí). Nếu bạn cố gắng thêm mật khẩu thứ 2 mà không có nhóm truy cập, sử dụng số KeychainItemWrapper
của Apple, bạn sẽ thất bại.
Vì vậy, xin vui lòng, trả lời câu hỏi của tôi:
- Có đúng, rằng sự kết hợp của
kSecAttrAccessGroup
,kSecAttrAccount
vàkSecAttrService
là "chìa khóa độc đáo" của một mục keychain có kSecClass làkSecClassGenericPassword
? - Thuộc tính nào làm cho mục keychain trở thành duy nhất nếu
kSecClass
của nó không phải làkSecClassGenericPassword
?
Có một [mục nhập blog tại đây] (http://useyourloaf.com/blog/2010/04/28/keychain-duplicate-item-when-adding-password.html) về việc này. – bobobobo