Autenticar usando o Yahoo e o C ++
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Permita que os usuários se autentiquem com o Firebase usando provedores OAuth, como o Yahoo. Basta integrar o login genérico do OAuth ao seu app usando o SDK do Firebase para realizar o fluxo de login completo. Como esse fluxo requer
o uso dos SDKs do Firebase baseados em telefone, ele só é aceito nas plataformas da Apple
e do Android.
Antes de começar
- Adicione o Firebase ao seu projeto em C++.
- No console do Firebase, abra a seção Autenticação.
- Na guia Método de login, ative o provedor Yahoo.
- Adicione o ID do cliente e a Chave secreta do cliente no console de desenvolvimento às
configurações do provedor:
-
Para registrar um cliente OAuth do Yahoo, siga a documentação
do desenvolvedor dessa plataforma sobre
como registrar um aplicativo da Web no Yahoo.
Selecione as duas permissões da API OpenID Connect:
profile
e email
.
- Ao registrar apps nesses provedores, registre o domínio
*.firebaseapp.com
do projeto como o domínio de redirecionamento do seu app.
- Clique em Salvar.
Acessar a classe firebase::auth::Auth
A classe
Auth
é o gateway para todas as chamadas de API.
- Adicione os arquivos de cabeçalho Auth e App:
#include "firebase/app.h"
#include "firebase/auth.h"
- No código de inicialização, crie uma
classe
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__)
- Adquira a classe
firebase::auth::Auth
para seu firebase::App
.
Há um mapeamento de um para um entre App
e Auth
.
firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Processar o fluxo de login com o SDK do Firebase
Para processar o fluxo de login com o SDK do Firebase, siga estas etapas:
Crie uma instância de um FederatedOAuthProviderData
configurado com
o ID do provedor apropriado para o Yahoo.
firebase::auth::FederatedOAuthProviderData
provider_data(firebase::auth::YahooAuthProvider::kProviderId);
Opcional: especifique os parâmetros OAuth personalizados que você quer
enviar com a solicitação OAuth.
// Prompt user to re-authenticate to Yahoo.
provider_data.custom_parameters["prompt"] = "login";
// Localize to French.
provider_data.custom_parameters["language"] = "fr";
Para saber quais parâmetros são aceitos pelo Yahoo, consulte a
documentação do OAuth do Yahoo (em inglês).
Não é possível transmitir os parâmetros exigidos pelo Firebase com custom_parameters()
. Esses parâmetros são client_id, redirect_uri, response_type, scope e state.
Opcional: especifique escopos adicionais do OAuth 2.0 além de profile
e
email
que você quer solicitar ao provedor de autenticação. Se o
aplicativo exigir acesso a dados particulares de usuários das APIs do Yahoo, será
necessário solicitar permissões às APIs em Permissões de APIs no
console de desenvolvimento do Yahoo. Os escopos do OAuth solicitados precisam corresponder exatamente àqueles pré-configurados nas permissões da API do app. Por exemplo, se o acesso de leitura/gravação
for solicitado aos contatos do usuário e pré-configurado nas permissões da API do app, será necessário transmitir sdct-w
em vez do escopo somente leitura sdct-r
do OAuth. Caso contrário, o fluxo falhará e um erro será mostrado ao
usuário final.
// 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");
Para saber mais, consulte a
documentação do escopo do Yahoo (em inglês).
Depois de configurar os dados do provedor, use-os para criar um FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods.
firebase::auth::FederatedOAuthProvider provider(provider_data);
Autentique-se com o Firebase usando o objeto de provedor Auth. Ao contrário de outras operações do FirebaseAuth, isso assumirá o controle da IU exibindo uma visualização da Web na qual o usuário pode inserir as credenciais.
Para iniciar o fluxo de login, chame SignInWithProvider
:
firebase::Future<firebase::auth::AuthResult> result =
auth->SignInWithProvider(provider_data);
Seu aplicativo pode aguardar ou
registrar um callback no Future.
Embora os exemplos acima se concentrem nos fluxos de login, você também pode vincular um provedor do Yahoo a um usuário existente usando LinkWithProvider
. Por exemplo, vincule vários provedores ao mesmo usuário permitindo o login com qualquer um deles.
firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
É possível usar o mesmo padrão com ReauthenticateWithProvider
, que pode ser
utilizado para recuperar credenciais novas de operações confidenciais que exigem um
login recente.
firebase::Future<firebase::auth::AuthResult> result =
user.ReauthenticateWithProvider(provider_data);
Seu aplicativo pode aguardar ou registrar um callback no
Future.
Avançado: processar o fluxo de login manualmente
Ao contrário de outros provedores OAuth aceitos pelo Firebase, como Google, Facebook e
Twitter, em que é possível fazer login diretamente com credenciais baseadas em token de
acesso OAuth, isso não é possível no Firebase Auth ao usar
provedores como o Yahoo porque o servidor do
Firebase Auth não consegue verificar o público dos tokens de acesso OAuth do Yahoo.
Esse é um requisito de segurança fundamental e pode expor aplicativos e
sites a ataques de repetição, em que um token de acesso OAuth do Yahoo recebido em
um projeto (invasor) pode ser usado para acessar outro projeto (vítima).
Em vez disso, o Firebase Auth permite gerenciar todo o fluxo do OAuth e
trocar o código de autorização usando o ID do cliente e o secret do OAuth
configurados no Console do Firebase. Um código de autorização
recebido em um projeto não pode ser usado em outro, porque só pode ser utilizado
em conjunto com um ID do cliente/secret específicos.
Se for preciso usar esses provedores em ambientes não suportados, será necessário usar uma biblioteca OAuth de terceiros e uma autenticação personalizada do Firebase. O primeiro é necessário para autenticar no provedor, e o segundo para trocar a credencial do provedor por um token personalizado.
Próximas etapas
Depois que um usuário faz login pela primeira vez, uma nova conta de usuário é criada e
vinculada às credenciais, que podem ser o número do telefone,
o nome de usuário e a senha ou as informações do provedor de autenticação. Essa nova
conta é armazenada como parte do projeto do Firebase e pode ser usada para identificar
um usuário em todos os apps do projeto, seja qual for o método de login utilizado.
-
Nos seus apps, use o objeto
firebase::auth::User
para receber as informações básicas de perfil do usuário.
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();
}
Nas
Regras de segurança Firebase Realtime Database e Cloud Storage, você pode
acessar o ID exclusivo do usuário conectado pela variável auth
e usar essas informações para controlar
quais dados um usuário pode acessar.
Os usuários podem fazer login no app usando vários provedores de autenticação. Basta vincular as credenciais desses provedores a uma conta de usuário.
Para desconectar um usuário, chame
SignOut()
:
auth->SignOut();
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-08-16 UTC.
[null,null,["Última atualização 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```"]]