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

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

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

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

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

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

  1. یک گروه دسترسی برای برنامه های خود راه اندازی کنید.

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

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

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

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

یک کاربر وارد شده به سیستم را به یک زنجیره کلید مشترک منتقل کنید

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

  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. اکنون کاربر می تواند توسط برنامه های دیگری که به همان گروه دسترسی دسترسی دارند، دسترسی داشته باشد.