المصادقة باستخدام Microsoft وC++

يمكنك السماح للمستخدمين بالمصادقة من خلال Firebase باستخدام موفّري OAuth مثل Microsoft Azure Active Directory من خلال دمج تسجيل دخول OAuth العام المستند إلى الويب إلى تطبيقك باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase لتسجيل الدخول من البداية إلى النهاية. ونظرًا لأن هذا المسار يتطلب استخدام حِزم تطوير البرامج (SDK) لمنصة Firebase المستندة إلى الهاتف، فيتم معتمد على أنظمة التشغيل Android وApple.

قبل البدء

  1. أضف Firebase إلى مشروع C++.
  2. في وحدة تحكُّم Firebase، افتح قسم المصادقة.
  3. في علامة التبويب طريقة تسجيل الدخول، فعِّل موفّر خدمة Microsoft.
  4. أضِف Client-ID (معرّف العميل) وClient Secret (سر العميل) من وحدة تحكّم المطوّرين لدى هذا الموفّر إلى إعداد موفِّر الخدمة:
    1. لتسجيل عميل OAuth من Microsoft، اتّبِع التعليمات الواردة في التشغيل السريع: تسجيل تطبيق باستخدام نقطة نهاية Azure Active Directory v2.0. تجدر الإشارة إلى أنّ نقطة النهاية هذه تتيح تسجيل الدخول باستخدام حسابات Microsoft الشخصية بالإضافة إلى Azure. حسابات Active Directory. مزيد من المعلومات حول الإصدار 2.0 من Azure Active Directory.
    2. عند تسجيل التطبيقات لدى مقدّمي الخدمات هؤلاء، يُرجى التأكّد من تسجيل نطاق *.firebaseapp.com لمشروعك كنطاق إعادة التوجيه التطبيق.
  5. انقر على حفظ.

الوصول إلى الصف firebase::auth::Auth

الفئة Auth هي مدخل جميع طلبات البيانات من واجهة برمجة التطبيقات.
  1. إضافة ملفات رؤوس التطبيقات والمصادقة:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. في رمز الإعداد، أنشئ صف واحد (firebase::App).
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. الحصول على الصف firebase::auth::Auth لـ firebase::App هناك ربط واحد لواحد بين App وAuth.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

معالجة عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase

لمعالجة عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase، اتّبِع الخطوات التالية:

  1. إنشاء مثيل لـ FederatedOAuthProviderData تم ضبطه باستخدام معرّف الموفر المناسب لـ Microsoft.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. اختياري: تحديد مَعلمات OAuth المخصَّصة الإضافية التي تريد الإرسال باستخدام طلب OAuth.

    // Prompt user to re-authenticate to Microsoft.
    provider_data.custom_parameters["prompt"] = "login";
    
    // Target specific email with login hint.
    provider_data.custom_parameters["login_hint"] =
        "user@firstadd.onmicrosoft.com";
    

    بالنسبة إلى المعلمات التي تدعمها Microsoft، يمكنك الاطلاع على مستندات Microsoft OAuth تجدر الإشارة إلى أنّه لا يمكنك تمرير المَعلمات المطلوبة في Firebase مع setCustomParameters() هذه المَعلمات هي client_id response_type وredirect_uri وstate وscope response_mode.

    السماح فقط للمستخدمين من مستأجر Azure AD معيّن بالتوقيع في التطبيق، إما اسم النطاق المناسب لمستأجر Azure AD أو يمكن استخدام المعرّف الفريد العالمي (GUID) للمستأجر. يمكن القيام بذلك من خلال تحديد "المستأجر" في كائن المعلمات المخصصة.

    // Optional "tenant" parameter in case you are using an Azure AD tenant.
    // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com'
    // or "common" for tenant-independent tokens.
    // The default value is "common".
    provider_data.custom_parameters["tenant"] ="TENANT_ID";
    
  3. اختياري: حدِّد نطاقات OAuth 2.0 الإضافية بخلاف الملف الشخصي الأساسي الذي التي ترغب في طلبها من مُقدِّم خدمة المصادقة.

    provider_data.scopes.push_back("mail.read");
    provider_data.scopes.push_back("calendars.read");
    

    لمزيد من المعلومات، يُرجى الرجوع إلى مستندات الموافقة وأذونات Microsoft

  4. بعد ضبط بيانات مزوِّد الخدمة، يمكنك استخدامها لإنشاء FederatedOAuthProvider

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. يمكنك المصادقة مع Firebase باستخدام عنصر موفّر المصادقة. لاحظ أنه على عكس عمليات FirebaseAuth الأخرى، سيتحكم هذا في واجهة المستخدم من خلال فرقعة عرض ويب يمكن للمستخدم من خلاله إدخال بيانات الاعتماد.

    لبدء عملية تسجيل الدخول، يمكنك الاتصال بالرقم SignInWithProvider:

    firebase::Future<firebase::auth::AuthResult> result =
      auth->SignInWithProvider(provider_data);
    

    قد ينتظر طلبك بعد ذلك أو تسجيل طلب معاودة الاتصال في المستقبل

    باستخدام رمز الدخول عبر OAuth، يمكنك طلب Microsoft Graph API:

    وعلى عكس الموفّرين الآخرين الذين يتيحون مصادقة Firebase، لا تفعل Microsoft توفير عنوان URL لصورة، وبدلاً من ذلك، يتعين على البيانات الثنائية لصورة الملف الشخصي عن طريق Microsoft Graph API:

  6. بينما تركز الأمثلة أعلاه على تدفقات تسجيل الدخول، لديك أيضًا إمكانية ربط موفّر خدمة Microsoft Azure Active Directory بمقدّم حالي مستخدم يستخدم LinkWithProvider. على سبيل المثال، يمكنك ربط عدة مواقع مقدمي الخدمة للمستخدم نفسه مما يسمح لهم بتسجيل الدخول باستخدام أي منهما.

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. يمكن استخدام النمط نفسه مع ReauthenticateWithProvider الذي يمكن تُستخدم لاسترداد بيانات اعتماد جديدة للعمليات الحساسة التي تتطلب تسجيل دخول حديث.

    firebase::Future<firebase::auth::AuthResult> result =
      user.ReauthenticateWithProvider(provider_data);
    

    قد ينتظر تطبيقك بعد ذلك أو يسجّل معاودة الاتصال على المستقبل.

الخطوات التالية

بعد تسجيل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد المرتبطة ببيانات الاعتماد - أي اسم المستخدم وكلمة المرور، أو الرقم أو معلومات مقدم المصادقة - المستخدم الذي سجّل الدخول باستخدامه. هذا الجديد كجزء من مشروع Firebase، ويمكن استخدامه لتحديد مستخدم في كل تطبيق في مشروعك، بغض النظر عن كيفية تسجيل دخوله.

  • في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من كائن firebase::auth::User:

    firebase::auth::User user = auth->current_user();
    if (user.is_valid()) {
      std::string name = user.display_name();
      std::string email = user.email();
      std::string photo_url = user.photo_url();
      // The user's ID, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server,
      // if you have one. Use firebase::auth::User::Token() instead.
      std::string uid = user.uid();
    }
    
  • في "قاعدة بيانات Firebase في الوقت الفعلي" وCloud Storage قواعد الأمان، يمكنك الحصول على معرّف المستخدم الفريد للمستخدم الذي سجّل الدخول من المتغير auth، واستخدامها للتحكم في البيانات التي يمكن للمستخدم الوصول إليها

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام طرق مصادقة متعددة. موفِّري خدمة المصادقة من خلال ربط بيانات اعتماد موفر المصادقة حساب مستخدم حالي

لتسجيل خروج مستخدم، اتصل بالرقم SignOut():

auth->SignOut();