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 ao seu app usando o SDK do Firebase para realizar o fluxo de login completo.
Antes de começar
Para fazer login de usuários usando contas da Microsoft (Azure Active Directory e contas pessoais da Microsoft), primeiro ative a Microsoft como um provedor de login do seu projeto do Firebase:
- Adicione o Firebase ao seu projeto JavaScript.
- No Console do Firebase, abra a seção Autenticação.
- 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.
Processar o fluxo de login com o SDK do Firebase
Se você está desenvolvendo um app da Web, a maneira mais fácil de autenticar seus usuários com o Firebase usando contas da Microsoft é processando o fluxo de login com o SDK do Firebase para JavaScript.
Para processar o fluxo de login com o SDK do Firebase para JavaScript, siga estas etapas:
Crie uma instância de um OAuthProvider usando o ID do provedor microsoft.com.
API modular da Web
import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.com');
API com namespace da Web
var provider = new firebase.auth.OAuthProvider('microsoft.com');
Opcional: especifique os parâmetros OAuth personalizados que você quer enviar com a solicitação OAuth.
API modular da Web
provider.setCustomParameters({ // Force re-consent. prompt: 'consent', // Target specific email with login hint. login_hint: 'user@firstadd.onmicrosoft.com' });
API com namespace da Web
provider.setCustomParameters({ // Force re-consent. prompt: 'consent', // Target specific email with login hint. 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.
API modular da Web
provider.setCustomParameters({ // 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". tenant: 'TENANT_ID' });
API com namespace da Web
provider.setCustomParameters({ // 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". 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.addScope('mail.read'); provider.addScope('calendars.read');
Para saber mais, consulte a documentação de permissões e consentimento da Microsoft (em inglês).
Use o objeto de provedor do OAuth para a autenticação no Firebase. É possível solicitar que os usuários façam login com as respectivas contas da Microsoft em uma nova janela pop-up ou pelo redirecionamento à página de login. O método de redirecionamento é recomendável para dispositivos móveis.
- Para fazer login com uma janela pop-up, chame
signInWithPopup
:
API modular da Web
import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // User is signed in. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
API com namespace da Web
firebase.auth().signInWithPopup(provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
- Para redirecionar os usuários à página de login, chame
signInWithRedirect
:
Siga as práticas recomendadas ao usar
signInWithRedirect
,linkWithRedirect
oureauthenticateWithRedirect
.API modular da Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
API com namespace da Web
firebase.auth().signInWithRedirect(provider);
Depois que o usuário fizer login e retornar à página, chame
getRedirectResult
para saber o resultado do login.API modular da Web
import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // User is signed in. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
API com namespace da Web
firebase.auth().getRedirectResult() .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Se o processo foi concluído, o token de acesso OAuth associado ao provedor pode ser recuperado com o objeto
firebase.auth.UserCredential
retornado.Com o token de acesso OAuth, é possível chamar a API Microsoft Graph.
Por exemplo, para receber as informações básicas do perfil, é possível chamar a seguinte API REST:
curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://graph.microsoft.com/v1.0/me
Ao contrário de outros provedores que recebem suporte do Firebase Authentication, a Microsoft não fornece um URL de foto. Em vez disso, os dados binários de uma foto de perfil precisam ser solicitados por meio da API Microsoft Graph.
Além do token de acesso OAuth, é possível usar o objeto
firebase.auth.UserCredential
para recuperar o token de ID OAuth do usuário. A declaraçãosub
no token de ID é específica do app e não vai corresponder ao identificador federado de usuários, que é usado pelo Firebase Auth e pode ser acessado utilizandouser.providerData[0].uid
. Nesse caso, o campo de declaraçãooid
deve ser utilizado. Ao usar um locatário do Azure AD para fazer login, a declaraçãooid
será uma correspondência exata. No entanto, para o caso sem locatário, o campooid
será preenchido. Para um ID federado4b2eabcdefghijkl
,oid
terá um formulário00000000-0000-0000-4b2e-abcdefghijkl
.- Para fazer login com uma janela pop-up, chame
Os exemplos estão relacionados aos fluxos de login, mas também é possível vincular um provedor da Microsoft a um usuário atual com
linkWithPopup
/linkWithRedirect
. Por exemplo, é possível vincular vários provedores ao mesmo usuário, o que permitirá que ele faça login usando qualquer um deles.API modular da Web
import { getAuth, linkWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.com'); const auth = getAuth(); linkWithPopup(auth.currentUser, provider) .then((result) => { // Microsoft credential is linked to the current user. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
API com namespace da Web
var provider = new firebase.auth.OAuthProvider('microsoft.com'); firebase.auth().currentUser.linkWithPopup(provider) .then((result) => { // Microsoft credential is linked to the current user. // IdP data available in result.additionalUserInfo.profile. // OAuth access token can also be retrieved: // result.credential.accessToken // OAuth ID token can also be retrieved: // result.credential.idToken }) .catch((error) => { // Handle error. });
É possível usar o mesmo padrão com
reauthenticateWithPopup
/reauthenticateWithRedirect
, que pode ser utilizado para recuperar credenciais novas para operações confidenciais que exigem um login recente.API modular da Web
import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.com'); const auth = getAuth(); reauthenticateWithPopup(auth.currentUser, provider) .then((result) => { // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
API com namespace da Web
var provider = new firebase.auth.OAuthProvider('microsoft.com'); firebase.auth().currentUser.reauthenticateWithPopup(provider) .then((result) => { // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // OAuth access token can also be retrieved: // result.credential.accessToken // OAuth ID token can also be retrieved: // result.credential.idToken }) .catch((error) => { // Handle error. });
Fazer autenticação com o Firebase em uma extensão do Chrome
Se você está criando um app de extensão do Chrome, é necessário adicionar o ID da extensão:
- Abra seu projeto no Console do Firebase.
- Na seção Autenticação, abra a página Método de login.
- Adicione um URI como o seguinte à lista de domínios autorizados:
chrome-extension://CHROME_EXTENSION_ID
Somente as operações pop-up (signInWithPopup
, linkWithPopup
e reauthenticateWithPopup
) estão disponíveis
para as extensões do Chrome. Isso ocorre porque as extensões não podem usar
redirecionamentos HTTP. Chame esses métodos usando um script de página em segundo plano porque,
se usar o pop-up de ação do navegador, ele será cancelado pelo pop-up de autenticação. Os métodos
pop-up só podem ser usados em extensões que usam
o Manifest V2. O Manifest V3
mais recente só permite scripts em segundo plano na forma de service workers, que não podem realizar as operações
pop-up.
No arquivo de manifesto da sua extensão do Chrome, adicione o URL https://apis.google.com
à lista de permissões content_security_policy
.
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 apps, a maneira recomendada de saber o status de autenticação do seu usuário é definindo um observador no objeto
Auth
. É possível, então, receber as informações básicas de perfil do usuário do objetoUser
. Consulte Gerenciar usuários. Nas Regras de segurança do Firebase Realtime Database e do Cloud Storage, é possível receber o ID exclusivo do usuário conectado da variável
auth
e usar esse ID para controlar quais dados uma pessoa 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
:
API modular da Web
import { getAuth, signOut } from "firebase/auth"; const auth = getAuth(); signOut(auth).then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });
API com namespace da Web
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });