Iniciar sessão de utilizadores com a Microsoft

Este documento mostra como usar a Identity Platform para iniciar sessão de utilizadores com a Microsoft. São suportadas contas Microsoft pessoais e contas do Azure Active Directory (Azure AD).

Antes de começar

Este tutorial pressupõe que já ativou a Identity Platform e tem uma app Web básica escrita em HTML e JavaScript. Consulte o início rápido para saber como.

Configurar a Microsoft como fornecedor

Para configurar a Microsoft como um fornecedor de identidade:

  1. Aceda à página Fornecedores de identidade na Google Cloud consola.

    Aceda à página Fornecedores de identidade

  2. Clique em Adicionar um fornecedor.

  3. Selecione Microsoft na lista.

  4. Introduza o ID da app e o segredo da app da Microsoft. Se ainda não tiver um ID e um segredo, siga os passos no artigo Início rápido: registe uma app com o ponto final do Azure AD v2.0 para os obter.

    Este ponto final suporta contas pessoais da Microsoft e contas do Azure AD. Consulte a vista geral da plataforma de identidade da Microsoft (v2.0) para saber mais sobre o Azure AD.

  5. Configure o URI indicado em Configurar Microsoft como o URI de redirecionamento OAuth válido para a sua app Microsoft. Se configurou um domínio personalizado na Identity Platform, atualize o URI de redirecionamento na configuração da sua app Microsoft para usar o domínio personalizado em vez do domínio predefinido. Por exemplo, altere https://myproject.firebaseapp.com/__/auth/handler para https://auth.myownpersonaldomain.com/__/auth/handler.

  6. Registe os domínios da sua app clicando em Adicionar domínio em Domínios autorizados. Para fins de programação, o localhost já está ativado por predefinição.

  7. Em Configure a sua aplicação, clique em Detalhes da configuração. Copie o fragmento para o código da sua app para inicializar o SDK do cliente do Identity Platform.

  8. Clique em Guardar.

Iniciar sessão de utilizadores com o SDK do cliente

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

    JavaScript

    var provider = new firebase.auth.OAuthProvider('microsoft.com');

  2. Opcional: adicione âmbitos do OAuth. Os âmbitos especificam os dados que está a pedir à Microsoft. Os dados mais confidenciais podem exigir âmbitos específicos. Consulte a documentação da Microsoft para determinar os âmbitos de que a sua app precisa.

    JavaScript

    provider.addScope('mail.read');
    provider.addScope('calendars.read');
    
  3. Opcional: especifique parâmetros de OAuth personalizados adicionais. Estas são específicas da Microsoft e são normalmente usadas 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'
    });
    

    Pode usar o parâmetro mkt para personalizar o idioma do fluxo de autenticação. Por exemplo:

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

    Pode usar a propriedade tenant para limitar o acesso a utilizadores fora de um domínio do Azure AD específico. Especifique o nome de domínio amigável do inquilino ou o respetivo identificador GUID. Os utilizadores que não pertençam a este domínio não vão poder iniciar sessão. Por 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 Microsoft OAuth para ver uma lista completa dos parâmetros suportados pela Microsoft. Tenha em atenção que não pode transmitir parâmetros reservados pelo OAuth ou pela Identity Platform.

  4. Use o objeto OAuthProvider para iniciar sessão no utilizador. Pode abrir uma janela de pop-up ou redirecionar a página atual. O redirecionamento é mais fácil para os utilizadores em dispositivos móveis.

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

    JavaScript

    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 a página, chame primeiro signInWithRedirect():

    Siga as práticas recomendadas quando usar signInWithRedirect, linkWithRedirect ou reauthenticateWithRedirect.

    JavaScript

    firebase.auth().signInWithRedirect(provider);

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

    JavaScript

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

Assim que tiver um token de acesso, pode 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

Ao contrário de outros fornecedores suportados pela Identity Platform, a Microsoft não fornece um URL de foto para os utilizadores. Em alternativa, tem de usar a API Graph para pedir os dados binários da foto.

Além do token de acesso, também pode obter o token de ID da Microsoft de um utilizador. A reivindicação oid neste token contém um ID exclusivo do utilizador. Pode comparar este valor com o ID localizado em user.providerData[0].uid. Se os seus utilizadores estiverem a iniciar sessão com um inquilino do Azure AD, estes campos vão corresponder exatamente. Se não for o caso, o campo é preenchido com zeros (por exemplo, o ID federado 4b2eabcdefghijkl aparece como 00000000-0000-0000-4b2e-abcdefghijkl).

Não use a reivindicação sub para comparar IDs de utilizadores. A reivindicação sub é específica da app e não corresponde ao ID usado pela Microsoft.

Iniciar sessão de utilizadores manualmente

Alguns outros fornecedores da Identity Platform, como a Google, Facebook e Twitter, permitem-lhe iniciar sessão nos utilizadores manualmente chamando signInWithCredential().

Esta capacidade não é suportada para a Microsoft. A Identity Platform não consegue validar o público-alvo das chaves de acesso OAuth da Microsoft, o que é um requisito de segurança crítico.

Se não conseguir usar o SDK do cliente da Identity Platform para iniciar sessão dos utilizadores, tem de usar uma biblioteca OAuth de terceiros para fazer a autenticação com a Microsoft. Em seguida, pode usar a autenticação personalizada para trocar a credencial da Microsoft por um token personalizado.

O que se segue?