Xác thực bằng Microsoft và C++

Bạn có thể cho phép người dùng xác thực bằng Firebase thông qua các nhà cung cấp OAuth như Microsoft Azure Active Directory bằng cách tích hợp tính năng Đăng nhập OAuth chung dựa trên nền tảng web vào ứng dụng của mình bằng Firebase SDK để thực hiện quy trình đăng nhập từ đầu đến cuối. Do quy trình này yêu cầu sử dụng SDK Firebase dựa trên điện thoại, nên quy trình này chỉ được hỗ trợ trên các nền tảng Android và Apple.

Trước khi bắt đầu

  1. Thêm Firebase vào dự án C++.
  2. Trong bảng điều khiển của Firebase, hãy mở phần Xác thực.
  3. Trên thẻ Sign in method (Phương thức đăng nhập), hãy bật nhà cung cấp Microsoft.
  4. Thêm Mã ứng dụng kháchMật khẩu ứng dụng khách từ bảng điều khiển dành cho nhà phát triển của nhà cung cấp đó vào cấu hình của nhà cung cấp:
    1. Để đăng ký ứng dụng OAuth của Microsoft, hãy làm theo hướng dẫn trong Bắt đầu nhanh: Đăng ký ứng dụng bằng điểm cuối Azure Active Directory v2.0. Lưu ý rằng điểm cuối này hỗ trợ đăng nhập bằng tài khoản cá nhân của Microsoft cũng như Azure Tài khoản Active Directory. Tìm hiểu thêm về Azure Active Directory v2.0.
    2. Khi bạn đăng ký ứng dụng với các nhà cung cấp này, hãy nhớ đăng ký *.firebaseapp.com cho dự án của bạn dưới dạng miền chuyển hướng cho .
  5. Nhấp vào Lưu.

Truy cập vào lớp firebase::auth::Auth

Lớp Auth là cổng vào cho tất cả lệnh gọi API.
  1. Thêm tệp tiêu đề Ứng dụng và Xác thực:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. Trong mã khởi chạy của bạn, hãy tạo một Lớp 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. Mua lớp firebase::auth::Auth cho firebase::App của bạn. Có một mối liên kết một với một giữa AppAuth.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Xử lý quy trình đăng nhập bằng Firebase SDK

Để xử lý quy trình đăng nhập bằng Firebase SDK, hãy làm theo các bước sau:

  1. Tạo một thực thể của FederatedOAuthProviderData được định cấu hình bằng mã nhà cung cấp của Microsoft.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
    
  2. Không bắt buộc: Chỉ định những thông số OAuth tuỳ chỉnh khác mà bạn muốn gửi cùng với yêu cầu 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";
    

    Để biết các tham số mà Microsoft hỗ trợ, hãy xem Tài liệu về OAuth của Microsoft. Lưu ý rằng bạn không thể chuyển các thông số bắt buộc của Firebase bằng setCustomParameters(). Các thông số này là client_id, response_type, redirect_uri, state, scoperesponse_mode.

    Để chỉ cho phép người dùng thuộc một đối tượng thuê Azure AD cụ thể ký vào ứng dụng, hoặc tên miền thân thiện của đối tượng thuê Azure AD hoặc có thể sử dụng giá trị nhận dạng GUID của đối tượng thuê. Có thể thực hiện việc này bằng cách chỉ định "người thuê nhà" trong đối tượng thông số tùy chỉnh.

    // 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. Không bắt buộc: Chỉ định các phạm vi OAuth 2.0 khác ngoài hồ sơ cơ bản mà bạn muốn yêu cầu từ nhà cung cấp dịch vụ xác thực.

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

    Để tìm hiểu thêm, hãy tham khảo Tài liệu về quyền của Microsoft và sự đồng ý.

  4. Sau khi dữ liệu của nhà cung cấp của bạn đã được định cấu hình, hãy sử dụng dữ liệu đó để tạo FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Xác thực bằng Firebase bằng đối tượng nhà cung cấp dịch vụ Xác thực. Xin lưu ý rằng không giống như các hoạt động FirebaseAuth khác, thao tác này sẽ kiểm soát giao diện người dùng bằng cách bật lên thiết lập một chế độ xem web để người dùng có thể nhập thông tin đăng nhập của mình.

    Để bắt đầu quy trình đăng nhập, hãy gọi SignInWithProvider:

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

    Sau đó, đơn đăng ký của bạn có thể chờ hoặc hãy đăng ký lệnh gọi lại trên Future.

    Bằng cách sử dụng mã truy cập OAuth, bạn có thể gọi hàm API Microsoft Graph.

    Không giống như các nhà cung cấp khác được tính năng Xác thực Firebase hỗ trợ, Microsoft không cung cấp URL ảnh và dữ liệu nhị phân cho ảnh hồ sơ phải được yêu cầu qua API Microsoft Graph.

  6. Mặc dù các ví dụ ở trên tập trung vào quy trình đăng nhập, bạn cũng có khả năng liên kết nhà cung cấp Microsoft Azure Active Directory với một đang sử dụng LinkWithProvider. Ví dụ: bạn có thể liên kết nhiều cho cùng một người dùng để cho phép họ đăng nhập bằng một trong hai nền tảng đó.

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. Bạn có thể dùng cùng một mẫu với ReauthenticateWithProvider, mẫu này có thể là dùng để truy xuất thông tin đăng nhập mới cho những hoạt động nhạy cảm cần đến lần đăng nhập gần đây.

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

    Sau đó, ứng dụng của bạn có thể chờ hoặc đăng ký lệnh gọi lại trên Tương lai.

Các bước tiếp theo

Sau khi người dùng đăng nhập lần đầu tiên, một tài khoản người dùng mới sẽ được tạo và được liên kết với thông tin đăng nhập—tức là tên người dùng và mật khẩu, số điện thoại số hoặc thông tin của nhà cung cấp dịch vụ xác thực – người dùng đã đăng nhập. Thông tin mới này được lưu trữ như một phần của dự án Firebase và có thể được dùng để xác định một người dùng trên mọi ứng dụng trong dự án của bạn, bất kể người dùng đăng nhập bằng cách nào.

  • Trong ứng dụng của mình, bạn có thể lấy thông tin hồ sơ cơ bản của người dùng từ Đối tượng 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();
    }
    
  • Trong Cơ sở dữ liệu theo thời gian thực của Firebase và Cloud Storage Quy tắc bảo mật, bạn có thể lấy mã nhận dạng người dùng duy nhất của người dùng đã đăng nhập từ biến auth, để kiểm soát loại dữ liệu mà người dùng có thể truy cập.

Bạn có thể cho phép người dùng đăng nhập vào ứng dụng của mình bằng nhiều phương thức xác thực bằng cách liên kết thông tin đăng nhập của nhà cung cấp dịch vụ xác thực với tài khoản người dùng hiện có.

Để đăng xuất một người dùng, hãy gọi SignOut():

auth->SignOut();