Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Sie können Ihren Nutzern die Authentifizierung bei Firebase mithilfe von OAuth-Anbietern wie
Yahoo durch Integration eines webbasierten generischen OAuth-Logins in Ihre Anwendung mithilfe der
Firebase SDK für die vollständige Anmeldung Da für diesen Ablauf die Verwendung der smartphonebasierten Firebase SDKs erforderlich ist, wird er nur auf Android- und Apple-Plattformen unterstützt.
Wählen Sie die beiden OpenID Connect API-Berechtigungen profile und email aus.
Wenn Sie Apps bei diesen Anbietern registrieren, müssen Sie die *.firebaseapp.com-Domain für Ihr Projekt als Weiterleitungsdomain für Ihre App registrieren.
Klicken Sie auf Speichern.
Auf die Klasse firebase::auth::Auth zugreifen
Die Klasse Auth ist das Gateway für alle API-Aufrufe.
Fügen Sie die Auth- und App-Headerdateien hinzu:
#include"firebase/app.h"#include"firebase/auth.h"
Erstellen Sie in Ihrem Initialisierungscode eine firebase::App-Klasse.
Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Parameter an, die mit der OAuth-Anfrage gesendet werden sollen.
// Prompt user to re-authenticate to Yahoo.provider_data.custom_parameters["prompt"]="login";// Localize to French.provider_data.custom_parameters["language"]="fr";
Informationen zu den von Yahoo unterstützten Parametern finden Sie in der Yahoo OAuth-Dokumentation.
Beachten Sie, dass Sie keine für Firebase erforderlichen Parameter mit
custom_parameters() Diese Parameter sind client_id, redirect_uri, response_type, scope und state.
Optional: Geben Sie neben profile und weiteren OAuth 2.0-Bereichen weitere OAuth 2.0-Bereiche an.
email, die Sie vom Authentifizierungsanbieter anfordern möchten. Wenn Ihr
Anwendung Zugriff auf private Nutzerdaten von Yahoo-APIs benötigt, können Sie
müssen Sie Berechtigungen für Yahoo! APIs unter API Permissions (API-Berechtigungen) im
Yahoo!-Entwicklerkonsole Die angeforderten OAuth-Bereiche müssen genau mit den in den API-Berechtigungen der App vorkonfigurierten Bereichen übereinstimmen. Wenn beispielsweise Lese-/Schreibzugriff auf die Kontakte des Nutzers angefordert und in den API-Berechtigungen der App vorkonfiguriert wird, muss sdct-w anstelle des OAuth-Bereichs „Lesezugriff“ sdct-r übergeben werden. Andernfalls schlägt der Ablauf fehl und dem Endnutzer wird eine Fehlermeldung angezeigt.
// Request access to Yahoo Mail API.provider_data.scopes.push_back("mail-r");// This must be preconfigured in the app's API permissions.provider_data.scopes.push_back("sdct-w");
Nachdem Sie Ihre Anbieterdaten konfiguriert haben, können Sie damit eine
FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods.firebase::auth::FederatedOAuthProviderprovider(provider_data);
Authentifizierung mit Firebase über das Auth-Anbieterobjekt. Im Gegensatz zu
anderen FirebaseAuth-Vorgängen hinzugefügt wurde, wird die Benutzeroberfläche gesteuert,
Webansicht öffnen, in der der Nutzer seine Anmeldedaten eingeben kann.
Rufe SignInWithProvider auf, um den Anmeldevorgang zu starten:
Die obigen Beispiele konzentrieren sich zwar auf Anmeldeabläufe, Sie haben aber auch die Möglichkeit,
einen Yahoo-Anbieter mithilfe von
LinkWithProvider Sie können beispielsweise mehrere Anbieter mit demselben Nutzer verknüpfen, damit er sich mit einem beliebigen davon anmelden kann.
Dasselbe Muster kann mit ReauthenticateWithProvider verwendet werden, wobei
werden zum Abrufen neuer Anmeldedaten für vertrauliche Vorgänge verwendet, die
Letzte Anmeldung
Im Gegensatz zu anderen von Firebase unterstützten OAuth-Anbietern wie Google, Facebook,
und Twitter, wo die Anmeldung direkt mit einem OAuth-Zugriffstoken erfolgen kann
Anmeldedaten basieren, unterstützt Firebase Auth nicht die gleiche
wie Yahoo, da das Firebase-Plug-in
Authentifizierungsserver zur Überprüfung der Zielgruppe der Yahoo-OAuth-Zugriffstokens
Dies ist eine wichtige Sicherheitsanforderung. Andernfalls könnten Anwendungen und Websites von Replay-Angriffen betroffen sein, bei denen ein für ein Projekt (Angreifer) abgerufenes Yahoo OAuth-Zugriffstoken verwendet wird, um sich in einem anderen Projekt (Opfer) anzumelden.
Stattdessen bietet Firebase Auth
die Möglichkeit, den gesamten OAuth-Ablauf
Autorisierungscode-Austausch mit OAuth-Client-ID und -Secret
die in der Firebase Console konfiguriert wurden. Da der Autorisierungscode nur in Verbindung mit einer bestimmten Client-ID/einem bestimmten Secret verwendet werden kann, kann ein Autorisierungscode, der für ein Projekt abgerufen wurde, nicht für ein anderes verwendet werden.
Wenn diese Anbieter in nicht unterstützten Umgebungen verwendet werden müssen,
die OAuth-Bibliothek eines Drittanbieters
Benutzerdefinierte Firebase-Authentifizierung
erforderlich sind. Ersteres ist erforderlich, um sich beim Anbieter zu authentifizieren.
und Letzterer, um die Anmeldedaten
des Anbieters gegen ein benutzerdefiniertes Token auszutauschen.
Nächste Schritte
Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und
die mit den Anmeldedaten verknüpft sind, d. h. Nutzername und Passwort,
oder Authentifizierungsanbieter-Informationen – also für den Nutzer, mit dem sich der Nutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps in Ihrem Projekt zu identifizieren, unabhängig davon, wie er sich anmeldet.
Die grundlegenden Profilinformationen der Nutzer finden Sie in Ihren Apps über die
firebase::auth::User-Objekt:
firebase::auth::Useruser=auth->current_user();if(user.is_valid()){std::stringname=user.display_name();std::stringemail=user.email();std::stringphoto_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::stringuid=user.uid();}
In Firebase Realtime Database und Cloud StorageSicherheitsregeln können Sie
die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth abrufen,
und steuern, auf welche Daten ein Nutzer zugreifen kann.
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-08-16 (UTC)."],[],[],null,["You can let your users authenticate with Firebase using OAuth providers like\nYahoo by integrating web-based generic OAuth Login into your app using the\nFirebase SDK to carry out the end to end sign-in flow. Since this flow requires\nthe use of the phone-based Firebase SDKs, it is only supported on Android and\nApple platforms.\n\nBefore you begin\n\n1. [Add Firebase to your C++ project](/docs/cpp/setup#note_select_platform).\n2. In the [Firebase console](//console.firebase.google.com/), open the **Auth** section.\n3. On the **Sign in method** tab, enable the **Yahoo** provider.\n4. Add the **Client ID** and **Client Secret** from that provider's developer console to the provider configuration:\n 1. To register a Yahoo OAuth client, follow the Yahoo developer\n documentation on [registering a web application with Yahoo](https://developer.yahoo.com/oauth2/guide/openid_connect/getting_started.html).\n\n Be sure to select the two OpenID Connect API permissions:\n `profile` and `email`.\n 2. When registering apps with these providers, be sure to register the `*.firebaseapp.com` domain for your project as the redirect domain for your app.\n5. Click **Save**.\n\nAccess the `firebase::auth::Auth` class The `Auth` class is the gateway for all API calls.\n\n1. Add the Auth and App header files: \n\n ```c++\n #include \"firebase/app.h\"\n #include \"firebase/auth.h\"\n ```\n2. In your initialization code, create a [`firebase::App`](/docs/reference/cpp/class/firebase/app) class. \n\n ```c++\n #if defined(__ANDROID__)\n firebase::App* app =\n firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);\n #else\n firebase::App* app = firebase::App::Create(firebase::AppOptions());\n #endif // defined(__ANDROID__)\n ```\n3. Acquire the `firebase::auth::Auth` class for your `firebase::App`. There is a one-to-one mapping between `App` and `Auth`. \n\n ```c++\n firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);\n ```\n\nHandle the sign-in flow with the Firebase SDK\n\nTo handle the sign-in flow with the Firebase SDK, follow these steps:\n\n1. Construct an instance of a `FederatedOAuthProviderData` configured with\n the provider ID appropriate for Yahoo.\n\n firebase::auth::FederatedOAuthProviderData\n provider_data(firebase::auth::YahooAuthProvider::kProviderId);\n\n2. **Optional**: Specify additional custom OAuth parameters that you want to\n send with the OAuth request.\n\n // Prompt user to re-authenticate to Yahoo.\n provider_data.custom_parameters[\"prompt\"] = \"login\";\n\n // Localize to French.\n provider_data.custom_parameters[\"language\"] = \"fr\";\n\n For the parameters Yahoo supports, see the\n [Yahoo OAuth documentation](https://developer.yahoo.com/oauth2/guide/openid_connect/getting_started.html).\n Note that you can't pass Firebase-required parameters with\n `custom_parameters()`. These parameters are **client_id** ,\n **redirect_uri** , **response_type** , **scope** and **state**.\n3. **Optional** : Specify additional OAuth 2.0 scopes beyond `profile` and\n `email` that you want to request from the authentication provider. If your\n application requires access to private user data from Yahoo APIs, you'll\n need to request permissions to Yahoo APIs under **API Permissions** in the\n Yahoo developer console. Requested OAuth scopes must be exact matches to the\n preconfigured ones in the app's API permissions. For example if, read/write\n access is requested to user contacts and preconfigured in the app's API\n permissions, `sdct-w` has to be passed instead of the readonly OAuth scope\n `sdct-r`. Otherwise,the flow will fail and an error would be shown to the\n end user.\n\n // Request access to Yahoo Mail API.\n provider_data.scopes.push_back(\"mail-r\");\n // This must be preconfigured in the app's API permissions.\n provider_data.scopes.push_back(\"sdct-w\");\n\n To learn more, refer to the\n [Yahoo scopes documentation](https://developer.yahoo.com/oauth2/guide/yahoo_scopes/).\n4. Once your provider data has been configured, use it to create a\n FederatedOAuthProvider.\n\n // Construct a FederatedOAuthProvider for use in Auth methods.\n firebase::auth::FederatedOAuthProvider provider(provider_data);\n\n5. Authenticate with Firebase using the Auth provider object. Note that unlike\n other FirebaseAuth operations, this will take control of your UI by popping\n up a web view in which the user can enter their credentials.\n\n To start the sign in flow, call `SignInWithProvider`: \n\n firebase::Future\u003cfirebase::auth::AuthResult\u003e result =\n auth-\u003eSignInWithProvider(provider_data);\n\n Your application may then wait or [register a callback on the Future](#register_callback_on_future).\n6. While the above examples focus on sign-in flows, you also have the\n ability to link a Yahoo provider to an existing user using\n `LinkWithProvider`. For example, you can link multiple\n providers to the same user allowing them to sign in with either.\n\n firebase::Future\u003cfirebase::auth::AuthResult\u003e result = user.LinkWithProvider(provider_data);\n\n7. The same pattern can be used with `ReauthenticateWithProvider` which can be\n used to retrieve fresh credentials for sensitive operations that require\n recent login.\n\n firebase::Future\u003cfirebase::auth::AuthResult\u003e result =\n user.ReauthenticateWithProvider(provider_data);\n\n Your application may then wait or [register a callback on\n the Future](#register_callback_on_future).\n\nAdvanced: Handle the sign-in flow manually\n\nUnlike other OAuth providers supported by Firebase such as Google, Facebook,\nand Twitter, where sign-in can directly be achieved with OAuth access token\nbased credentials, Firebase Auth does not support the same capability for\nproviders such as Yahoo due to the inability of the Firebase\nAuth server to verify the audience of Yahoo OAuth access tokens.\nThis is a critical security requirement and could expose applications and\nwebsites to replay attacks where a Yahoo OAuth access token obtained for\none project (attacker) can be used to sign in to another project (victim).\nInstead, Firebase Auth offers the ability to handle the entire OAuth flow and\nthe authorization code exchange using the OAuth client ID and secret\nconfigured in the Firebase Console. As the authorization code can only be used\nin conjunction with a specific client ID/secret, an authorization code\nobtained for one project cannot be used with another.\n\nIf these providers are required to be used in unsupported environments, a\nthird party OAuth library and\n[Firebase custom authentication](../admin/create-custom-tokens)\nwould need to be used. The former is needed to authenticate with the provider\nand the latter to exchange the provider's credential for a custom token.\n\nNext steps\n\nAfter a user signs in for the first time, a new user account is created and\nlinked to the credentials---that is, the user name and password, phone\nnumber, or auth provider information---the user signed in with. This new\naccount is stored as part of your Firebase project, and can be used to identify\na user across every app in your project, regardless of how the user signs in.\n\n- In your apps, you can get the user's basic profile information from the\n [`firebase::auth::User`](/docs/reference/cpp/class/firebase/auth/user) object:\n\n ```c++\n firebase::auth::User user = auth-\u003ecurrent_user();\n if (user.is_valid()) {\n std::string name = user.display_name();\n std::string email = user.email();\n std::string photo_url = user.photo_url();\n // The user's ID, unique to the Firebase project.\n // Do NOT use this value to authenticate with your backend server,\n // if you have one. Use firebase::auth::User::Token() instead.\n std::string uid = user.uid();\n }\n ```\n- In your Firebase Realtime Database and Cloud Storage\n [Security Rules](/docs/database/security/user-security), you can\n get the signed-in user's unique user ID from the `auth` variable,\n and use it to control what data a user can access.\n\nYou can allow users to sign in to your app using multiple authentication\nproviders by [linking auth provider credentials to an\nexisting user account.](/docs/auth/cpp/account-linking)\n\nTo sign out a user, call [`SignOut()`](/docs/reference/cpp/class/firebase/auth/auth#signout): \n\n```c++\nauth-\u003eSignOut();\n```"]]