หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

รับรองความถูกต้องโดยใช้ Microsoft และ C ++

คุณสามารถอนุญาตให้ผู้ใช้รับรองความถูกต้องกับ Firebase โดยใช้ผู้ให้บริการ OAuth เช่น Microsoft Azure Active Directory โดยการรวมเข้าสู่ระบบ OAuth ทั่วไปบนเว็บเข้ากับแอปของคุณโดยใช้ Firebase SDK เพื่อดำเนินการสิ้นสุดขั้นตอนการลงชื่อเข้าใช้ เนื่องจากโฟลว์นี้ต้องการการใช้ Firebase SDK บนโทรศัพท์จึงรองรับเฉพาะแพลตฟอร์ม Android และ iOS

ก่อนที่จะเริ่ม

  1. เพิ่ม Firebase ให้กับโครงการ C ++ ของ คุณ
  2. ในโครงการระดับ build.gradle ไฟล์ให้แน่ใจว่าจะรวมถึงพื้นที่เก็บข้อมูล Maven ของ Google ในทั้งสองของคุณ buildscript และ allprojects ส่วน
  3. ใน คอนโซล Firebase ให้เปิดส่วน Auth
  4. บนแท็บ วิธีลงชื่อเข้า ใช้ให้เปิดใช้งานผู้ให้บริการ ของ Microsoft
  5. เพิ่ม รหัสลูกค้า และ ความลับลูกค้า จากคอนโซลนักพัฒนาซอฟต์แวร์ของผู้ให้บริการไปยังการกำหนดค่าผู้ให้บริการ:
    1. ในการลงทะเบียนไคลเอนต์ Microsoft OAuth ให้ทำตามคำแนะนำใน Quickstart: ลงทะเบียนแอพด้วย Azure Active Directory v2.0 endpoint โปรดทราบว่าปลายทางนี้รองรับการลงชื่อเข้าใช้โดยใช้บัญชีส่วนบุคคลของ Microsoft รวมถึงบัญชี Azure Active Directory เรียนรู้เพิ่มเติม เกี่ยวกับ Azure Active Directory v2.0
    2. เมื่อลงทะเบียนแอปกับผู้ให้บริการเหล่านี้โปรดลงทะเบียนโดเมน *.firebaseapp.com สำหรับโครงการของคุณเป็นโดเมนเปลี่ยนเส้นทางสำหรับแอปของคุณ
  6. คลิก บันทึก

เข้าถึง firebase::auth::Auth class firebase::auth::Auth

คลาส Auth เป็นเกตเวย์สำหรับการโทร API ทั้งหมด
  1. เพิ่มไฟล์ส่วนหัว Auth และ App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. ในรหัสเริ่มต้นของคุณสร้าง firebase::App คลาส 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 class firebase::auth::Auth สำหรับ firebase::App คุณ มีการแมปแบบหนึ่งต่อหนึ่งระหว่าง App และการ Auth
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

จัดการโฟลว์การลงชื่อเข้าใช้ด้วย Firebase SDK

หากต้องการจัดการโฟลว์การลงชื่อเข้าใช้ด้วย Firebase SDK ให้ทำตามขั้นตอนเหล่านี้:

  1. สร้างอินสแตนซ์ของ FederatedOAuthProviderData กำหนดค่าด้วย id ผู้ให้บริการที่เหมาะสมสำหรับ 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 ต่างจากการดำเนินการอื่น ๆ ซึ่งจะควบคุม UI ของคุณด้วยการเปิดมุมมองเว็บที่ผู้ใช้สามารถป้อนข้อมูลประจำตัวของพวกเขา

    หากต้องการเริ่มโฟลว์การลงชื่อเข้าใช้ให้โทร signInWithProvider :

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

    ใบสมัครของคุณอาจรอหรือ ลงทะเบียนการโทรกลับในอนาคต

    การใช้โทเค็นการเข้าถึง OAuth คุณสามารถเรียก Microsoft Graph API

    ซึ่งแตกต่างจากผู้ให้บริการรายอื่นที่สนับสนุนโดย Firebase Auth Microsoft ไม่ได้จัดทำ URL รูปถ่าย แต่จะต้องมีการร้องขอข้อมูลไบนารีสำหรับรูปโปรไฟล์ผ่าน Microsoft Graph API

  6. ในขณะที่ตัวอย่างข้างต้นมุ่งเน้นไปที่ขั้นตอนการลงชื่อเข้าใช้คุณยังมีความสามารถในการเชื่อมโยงผู้ให้บริการ Microsoft Azure Active Directory กับผู้ใช้ที่มีอยู่โดยใช้ LinkWithProvider ตัวอย่างเช่นคุณสามารถเชื่อมโยงผู้ให้บริการหลายรายกับผู้ใช้เดียวกันทำให้ผู้ใช้ลงชื่อเข้าใช้ด้วย

     firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
     
  7. รูปแบบเดียวกันสามารถใช้กับ ReauthenticateWithProvider ซึ่งสามารถใช้เพื่อดึงข้อมูลประจำตัวใหม่สำหรับการดำเนินการที่ละเอียดอ่อนที่ต้องใช้การเข้าสู่ระบบล่าสุด

     firebase::Future<firebase::auth::SignInResult> result =
      user->ReauthenticateWithProvider(provider_data);
     

    ใบสมัครของคุณอาจรอหรือ ลงทะเบียนการโทรกลับในอนาคต

ขั้นตอนถัดไป

หลังจากผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรกบัญชีผู้ใช้ใหม่จะถูกสร้างและเชื่อมโยงกับข้อมูลรับรองนั่นคือชื่อผู้ใช้และรหัสผ่านหมายเลขโทรศัพท์หรือข้อมูลผู้ให้บริการรับรองความถูกต้อง - ผู้ใช้ที่ลงชื่อเข้าใช้ด้วย บัญชีใหม่นี้ถูกจัดเก็บเป็นส่วนหนึ่งของโครงการ Firebase ของคุณและสามารถใช้เพื่อระบุผู้ใช้ในทุกแอปในโครงการของคุณโดยไม่คำนึงว่าผู้ใช้ลงชื่อเข้าใช้อย่างไร

  • ในแอพของคุณคุณสามารถรับข้อมูลโปรไฟล์พื้นฐานของผู้ใช้จาก firebase::auth::User วัตถุ firebase::auth::User :

    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      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 Realtime และ Cloud Storage Security คุณสามารถรับ ID ผู้ใช้เฉพาะของผู้ใช้ที่ลงชื่อเข้าใช้จากตัวแปร auth และใช้เพื่อควบคุมข้อมูลที่ผู้ใช้สามารถเข้าถึงได้

คุณสามารถอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้แอปของคุณโดยใช้ผู้ให้บริการการตรวจสอบความถูกต้องหลายคนโดย เชื่อมโยงข้อมูลรับรองผู้ให้บริการรับรองความถูกต้องกับบัญชีผู้ใช้ที่มีอยู่

ในการออกจากระบบผู้ใช้โทร SignOut() :

auth->SignOut();