احراز هویت با استفاده از Microsoft و C++

شما می‌توانید با ادغام OAuth Login عمومی مبتنی بر وب در برنامه خود با استفاده از Firebase SDK برای انجام جریان ورود به سیستم سرتاسری، به کاربران خود اجازه دهید تا با استفاده از ارائه‌دهندگان OAuth مانند Microsoft Azure Active Directory، با Firebase احراز هویت کنند. از آنجایی که این جریان نیاز به استفاده از Firebase SDK های مبتنی بر تلفن دارد، فقط در پلتفرم‌های اندروید و اپل پشتیبانی می‌شود.

قبل از اینکه شروع کنی

  1. فایربیس را به پروژه ++C خود اضافه کنید .
  2. در کنسول Firebase ، به بخش امنیت > احراز هویت بروید.
  3. در تب روش ورود ، ارائه دهنده ورود به سیستم مایکروسافت را فعال کنید.
  4. شناسه کلاینت و راز کلاینت را از کنسول توسعه‌دهنده آن ارائه‌دهنده به پیکربندی ارائه‌دهنده اضافه کنید:
    1. برای ثبت یک کلاینت Microsoft OAuth، دستورالعمل‌های موجود در Quickstart را دنبال کنید: یک برنامه را با نقطه پایانی Azure Active Directory v2.0 ثبت کنید . توجه داشته باشید که این نقطه پایانی از ورود به سیستم با استفاده از حساب‌های شخصی مایکروسافت و همچنین حساب‌های Azure Active Directory پشتیبانی می‌کند. درباره Azure Active Directory v2.0 بیشتر بدانید.
    2. هنگام ثبت برنامه‌ها در این ارائه‌دهندگان، حتماً دامنه *.firebaseapp.com را برای پروژه خود به عنوان دامنه تغییر مسیر برای برنامه خود ثبت کنید.
  5. روی ذخیره کلیک کنید.

به کلاس firebase::auth::Auth دسترسی پیدا کنید

کلاس Auth دروازه‌ای برای تمام فراخوانی‌های API است.
  1. فایل‌های هدر Auth و App را اضافه کنید:
    #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);

مدیریت جریان ورود به سیستم با Firebase SDK

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

  1. یک نمونه از FederatedOAuthProviderData پیکربندی شده با شناسه ارائه دهنده مناسب برای مایکروسافت بسازید.

    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";
    

    برای پارامترهایی که مایکروسافت پشتیبانی می‌کند، به مستندات 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");
    

    برای کسب اطلاعات بیشتر، به مستندات مجوزها و رضایت‌نامه‌های مایکروسافت مراجعه کنید.

  4. پس از پیکربندی داده‌های ارائه‌دهنده، از آن برای ایجاد یک FederatedOAuthProvider استفاده کنید.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. با استفاده از شیء ارائه دهنده Auth، با Firebase احراز هویت کنید. توجه داشته باشید که برخلاف سایر عملیات FirebaseAuth، این کار با نمایش یک نمای وب که کاربر می‌تواند اعتبارنامه‌های خود را در آن وارد کند، کنترل رابط کاربری شما را به دست می‌گیرد.

    برای شروع جریان ورود، SignInWithProvider را فراخوانی کنید:

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

    سپس درخواست شما ممکن است منتظر بماند یا یک درخواست بازگشت به آینده ثبت کند .

    با استفاده از توکن دسترسی OAuth، می‌توانید Microsoft Graph API را فراخوانی کنید.

    برخلاف سایر ارائه‌دهندگان پشتیبانی‌شده توسط Firebase Auth، مایکروسافت آدرس اینترنتی عکس ارائه نمی‌دهد و در عوض، داده‌های دودویی برای عکس پروفایل باید از طریق Microsoft Graph API درخواست شوند.

  6. در حالی که مثال‌های بالا بر جریان‌های ورود به سیستم تمرکز دارند، شما همچنین می‌توانید با استفاده از LinkWithProvider یک ارائه‌دهنده Microsoft Azure Active Directory را به یک کاربر موجود پیوند دهید. به عنوان مثال، می‌توانید چندین ارائه‌دهنده را به یک کاربر پیوند دهید و به آنها اجازه دهید با هر یک از آنها وارد سیستم شوند.

    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();
    }
  • در قوانین امنیتی پایگاه داده و Cloud Storage Firebase Realtime Database ، می‌توانید شناسه کاربری منحصر به فرد کاربر وارد شده را از متغیر auth دریافت کنید و از آن برای کنترل داده‌هایی که کاربر می‌تواند به آنها دسترسی داشته باشد، استفاده کنید.

شما می‌توانید با پیوند دادن اعتبارنامه‌های ارائه‌دهنده‌ی احراز هویت به یک حساب کاربری موجود، به کاربران اجازه دهید با استفاده از چندین ارائه‌دهنده‌ی احراز هویت به برنامه‌ی شما وارد شوند.

برای خروج کاربر، تابع SignOut() فراخوانی کنید:

auth->SignOut();