אתם יכולים לאפשר למשתמשים שלכם לעבור אימות ב-Firebase באמצעות ספקי OAuth כמו Microsoft Azure Active Directory. לשם כך, צריך לשלב באפליקציה שלכם כניסה כללית מבוססת-אינטרנט באמצעות OAuth באמצעות Firebase SDK כדי לבצע את תהליך הכניסה מקצה לקצה. התהליך הזה מחייב שימוש בערכות ה-SDK של Firebase שמבוססות על טלפון, ולכן הוא נתמך רק בפלטפורמות Android ו-Apple.
לפני שמתחילים
- איך מוסיפים את Firebase לפרויקט C++
- במסוף Firebase, עוברים אל Security (אבטחה) > Authentication (אימות).
- בכרטיסייה שיטת כניסה, מפעילים את ספק הכניסה של מיקרוסופט.
-
מוסיפים את מזהה הלקוח ואת סוד הלקוח ממסוף המפתחים של הספק להגדרות הספק:
- כדי לרשום לקוח Microsoft OAuth, פועלים לפי ההוראות במאמר Quickstart: Register an app with the Azure Active Directory v2.0 endpoint. שימו לב שנקודת הקצה הזו תומכת בכניסה באמצעות חשבונות מיקרוסופט אישיים וגם באמצעות חשבונות Azure Active Directory. מידע נוסף על Azure Active Directory v2.0
-
כשרושמים אפליקציות אצל הספקים האלה, חשוב לרשום את הדומיין
*.firebaseapp.comשל הפרויקט כדומיין ההפניה של האפליקציה.
- לוחצים על שמירה.
גישה לכיתה firebase::auth::Auth
המחלקות Auth הן שער לכל הקריאות ל-API.
- מוסיפים את קובצי הכותרות Auth ו-App:
#include "firebase/app.h" #include "firebase/auth.h"
- יוצרים מחלקה
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__)
- קבלת הכיתה
firebase::auth::Authל-firebase::App. יש מיפוי של אחד לאחד ביןAppלביןAuth.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
טיפול בתהליך הכניסה באמצעות Firebase SDK
כדי לטפל בתהליך הכניסה באמצעות Firebase SDK, פועלים לפי השלבים הבאים:
יוצרים מופע של
FederatedOAuthProviderDataשמוגדר עם מזהה הספק שמתאים למיקרוסופט.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);אופציונלי: מציינים פרמטרים נוספים של 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.כדי לאפשר רק למשתמשים מדייר (tenant) מסוים ב-Azure AD להיכנס לאפליקציה, אפשר להשתמש בשם הדומיין הידידותי של הדייר (tenant) ב-Azure AD או במזהה ה-GUID של הדייר (tenant). כדי לעשות את זה, מציינים את השדה tenant באובייקט של הפרמטרים המותאמים אישית.
// 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";אופציונלי: מציינים היקפי הרשאות נוספים של OAuth 2.0 מעבר לפרופיל הבסיסי שרוצים לבקש מספק האימות.
provider_data.scopes.push_back("mail.read"); provider_data.scopes.push_back("calendars.read");מידע נוסף מופיע במסמכים בנושא הרשאות והסכמה של מיקרוסופט.
אחרי שמגדירים את נתוני הספק, אפשר להשתמש בהם כדי ליצור
FederatedOAuthProvider.// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);מתבצע אימות באמצעות Firebase באמצעות אובייקט ספק האימות. שימו לב: בניגוד לפעולות אחרות של FirebaseAuth, הפעולה הזו תשתלט על ממשק המשתמש על ידי הצגת תצוגת אינטרנט שבה המשתמש יכול להזין את פרטי הכניסה שלו.
כדי להתחיל את תהליך הכניסה, קוראים לפונקציה
SignInWithProvider:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);יכול להיות שהבקשה תמתין או תירשם כקריאה חוזרת ב-Future.
באמצעות אסימון הגישה של OAuth, אפשר לקרוא ל-Microsoft Graph API.
בניגוד לספקים אחרים שנתמכים על ידי Firebase Auth, מיקרוסופט לא מספקת כתובת URL של תמונה. במקום זאת, צריך לבקש את הנתונים הבינאריים של תמונת הפרופיל באמצעות Microsoft Graph API.
הדוגמאות שלמעלה מתמקדות בתהליכי כניסה, אבל אפשר גם לקשר ספק של Microsoft Azure Active Directory למשתמש קיים באמצעות
LinkWithProvider. לדוגמה, אתם יכולים לקשר כמה ספקים לאותו משתמש, כדי שהוא יוכל להיכנס לחשבון דרך כל אחד מהם.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);אפשר להשתמש באותו דפוס עם
ReauthenticateWithProviderכדי לאחזר פרטי כניסה עדכניים לפעולות רגישות שדורשות כניסה עדכנית.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);יכול להיות שהאפליקציה תמתין או תרשום קריאה חוזרת ב-Future.
השלבים הבאים
אחרי שמשתמש נכנס לחשבון בפעם הראשונה, נוצר חשבון משתמש חדש שמקושר לפרטי הכניסה – כלומר, שם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האימות – שבאמצעותם המשתמש נכנס לחשבון. החשבון החדש הזה נשמר כחלק מפרויקט 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 Realtime Database וב-Cloud Storage Security Rules, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש המחובר מהמשתנה
auth, ולהשתמש בו כדי לקבוע לאילו נתונים משתמש יכול לגשת.
אתם יכולים לאפשר למשתמשים להיכנס לאפליקציה שלכם באמצעות כמה ספקי אימות על ידי קישור פרטי כניסה של ספק אימות לחשבון משתמש קיים.
כדי להוציא משתמש מהחשבון, מתקשרים אל
SignOut():
auth->SignOut();