আইওএস: কোনও অ্যাপ্লিকেশনটির মধ্যে ব্যবহারকারীর নাম / পাসওয়ার্ড কীভাবে সংরক্ষণ করবেন?


276

আমার আইওএস অ্যাপে আমার লগইন-স্ক্রিন রয়েছে। ব্যবহারকারীর নাম এবং পাসওয়ার্ড সংরক্ষণ করা হবে NSUserDefaultsএবং আপনি আবার অ্যাপ্লিকেশন প্রবেশ করার পরে আবার লগইন-স্ক্রিনে লোড করা হবে (অবশ্যই, NSUserDefaultsস্থায়ী হয়)।

এখন, ব্যবহারকারীর ব্যবহারকারীর নাম / পাসওয়ার্ড সংরক্ষণ বৈশিষ্ট্যটি অক্ষম করার সম্ভাবনা রয়েছে।

সুতরাং NSUserDefaultsতারপর পরিষ্কার করা হবে।

তবে আমার অ্যাপ্লিকেশনটিতে ব্যবহারকারীর ডাটাবেস প্রশ্নের জন্য এই ব্যবহারকারীর নাম / পাসওয়ার্ডটি আমার প্রয়োজন। সুতরাং: ডাটা বাদে কোথায় রাখবেন NSUserDefaults? (ব্যবহারকারী অ্যাপ বা লগআউটটি ছেড়ে দিলে এই জায়গাটি মুছে ফেলা যাবে)।


ব্যবহারকারী কেবলমাত্র ডিভাইসটি রিসেট করে বা অ্যাপ্লিকেশনটি সরিয়েই এটি সাফ করতে পারে। আমি কিছু অনুপস্থিত করছি?

3
এবং যাইহোক, ব্যবহারকারী অ্যাপটি ছাড়ার সময় যদি ডেটা মুছে ফেলা উচিত, তবে কেন এটি কেবল র‌্যামে রাখবেন না?

10
এনএসইউসারডেফল্টের পরিবর্তে ব্যবহারকারীর নাম এবং পাসওয়ার্ড সংরক্ষণের জন্য আপনার কেচেইন ব্যবহারের গুরুত্ব সহকারে বিবেচনা করা উচিত।
ফিলিপ রাদেলিক


দয়া করে আমাকে কী হিসাবে সর্বদা কেসেকভ্যালু ডেটা এবং কেসেকভ্যালু ডেটা ব্যবহার করা উচিত? অথবা আমি কী হিসাবে কোনও স্ট্রিং ব্যবহার করতে পারি?
নে এএস

উত্তর:


424

ব্যবহারকারীর নাম এবং পাসওয়ার্ড সংরক্ষণ করার জন্য আপনার সর্বদা কীচেইন ব্যবহার করা উচিত এবং যেহেতু এটি সুরক্ষিতভাবে সঞ্চিত থাকে এবং কেবল আপনার অ্যাপ্লিকেশনটিতে অ্যাক্সেসযোগ্য তাই অ্যাপটি ছাড়ার পরে এটি মুছতে হবে না (যদি এটি আপনার উদ্বেগ ছিল)।

অ্যাপল এমন নমুনা কোড সরবরাহ করে যা কীচেন আইটেমগুলি সংরক্ষণ করে, পড়তে এবং মুছে ফেলতে পারে এবং কীভাবে সেই চ্যানেলটি কীচেইন ব্যবহার করে সহজতর করে সেই নমুনা থেকে কীচেইন র‌্যাপার শ্রেণিটি কীভাবে ব্যবহার করবেন।

সিকিউরিটি.ফ্রেমেওয়ার্ক অন্তর্ভুক্ত করুন (এক্সকোড 3 তে ফ্রেমওয়ার্কগুলি ফোল্ডারে ডান ক্লিক করুন এবং বিদ্যমান কাঠামো যুক্ত করুন X এক্সকোড 4 এ আপনার প্রকল্প নির্বাচন করুন, তারপরে লক্ষ্য নির্বাচন করুন, বিল্ড পর্যায়গুলি ট্যাবে যান এবং ফাইলগুলি লিংক বাইনারি উইথ ফাইলের অধীনে + ক্লিক করুন) এবং কীচেইনআইটেমরাপ। এইচ। আপনার প্রকল্পে মি ফাইলগুলি, আপনার কীচেইন ব্যবহার করার প্রয়োজন সেখানেই .h ফাইলটিকে ইমপোর্ট করুন এবং তারপরে এই শ্রেণীর উদাহরণ তৈরি করুন:

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

(আপনার অ্যাপলগিন আপনার কীচেইন আইটেমটি কল করার জন্য চয়ন করা কিছু হতে পারে এবং প্রয়োজনে আপনার একাধিক আইটেম থাকতে পারে)

তারপরে আপনি ব্যবহার করে ব্যবহারকারীর নাম এবং পাসওয়ার্ড সেট করতে পারেন:

[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];

5
আমি আমার উত্তরটি কোড এবং বিবরণ দিয়ে আপডেট করেছি। এটি যতটা কঠিন আপনি ভাবেন তেমন শক্ত নয়।
ফিলিপ রাদেলিক

44
ATTANTION! দয়া করে আপনার উত্তরে যুক্ত করুন, এটি কেবল "ক্যাপচেনইচেনআইটেমরাপ" যথেষ্ট নয়! আমার সমস্যা ছিল, যে আমি এটি পরে তৈরি করতে পারি না! আপনার প্রজেক্টে আপনাকে অবশ্যই সুরক্ষা.ফ্রেমওয়ার্ক যুক্ত করতে হবে যা কীচেইন আইটেম র্যাপার কাজ করবে! (কীভাবে: প্রকল্প নির্বাচন করুন -> লক্ষ্য নির্বাচন করুন -> ট্যাব নির্বাচন করুন "বিল্ড পর্যায়সমূহ" -> "লিবারির সাথে বাইনারি লিঙ্ক করুন" -> "+" -> সুরক্ষা যোগ করুন
ra ফ্রেমওয়ার্ক নির্বাচন

63
এআরসি ব্যবহার করার সময়, কম্পাইলার ধ্রুবক ব্যবহার করার জন্য আপনাকে চিত্কার করবে kSecValueDataএবং kSecAttrAccountউদ্দেশ্য সি কোডে, তাই তাদের ব্যবহার নিক্ষেপ নিশ্চিত করা (__bridge id), যেমন, [keychainItem setObject:obj forKey:(__bridge id)kSecValueData];
জো Hankin

7
কিচাইনআইটেমরাপ্পার.এম 196 লাইনে একটি মেমরি ফাঁস হয়েছে বলে মনে হচ্ছে the "সেলফ.কিচাইন আইটেমডাটা =" [[[এনএসমেট্যাবলডোরিয়েশন বরাদ্দ] init] অটোরিলেজ]] এ লাইন পরিবর্তন করা; " এটি ঠিক করে
অলিফ

12
এআরসি ব্যবহার করার সময় আপডেটড কোডটি অ্যাপল এখানে দিয়েছে । তালিকা 2-1 দেখুন। যদিও পন্থা একই রকম।
রিক


48

কীচেইনগুলির মাধ্যমে খুব সহজ সমাধান ।

এটি সিস্টেম কীচেইনের জন্য একটি সহজ মোড়ক। শুধু যোগ SSKeychain.h, SSKeychain.m, SSKeychainQuery.hএবং SSKeychainQuery.mআপনার প্রকল্পের ফাইল এবং আপনার টার্গেটের Security.framework যোগ করুন।

একটি পাসওয়ার্ড সংরক্ষণ করতে:

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

একটি পাসওয়ার্ড পুনরুদ্ধার করতে:

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

আপনি কোথায় setPasswordকোন মানটি সংরক্ষণ করতে চান এবং forServiceকোন ভেরিয়েবলের অধীনে এটি সংরক্ষণ করতে চান এবং অ্যাকাউন্টটি ব্যবহারকারী / اعتراض পাসওয়ার্ড এবং অন্য কোনও তথ্যের জন্য for


আপনি কীভাবে একই ব্যবহারকারীর নাম এবং পাসওয়ার্ড সহ অ্যাপ্লিকেশনগুলিকে সিঙ্ক্রোনাইজ করতে sskeychain ব্যবহার করবেন তা জানেন?
জো শামুরাক

4
আপনি কীভাবে একটি পাসওয়ার্ড ছাড়াও একটি ব্যবহারকারীর নাম সংরক্ষণ করবেন? কীভাবে আপনি এসএসকিচেইন থেকে একটি সম্পূর্ণ অ্যাকাউন্ট মুছবেন? উভয়ই দস্তাবেজের উল্লেখ করা হয়নি
user798719

2
ব্যবহারকারীর নাম পেতে NSString *username = [[SSKeychain accountsForService:@"AnyService"][0] valueForKey:@"acct"]। যদি আপনি কেবল একটি অ্যাকাউন্ট ব্যবহার করেন তবে এটি কাজ করতে হবে। সর্বদা হিসাবে, অ্যাক্সেস সূচক 0 চেষ্টা করার আগে অ্যারের দৈর্ঘ্য চেক নিশ্চিত করা
জ্যারেড দাম

27

আপনি সহজভাবে ব্যবহার করতে পারেন NSURLCredential, এটি কোডের দুটি মাত্র লাইনের কীচেইনে ব্যবহারকারীর নাম এবং পাসওয়ার্ড উভয়টি সংরক্ষণ করবে ।

আমার বিস্তারিত উত্তর দেখুন


13

আমি ওবজে-সি এবং এআরসি ব্যবহার করে কীভাবে আইওএস 8-এ কীচেন ব্যবহার করবেন তার উত্তর দেওয়ার সিদ্ধান্ত নিয়েছি।

1) আমি জিআইএসটি থেকে কীচেইন আইটেমওয়্যার্পার (এআরসিফিফ সংস্করণ) ব্যবহার করেছি: https://gist.github.com/dhoerl/1170641/download - আপনার প্রকল্পে কীচেইনআইটেমওয়্যার্পার এবং .m যোগ করুন (+ অনুলিপি করুন)

2) আপনার প্রকল্পে সুরক্ষা কাঠামো যুক্ত করুন (প্রকল্পে চেক করুন> পর্যায়গুলি তৈরি করুন> গ্রন্থাগারগুলির সাথে বাইনারি লিঙ্ক করুন)

3) আপনি কীচেইন ব্যবহার করতে চান সেখানে .h এবং .m ফাইলে সুরক্ষা গ্রন্থাগার (# আইপোর্ট) এবং কীচেইন আইটেমওয়্যার্পার (# মিম্পোর্ট "কীচেইনআইটেমরাপ্পার। 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) ডেটা পড়ুন (সম্ভবত লোডিংয়ের স্ক্রিনটি> ভিউডিডলোড):

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;

উপভোগ করুন!


11

আপনার যদি কীচেন মোড়ক ব্যবহার করে পাসওয়ার্ড পুনরুদ্ধার করতে সমস্যা হয় তবে এই কোডটি ব্যবহার করুন:

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

3

এই নমুনা কোডটি চেকআউট করুন আমি প্রথমে নমুনা কোড থেকে অ্যাপলের মোড়ক চেষ্টা করেছি তবে এটি আমার পক্ষে অনেক সহজ


2

আর একবার চেষ্টা কর:

 KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
[keychainItem setObject:@"password you are saving" forKey:kSecValueData]; 
[keychainItem setObject:@"username you are saving" forKey:kSecAttrAccount];

এটা সাহায্য করবে।


2

আমি কীচেইনআইটিমেট্র্যাপার (এআরসি সংস্করণ) ব্যবহার করে দেখেছি তবে এর উদ্দেশ্য সি র‍্যাপারটি পছন্দসই হিসাবে আমি পাইনি।

আমি এই সমাধানটি কিশিকাওয়া ক্যাটসুমির দ্বারা ব্যবহার করেছি , যার অর্থ আমি কম কোড লিখেছি এবং এনএসএস স্ট্রিংয়ের মানগুলি সংরক্ষণ করার জন্য ক্যাসেট ব্যবহার করতে হবে না।

সংরক্ষণের দুটি উদাহরণ:

[UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username"];
[UICKeyChainStore setString:@"P455_w0rd$1$G$Z$" forKey:@"password"];

পুনরুদ্ধার দুটি উদাহরণ

UICKeyChainStore *store = [UICKeyChainStore keyChainStore];
    // or
UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"YOUR_SERVICE"];

NSString *username = [store stringForKey:@"username"];
NSString *password = [store stringForKey:@"password"];

2

উপরের কোডে একটি ছোট বাগ রয়েছে (ডেভ দ্বারা এটি আপনার পোস্টকে অনেক সহায়ক হয়েছিল ধন্যবাদ আপনাকে ধন্যবাদ)

যে অংশে আমরা শংসাপত্রগুলি সংরক্ষণ করি সেগুলিতে এটি সঠিকভাবে কাজ করার জন্য নিম্নলিখিত কোডও প্রয়োজন।

[self.keychainItem setObject:@"myCredentials" forKey:(__bridge id)(kSecAttrService)];

সম্ভবত সম্ভবত কারণ দ্বিতীয়বার আমরা একই শংসাপত্রগুলির সাথে সাইন ইন করার (পুনরায়) চেষ্টা করার ফলে এটি ইতিমধ্যে কীচেইন আইটেমগুলিতে নির্ধারিত এবং অ্যাপ ক্র্যাশ পেয়েছে। উপরের কোড সহ এটি একটি কবজ মত কাজ করে।


2

এই প্রশ্নটি আপডেট করতে:

যারা সুইফ্ট চেকআউট ব্যবহার করছেন তাদের জন্য মিহাই কোস্টিয়া সমর্থনকারী অ্যাক্সেস গ্রুপগুলির দ্বারা এই টানুন এবং ড্রপ সুইফট বাস্তবায়ন:

https://github.com/macostea/KeychainItemWrapper.swift/blob/master/KeychainItemWrapper.swift

কীচেন ব্যবহার করার আগে: পাসওয়ার্ড সংরক্ষণের আগে দু'বার বিবেচনা করুন। অনেক ক্ষেত্রে একটি প্রমাণীকরণ টোকেন (যেমন একটি অধ্যবসায়ের সেশন আইডি) সংরক্ষণ করা এবং ইমেল বা অ্যাকাউন্টের নাম যথেষ্ট হতে পারে। অননুমোদিত অ্যাক্সেস ব্লক করতে আপনি সহজেই প্রমাণীকরণ টোকেনগুলি অকার্যকর করতে পারেন, ব্যবহারকারীকে আপোস করা ডিভাইসে আবার লগইন করা প্রয়োজন তবে পুনরায় সেট করা পাসওয়ার্ডের প্রয়োজন হয় না এবং সমস্ত ডিভাইসে আবার লগইন করতে হয় (আমরা কেবল অ্যাপল ব্যবহার করছি না?)?


1

তবে, এখন আপনি কীচেইন মোড়কের পরিবর্তে এনআরএল ক্রেনডেনশিয়ালের জন্য যেতে পারেন। এটি আমাদের যা করা দরকার তা করে।



0

নিম্নলিখিতটি ঠিক কাজ করা উচিত:

KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
[keychainItem setObject:@"password you are saving" forKey:kSecValueData]; 
[keychainItem setObject:@"username you are saving" forKey:kSecAttrAccount];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.