iOS:使用钥匙串

时间:2017-03-22 10:59:10

标签: ios objective-c keychain keychainitemwrapper

我想使用钥匙串来存储用户名,密码和访问令牌。我添加了keychainItem.hkeyChainItem.m已实施here。这就是我所做的:

1-我在myViewController.h创建了一个属性keychain,然后在viewDidLoad中我将它实例化为:

self.keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Login" accessGroup:nil];

当我获得userName,密码和访问令牌时,这就是我所做的:

2-存储userName

[self.keychain setObject:userName forKey:(__bridge id)kSecAttrAccount]; 

当我测试它时,它可以工作。

现在我要添加密码和访问令牌。

对于我尝试过的访问令牌

[self.keychain setObject:accessToken forKey:(__bridge id)kSecAttrAccessible];

当我运行应用程序崩溃时:

Assertion failure in -[KeychainItemWrapper writeToKeychain] KeychainItemWrapper.m:322
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't update the Keychain Item.'

我试图创建另一个钥匙串

self.keychainToken = [[KeychainItemWrapper alloc] initWithIdentifier:@“Token” accessGroup:nil];

然后我设置了值:

[self.keychainToken setObject:accessToken forKey:(__bridge id)kSecValueData]; 

但我得到了同样的错误。

我做了什么错了?如何使用钥匙串存储用户,密码和accessToken?

1 个答案:

答案 0 :(得分:1)

你可以像这样使用它:

self.keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"Login" accessGroup:nil];

[self.keychain setObject:userName forKey:(id)kSecAttrAccount];
[self.keychain setObject:password forKey:(__bridge id)(kSecValueData)];
[self.keychain setObject:accessToken forKey:(id)kSecAttrTokenID];
[self.keychain setObject:@"LoginService" forKey: (id)kSecAttrService];