فعال کردن احراز هویت بین برنامه‌ای با Apple Keychain مشترک

برای به اشتراک گذاشتن وضعیت‌های احراز هویت در چندین برنامه یا افزونه در پلتفرم‌های اپل، وضعیت احراز هویت را با استفاده از سرویس‌های Keychain در یک زنجیره کلید مشترک ذخیره کنید و برنامه‌های خود را برای استفاده از زنجیره کلید مشترک پیکربندی کنید.

این به کاربران اجازه می‌دهد تا:

  • یک بار وارد سیستم شوید و در تمام برنامه‌هایی که به یک گروه دسترسی مشابه تعلق دارند، وارد سیستم شوید.
  • یک بار از سیستم خارج شوید و در تمام برنامه‌هایی که به یک گروه دسترسی تعلق دارند، از سیستم خارج شوید.

اشتراک‌گذاری وضعیت احراز هویت بین برنامه‌ها

برای اشتراک‌گذاری وضعیت احراز هویت بین برنامه‌ها:

  1. یک گروه دسترسی برای برنامه‌هایتان تنظیم کنید.

    می‌توانید از یک گروه دسترسی به Keychain یا یک گروه برنامه استفاده کنید. برای جزئیات بیشتر به اشتراک‌گذاری دسترسی به موارد Keychain در میان مجموعه‌ای از برنامه‌ها مراجعه کنید.

    برای تنظیم یک گروه دسترسی keychain، برای هر برنامه موارد زیر را انجام دهید:

    1. در Xcode، به تنظیمات پروژه > قابلیت‌ها بروید.
    2. اشتراک‌گذاری Keychain را فعال کنید.
    3. یک شناسه گروه keychain اضافه کنید. برای همه برنامه‌هایی که می‌خواهید وضعیت آنها را به اشتراک بگذارید، از یک شناسه یکسان استفاده کنید.
  2. در هر برنامه، گروه دسترسی را روی گروه دسترسی keychain یا گروه برنامه‌ای که در مرحله قبل ایجاد کرده‌اید، تنظیم کنید.

    سویفت

    do {
      try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1")
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    هدف-سی

    [FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1"
                                       error:nil];
    
  3. حداقل در یک برنامه، با هر روش ورود به سیستم، کاربر را وارد سیستم کنید.

    سویفت

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    

    هدف-سی

    [FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result,
                                               NSError *_Nullable error) {
      // User signed in
    }];
    

    کاربر فعلی در تمام برنامه‌های موجود در گروه دسترسی، در دسترس است.

    سویفت

    var user = Auth.auth().currentUser
    

    هدف-سی

    FIRUser *user = FIRAuth.auth.currentUser;
    

بازگشت به یک جاکلیدی غیراشتراکی

  1. برای متوقف کردن اشتراک‌گذاری وضعیت احراز هویت، گروه دسترسی را روی nil تنظیم کنید.

    سویفت

    do {
      try Auth.auth().useUserAccessGroup(nil)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    هدف-سی

    [FIRAuth.auth useUserAccessGroup:nil error:nil];
    
  2. کاربر را با هر روش ورود به سیستم وارد کنید. وضعیت کاربر برای هیچ برنامه دیگری در دسترس نخواهد بود.

    سویفت

    Auth.auth().signInAnonymously { result, error in
      // User signed in
    }
    

    هدف-سی

    [FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result,
                                       NSError *_Nullable error) {
      // User signed in
    }];
    

انتقال یک کاربر وارد شده به یک keychain مشترک

برای انتقال کاربری که قبلاً وارد سیستم شده است به یک حالت مشترک:

  1. برای استفاده‌های بعدی، به کاربر فعلی ارجاع دهید.

    سویفت

    var user = Auth.auth().currentUser
    

    هدف-سی

    FIRUser *user = FIRAuth.auth.currentUser;
    
  2. (اختیاری) وضعیت مجوز گروه دسترسی که می‌خواهید به اشتراک بگذارید را بررسی کنید.

    سویفت

    let accessGroup = "TEAMID.com.example.group1"
    var tempUser: User?
    do {
      try tempUser = Auth.auth().getStoredUser(forAccessGroup: accessGroup)
    } catch let error as NSError {
      print("Error getting stored user: %@", error)
    }
    if tempUser != nil {
      // A user exists in the access group
    } else {
      // No user exists in the access group
    }
    

    هدف-سی

    NSString *accessGroup = @"TEAMID.com.example.group1";
    FIRUser *tempUser = [FIRAuth getStoredUserForAccessGroup:accessGroup
                                                       error:nil];
    if (tempUser) {
      // A user exists in the access group
      } else {
      // No user exists in the access group
    }
    
  3. از یک گروه دسترسی که قبلاً در تنظیمات پروژه تنظیم کرده‌اید، استفاده کنید.

    سویفت

    do {
      try Auth.auth().useUserAccessGroup(accessGroup)
    } catch let error as NSError {
      print("Error changing user access group: %@", error)
    }
    

    هدف-سی

    [FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
    
  4. کاربر فعلی را به‌روزرسانی کنید.

    سویفت

    Auth.auth().updateCurrentUser(user!) { error in
      // Error handling
    }
    

    هدف-سی

    [FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) {
      // Error handling
    }];
    
  5. اکنون سایر برنامه‌هایی که به همان گروه دسترسی دارند، می‌توانند به کاربر دسترسی داشته باشند.