[ios] iOS : 앱 내에 사용자 이름 / 암호를 저장하는 방법

iOS 앱에 로그인 화면이 있습니다. 사용자 이름과 비밀번호는에 다시 저장되고 NSUserDefaults앱을 다시 입력 할 때 로그인 화면에 다시로드됩니다 (물론 NSUserDefaults영구적 임).

이제 사용자는 사용자 이름 / 암호 저장 기능을 비활성화 할 수 있습니다.

그래서 NSUserDefaults그때는 지워질 것입니다.

그러나 내 응용 프로그램에는 사용자의 데이터베이스 쿼리 에이 사용자 이름 / 암호가 필요합니다. 따라서 : 제외하고 데이터를 저장할 위치는 NSUserDefaults? (이 장소는 사용자가 앱을 종료하거나 로그 아웃 할 때 삭제해야합니다.)



답변

항상 키 체인을 사용하여 사용자 이름과 비밀번호를 저장해야하며, 사용자 이름과 비밀번호는 안전하게 저장되고 앱에서만 액세스 할 수 있으므로 앱이 종료 될 때 (필요한 경우) 삭제할 필요가 없습니다.

Apple은 키 체인 항목을 저장, 읽기 및 삭제하는 샘플 코드 를 제공 하며 키 체인 사용을 크게 단순화하는 샘플에서 키 체인 래퍼 클래스를 사용하는 방법은 다음과 같습니다.

Security.framework를 포함하십시오 (Xcode 3에서 frameworks 폴더를 마우스 오른쪽 버튼으로 클릭하고 기존 프레임 워크를 추가하십시오. Xcode 4에서 프로젝트를 선택한 다음 대상을 선택하고 Build Phases 탭으로 이동 한 다음 Link Binary with Files 아래에서 +를 클릭하십시오) 및 KeychainItemWrapper .h &. m 파일을 프로젝트로 # 키 체인을 사용해야하는 곳마다 .h 파일을 가져온 다음이 클래스의 인스턴스를 만듭니다.

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];

( YourAppLogin 은 키 체인 아이템을 호출하기 위해 선택한 모든 것이 될 수 있으며 필요한 경우 여러 아이템을 가질 수 있습니다)

그런 다음 다음을 사용하여 사용자 이름과 비밀번호를 설정할 수 있습니다.

[keychainItem setObject:@"password you are saving" forKey:kSecValueData];
[keychainItem setObject:@"username you are saving" forKey:kSecAttrAccount];

다음을 사용하여 가져 오십시오.

NSString *password = [keychainItem objectForKey:kSecValueData];
NSString *username = [keychainItem objectForKey:kSecAttrAccount];

또는 다음을 사용하여 삭제하십시오.

[keychainItem resetKeychainItem];


답변

여기에 래퍼의 ARC 버전이 필요하면 링크입니다 https://gist.github.com/1170641
덕분에


답변

키 체인 을 통한 매우 쉬운 솔루션 .

시스템 키 체인을위한 간단한 래퍼입니다. 그냥 추가 SSKeychain.h, SSKeychain.m, SSKeychainQuery.hSSKeychainQuery.m프로젝트에 파일을 당신의 목표에 Security.framework를 추가합니다.

비밀번호를 저장하려면

[SSKeychain setPassword:@"AnyPassword" forService:@"AnyService" account:@"AnyUser"]

비밀번호를 검색하려면 다음을 수행하십시오.

NSString *password = [SSKeychain passwordForService:@"AnyService" account:@"AnyUser"];

setPassword저장하려는 값은 어디에 있고 저장하려는 forService변수는 어디에 있고 계정은 암호 및 기타 정보의 사용자 / 개체에 대한 것입니다.


답변

당신은 간단하게 사용할 수 있습니다 NSURLCredential, 그것은 단지 두 줄의 코드로 키 체인에 사용자 이름과 암호를 모두 저장합니다 .

자세한 답변을 참조하십시오 .


답변

Obj-C와 ARC를 사용하여 iOS 8에서 키 체인을 사용하는 방법에 대답하기로 결정했습니다.

1) GIST의 keychainItemWrapper (ARCifief 버전)를 사용했습니다 :
https://gist.github.com/dhoerl/1170641/download-KeychainItemWrapper.h
및 .m을 프로젝트에 추가 (+ 복사)하십시오.

2) 프로젝트에 보안 프레임 워크 추가 (프로젝트> 빌드 단계> 바이너리와 라이브러리 링크 확인)

3) 키 체인을 사용하려는 .h 및 .m 파일에 보안 라이브러리 (#import) 및 KeychainItemWrapper (#import “KeychainItemWrapper.h”)를 추가하십시오.

4) 키 체인에 데이터를 저장하려면 :

NSString *emailAddress = self.txtEmail.text;
NSString *password = self.txtPasword.text;
//because keychain saves password as NSData object
NSData *pwdData = [password dataUsingEncoding:NSUTF8StringEncoding];

//Save item
self.keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
[self.keychainItem setObject:emailAddress forKey:(__bridge id)(kSecAttrAccount)];
[self.keychainItem setObject:pwdData forKey:(__bridge id)(kSecValueData)];

5) 데이터 읽기 (로드시 로그인 화면> viewDidLoad) :

self.keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];

self.txtEmail.text = [self.keychainItem objectForKey:(__bridge id)(kSecAttrAccount)];

//because label uses NSString and password is NSData object, conversion necessary
NSData *pwdData = [self.keychainItem objectForKey:(__bridge id)(kSecValueData)];
NSString *password = [[NSString alloc] initWithData:pwdData encoding:NSUTF8StringEncoding];
self.txtPassword.text = password;

즐겨!


답변

키 체인 래퍼를 사용하여 비밀번호를 검색하는 데 문제가있는 경우 다음 코드를 사용하십시오.

NSData *pass =[keychain objectForKey:(__bridge id)(kSecValueData)];
NSString *passworddecoded = [[NSString alloc] initWithData:pass
                                           encoding:NSUTF8StringEncoding];


답변

샘플 코드를 확인하십시오. 샘플 코드에서
먼저 사과 래퍼를 사용해 보았지만 이것은 훨씬 간단합니다.