MCSMKeychainItem 1.1

MCSMKeychainItem 1.1

测试已测试
语言语言 Obj-CObjective C
许可 BSD
发布上次发布2014年12月

Spencer MacDonald 维护。



  • Spencer MacDonald

MCSMGenericKeychainItem

MCSMKeychainItem(或更具体的是 MCSMGenericKeychainItem)允许您使用相同的简单 Objective C API 在 iOS 和 OS X 上从 Keychain 创建、查找和删除 Keychain 项。

通用 Keychain 项允许您存储特定 服务账号(通常是用户名)和 密码。使用 MCSMGenericKeychainItem 做这一点很容易

// First Check to see if a Generic Keychain Item for the Service and Username already exists

MCSMGenericKeychainItem *genericKeychainItem = nil;

genericKeychainItem = [MCSMGenericKeychainItem genericKeychainItemForService:service
                                                                     account:account 
                                                                  attributes:attributes
                                                                       error:NULL];

// If a Generic Keychain Item already exists remove it to prevent duplicates
if(genericKeychainItem)
{
  [genericKeychainItem removeFromKeychainWithError:NULL];
}

//Add the new Generic Keychain Item                             
[MCSMGenericKeychainItem genericKeychainItemWithService:service 
                                                account:account 
                                             attributes:attributes 
                                               password:password
                                                  error:NULL];

当您想要查找 服务账号 的通用 Keychain 项时,需要做的是

MCSMGenericKeychainItem *genericKeychainItem = [MCSMGenericKeychainItem genericKeychainItemForService:service 
                                                                                              account:account 
                                                                                           attributes:attributes
                                                                                                error:NULL];

然后您可以使用密码属性获取密码

NSString *password = genericKeychainItem.password;

要将其从 Keychain 中删除,只需调用 removeFromKeychainWithError

[genericKeychainItem removeFromKeychainWithError:NULL];

MCSMInternetKeychainItem

MCSMInternetKeychainItem 允许您使用相同的简单 Objective C API 在 iOS 和 OS X 上创建、查找和删除 Internet Keychain 项。

Internet Keychain 项允许您存储 服务器安全域账号(通常是用户名)、路径端口协议身份验证类型密码

协议身份验证类型 定义在 Security/SecItem.h 中,当前列表如下

协议

kSecAttrProtocolFTP
kSecAttrProtocolFTPAccount
kSecAttrProtocolHTTP
kSecAttrProtocolIRC
kSecAttrProtocolNNTP
kSecAttrProtocolPOP3
kSecAttrProtocolSMTP
kSecAttrProtocolSOCKS
kSecAttrProtocolIMAP
kSecAttrProtocolLDAP
kSecAttrProtocolAppleTalk
kSecAttrProtocolAFP
kSecAttrProtocolTelnet
kSecAttrProtocolSSH
kSecAttrProtocolFTPS
kSecAttrProtocolHTTPS
kSecAttrProtocolHTTPProxy
kSecAttrProtocolHTTPSProxy
kSecAttrProtocolFTPProxy
kSecAttrProtocolSMB
kSecAttrProtocolRTSP
kSecAttrProtocolRTSPProxy
kSecAttrProtocolDAAP
kSecAttrProtocolEPPC
kSecAttrProtocolIPP
kSecAttrProtocolNNTPS
kSecAttrProtocolLDAPS
kSecAttrProtocolTelnetS
kSecAttrProtocolIMAPS
kSecAttrProtocolIRCS
kSecAttrProtocolPOP3S

身份验证类型

kSecAttrAuthenticationTypeNTLM
kSecAttrAuthenticationTypeMSN
kSecAttrAuthenticationTypeDPA
kSecAttrAuthenticationTypeRPA
kSecAttrAuthenticationTypeHTTPBasic
kSecAttrAuthenticationTypeHTTPDigest
kSecAttrAuthenticationTypeHTMLForm
kSecAttrAuthenticationTypeDefault

创建 MCSMInternetKeychainItem 的推荐方法是

// Fetch existing Keychain Item
MCSMInternetKeychainItem *internetKeychainItem = nil;

internetKeychainItem = [MCSMInternetKeychainItem internetKeychainItemForServer:server
                                                                securityDomain:securityDomain
                                                                       account:account
                                                                          path:path
                                                                          port:port
                                                                      protocol:protocol
                                                            authenticationType:authenticationType
                                                                    attributes:attributes
                                                                         error:NULL];

// If a Internet Keychain Item already exists remove it to prevent duplicates
if(internetKeychainItem)
{
  [internetKeychainItem removeFromKeychainWithError:NULL];
}

//Add the new Internet Keychain Item                             
[MCSMInternetKeychainItem internetKeychainItemForServer:server
                                         securityDomain:securityDomain
                                                account:account
                                                   path:path
                                                   port:port
                                               protocol:protocol
                                     authenticationType:authenticationType
                                             attributes:attributes
                                               password:password
                                                  error:NULL];

当您要查找 Internet Keychain 项时,需要做的是

MCSMInternetKeychainItem *internetKeychainItem = nil;

internetKeychainItem = [MCSMInternetKeychainItem internetKeychainItemForServer:server
                                                                securityDomain:securityDomain
                                                                       account:account
                                                                          path:path
                                                                          port:port
                                                                      protocol:protocol
                                                            authenticationType:authenticationType
                                                                    attributes:attributes
                                                                         error:NULL];

然后您可以使用密码属性获取密码

NSString *password = internetKeychainItem.password;

要将其从 Keychain 中删除,只需调用 removeFromKeychainWithError

[internetKeychainItem removeFromKeychainWithError:NULL];

MCSMApplicationUUIDKeychainItem

Apple 已在 iOS 5.0 中弃用了返回设备 UDID 的唯一标识符 API。

但您可以使用 CoreFoundation 的 CFUUIDCreateString API 生成一个 UUID

关于 CFUUIDCreateString 重要的是要知道(按设计)每次调用它时都生成一个不同的 UUID。这意味着您不能通过简单地将 [UIDevice uniqueIdentifier] 替换为 CFUUIDCreateString 来唯一地识别一个设备。

MCSMApplicationUUIDKeychainItem 的方法是,在第一次调用 API 时生成一个 UUID,然后将其存储在设备的 keychain 中。这意味着 UUID 在应用程序启动之间不会更改,将其存储在 keychain 中的意思是在应用程序重新安装后它们仍将保持持久。但是,如果用户恢复他们的设备,则将删除该 UUID 以及所有其他 keychain 项。

如果您只需要替换UIDevice的 uniqueIdentifier API,那么只需用MCSMApplicationUUIDKeychainItem的 applicationUUID API进行替换即可。

NSString *UUID = [MCSMApplicationUUIDKeychainItem applicationUUID];

第一次调用applicationUUID时,将生成一个UUID并将其存储在密钥链中。之后的调用将返回之前生成的UUID

如果您需要更多控制,可以使用以下方法检索应用程序UUID密钥链项:

MCSMApplicationUUIDKeychainItem *applicationUUIDKeychainItem = [MCSMApplicationUUIDKeychainItem applicationUUIDKeychainItem];

然后您可以通过UUID属性获取UUID

NSString *UUID = applicationUUIDKeychainItem.UUID

如果不存在,可以生成一个。

MCSMApplicationUUIDKeychainItem *applicationUUIDKeychainItem = [MCSMApplicationUUIDKeychainItem generateApplicationUUIDKeychainItem];

您可以使用removeFromKeychainWithError移除它。

[applicationUUIDKeychainItem removeFromKeychainWithError:NULL];