Como fazer login de usuários com o Microsoft

Neste documento, mostramos como usar o Identity Platform para fazer login de usuários com a Microsoft. Contas da Microsoft pessoais e contas do Azure Active Directory (Azure AD) são compatíveis.

Antes de começar

Neste tutorial, pressupomos que você já tenha ativado o Identity Platform e tenha um aplicativo da Web básico escrito usando HTML e JavaScript. Consulte o Guia de início rápido para saber como.

Como configurar a Microsoft como um provedor

Para configurar a Microsoft como um provedor de identidade:

  1. Acesse a página Provedores do Identity Platform no Console do Cloud.

    Acessar a página "Provedores do Identity Platform"

  2. Clique em Adicionar um provedor.

  3. Selecione Microsoft na lista.

  4. Digite o ID do app e o secret do app da Microsoft. Se você ainda não tiver um ID e um secret, siga as etapas em Guia de início rápido: registrar um app com o endpoint do Azure AD v2.0 para conseguir um.

    Esse endpoint é compatível com contas da Microsoft pessoais e do Azure AD. Consulte a Visão geral da plataforma de identidade da Microsoft (v2.0) para saber mais sobre o Azure AD.

  5. Configure o URI listado em Configurar Microsoft como um URI de redirecionamento OAuth válido para seu aplicativo.

  6. Registre os domínios do seu aplicativo clicando em Adicionar domínio em Domínios autorizados. Para fins de desenvolvimento, localhost já está ativado por padrão.

  7. Em Configurar seu aplicativo, clique em Detalhes de configuração. Copie o snippet no código do aplicativo para inicializar o SDK do cliente do Identity Platform.

  8. Clique em Save.

Como conectar usuários com o SDK do cliente

  1. Crie uma instância do objeto OAuthProvider, passando microsoft.com como o ID do provedor:

    JavaScript

    var provider = new firebase.auth.OAuthProvider('microsoft.com');
  2. Opcional: adicione escopos do OAuth. Os escopos especificam quais dados você está solicitando da Microsoft. Dados mais confidenciais podem exigir escopos específicos. Consulte a documentação da Microsoft para determinar quais escopos seu aplicativo precisa.

    JavaScript

    provider.addScope('mail.read');
    provider.addScope('calendars.read');
    
  3. Opcional: especifique outros parâmetros de OAuth personalizados. Eles são específicos da Microsoft e normalmente são usados para personalizar a experiência de autenticação.

    JavaScript

    provider.setCustomParameters({
      // Force re-consent.
      prompt: 'consent',
      // Target specific email with login hint.
      login_hint: 'user@firstadd.onmicrosoft.com'
    });
    

    É possível usar o parâmetro mkt para personalizar a linguagem do fluxo de autenticação. Exemplo:

    provider.setCustomParameters({
      mkt: 'fr'
    });
    

    Use a propriedade tenant para limitar o acesso a usuários fora de um domínio específico do Azure AD. Especifique o nome de domínio amigável do locatário ou seu identificador GUID. Os usuários que não são membros do domínio não poderão fazer login. Exemplo:

    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'
    });
    

    Consulte a documentação do OAuth da Microsoft para ver uma lista completa de parâmetros compatíveis com a Microsoft. Não é possível transmitir parâmetros reservados pelo OAuth ou pelo Identity Platform.

  4. Use o objeto OAuthProvider para fazer login do usuário. É possível abrir uma janela pop-up ou redirecionar a página atual. O redirecionamento é mais fácil para usuários em dispositivos móveis.

    Para mostrar um pop-up, chame signInWithPopup():

    JavaScript

    firebase.auth().signInWithPopup(provider).then(function(result) {
      // This gives you a Microsoft Access Token. You can use it to access the Microsoft API.
      var token = result.credential.accessToken;
      // You can also retrieve the OAuth ID token.
      var idToken = result.credential.idToken;
      // The signed-in user info.
      var user = result.user;
      // ...
    }).catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      // The email of the user's account used.
      var email = error.email;
      // The firebase.auth.AuthCredential type that was used.
      var credential = error.credential;
      // ...
    });

    Para redirecionar a página, primeiro chame signInWithRedirect():

    JavaScript

    firebase.auth().signInWithRedirect(provider);

    Em seguida, recupere o token da Microsoft chamando getRedirectResult() quando sua página for carregada:

    JavaScript

    firebase.auth().getRedirectResult().then(function(result) {
      if (result.credential) {
        // This gives you a Microsoft Access Token. You can use it to access the Microsoft API.
        var token = result.credential.accessToken;
        // You can also retrieve the OAuth ID token.
        var idToken = result.credential.idToken;
        // ...
      }
      // The signed-in user info.
      var user = result.user;
    }).catch(function(error) {
      // Handle Errors here.
      var errorCode = error.code;
      var errorMessage = error.message;
      // The email of the user's account used.
      var email = error.email;
      // The firebase.auth.AuthCredential type that was used.
      var credential = error.credential;
      // ...
    });

Com um token de acesso, é possível usá-lo para chamar a API Microsoft Graph, por exemplo:

REST

curl -i -H "Authorization: Bearer [ACCESS_TOKEN]" https://graph.microsoft.com/v1.0/me

Diferentemente de outros provedores compatíveis com o Identity Platform, a Microsoft não fornece um URL de foto para os usuários. Em vez disso, será necessário usar a API Graph para solicitar os dados binários da foto.

Além do token de acesso, é possível recuperar o token de ID da Microsoft de um usuário. A declaração oid desse token contém um ID exclusivo para o usuário. É possível comparar isso com o ID localizado em user.providerData[0].uid. Se os usuários estiverem fazendo login com um locatário do Azure AD, esses campos corresponderão exatamente. Se não estiverem, o campo será preenchido com zeros (por exemplo, o ID federado 4b2eabcdefghijkl aparecerá como 00000000-0000-0000-4b2e-abcdefghijkl).

Não use a declaração sub para comparar IDs de usuário. A declaração sub é específica do app e não corresponderá ao ID usado pela Microsoft.

Como fazer login manual dos usuários

Outros provedores do Identity Platform, como Google, Facebook e Twitter, permitem que você faça login dos usuários manualmente chamando signInWithCredential().

Esse recurso não é compatível com a Microsoft. O Identity Platform não consegue verificar o público dos tokens de acesso do Microsoft OAuth, que é um requisito de segurança crítico.

Se não for possível usar o SDK do cliente do Identity Platform para fazer login dos usuários, será necessário usar uma biblioteca OAuth de terceiros para fazer a autenticação com a Microsoft. Depois, use a autenticação personalizada para trocar a credencial da Microsoft por um token personalizado.

A seguir