Autenticar usando Microsoft e 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 Microsoft Azure Active Directory. Basta integrar o login genérico do OAuth baseado na Web 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 pelas plataformas Apple e Android.
Antes de começar
- Adicione o Firebase ao seu projeto em C++.
- No console do Firebase, abra a seção Auth.
- Na guia Método de login, ative o provedor Microsoft.
- Adicione o ID do cliente e a Chave secreta do cliente do console do desenvolvedor às
configurações do provedor:
- Para registrar um cliente OAuth da Microsoft, siga as instruções em
Guia de início rápido: como registrar um app com o endpoint do Azure Active Directory v2.0.
Observe que esse endpoint oferece suporte para o login de contas pessoais da Microsoft, bem como de contas do
Azure Active Directory.
Saiba mais sobre o Azure Active Directory v2.0.
- 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 código do provedor apropriado para a Microsoft.
firebase::auth::FederatedOAuthProviderData
provider_data(firebase::auth::MicrosoftAuthProvider::kProviderId);
Opcional: especifique os parâmetros OAuth personalizados que você quer
enviar com a solicitação 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";
Para saber quais parâmetros são aceitos pela Microsoft, consulte a
documentação do OAuth da Microsoft.
Não é possível transmitir os parâmetros exigidos pelo Firebase com setCustomParameters()
. Esses parâmetros são client_id, response_type, redirect_uri, state, scope e response_mode.
Para permitir que apenas usuários de um determinado locatário do Azure AD façam login
no aplicativo, é possível usar o nome de domínio do locatário do Azure AD
ou o identificador GUID do locatário. Isso pode ser feito ao especificar o campo "locatário" no objeto de parâmetros personalizados.
// 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";
Opcional: especifique os outros escopos de OAuth 2.0 além do perfil básico que você quer solicitar ao provedor de autenticação.
provider_data.scopes.push_back("mail.read");
provider_data.scopes.push_back("calendars.read");
Para saber mais, consulte a documentação de permissões e consentimento da Microsoft (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.
Com o token de acesso OAuth, é possível chamar a
API Microsoft Graph.
Ao contrário de outros provedores compatíveis com o Firebase Authentication, a Microsoft não fornece um URL de foto. Em vez disso, os dados binários de uma foto do perfil precisam ser solicitados por meio da API Microsoft Graph.
Os exemplos acima se concentram nos fluxos de login, mas também é possível vincular um provedor do Microsoft Azure Active Directory a um usuário atual usando LinkWithProvider
. Por exemplo, é possível vincular vários provedores ao mesmo usuário. Isso permitirá que ele faça login usando 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 a Microsoft porque o servidor do Firebase
Auth não consegue verificar o público dos tokens de acesso OAuth da Microsoft.
Esse é um requisito de segurança crítico e pode expor aplicativos e
sites a ataques de repetição em que um token de acesso OAuth da Microsoft 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\nMicrosoft Azure Active Directory by integrating web-based generic OAuth Login\ninto your app using the Firebase SDK to carry out the end to end sign-in flow.\nSince this flow requires the use of the phone-based Firebase SDKs, it is only\nsupported on Android and Apple 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 **Microsoft** provider.\n4. Add the **Client ID** and **Client Secret** from that provider's developer console to the provider configuration:\n 1. To register a Microsoft OAuth client, follow the instructions in [Quickstart: Register an app with the Azure Active Directory v2.0 endpoint](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-register-an-app). Note that this endpoint supports sign-in using Microsoft personal accounts as well as Azure Active Directory accounts. [Learn more](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-overview) about Azure Active Directory v2.0.\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 Microsoft.\n\n firebase::auth::FederatedOAuthProviderData\n provider_data(firebase::auth::MicrosoftAuthProvider::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 Microsoft.\n provider_data.custom_parameters[\"prompt\"] = \"login\";\n\n // Target specific email with login hint.\n provider_data.custom_parameters[\"login_hint\"] =\n \"user@firstadd.onmicrosoft.com\";\n\n For the parameters Microsoft supports, see the\n [Microsoft OAuth documentation](https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code).\n Note that you can't pass Firebase-required parameters with\n `setCustomParameters()`. These parameters are **client_id** ,\n **response_type** , **redirect_uri** , **state** , **scope** and\n **response_mode**.\n\n To allow only users from a particular Azure AD tenant to sign\n into the application, either the friendly domain name of the Azure AD tenant\n or the tenant's GUID identifier can be used. This can be done by specifying\n the \"tenant\" field in the custom parameters object. \n\n // Optional \"tenant\" parameter in case you are using an Azure AD tenant.\n // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com'\n // or \"common\" for tenant-independent tokens.\n // The default value is \"common\".\n provider_data.custom_parameters[\"tenant\"] =\"TENANT_ID\";\n\n3. **Optional**: Specify additional OAuth 2.0 scopes beyond basic profile that\n you want to request from the authentication provider.\n\n provider_data.scopes.push_back(\"mail.read\");\n provider_data.scopes.push_back(\"calendars.read\");\n\n To learn more, refer to the\n [Microsoft permissions and consent documentation](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent).\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).\n\n Using the OAuth access token, you can call the\n [Microsoft Graph API](https://docs.microsoft.com/en-us/graph/overview?toc=./toc.json&view=graph-rest-1.0).\n\n Unlike other providers supported by Firebase Auth, Microsoft does not\n provide a photo URL and instead, the binary data for a profile photo has to\n be requested via\n [Microsoft Graph API](https://docs.microsoft.com/en-us/graph/api/profilephoto-get?view=graph-rest-1.0).\n6. While the above examples focus on sign-in flows, you also have the\n ability to link a Microsoft Azure Active Directory provider to an existing\n user using `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 Microsoft due to the inability of the Firebase\nAuth server to verify the audience of Microsoft OAuth access tokens.\nThis is a critical security requirement and could expose applications and\nwebsites to replay attacks where a Microsoft 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```"]]