Accesso degli utenti con Microsoft

Questo documento mostra come utilizzare Identity Platform per accedere agli utenti con Microsoft. Sono supportati sia gli account Microsoft personali che gli account Azure AD (Azure AD).

Prima di iniziare

Questo tutorial presuppone che tu abbia già attivato Identity Platform e abbia un'app web di base scritta utilizzando HTML e JavaScript. Per scoprire come fare, consulta la Guida rapida.

Configurazione di Microsoft come provider

Per configurare Microsoft come provider di identità:

  1. Vai alla pagina Provider di identità nella console Google Cloud.

    Vai alla pagina Provider di identità

  2. Fai clic su Add A Provider (Aggiungi un provider).

  3. Seleziona Microsoft dall'elenco.

  4. Inserisci l'ID app di Microsoft e il Secret dell'app. Se non hai ancora un ID e un secret, segui i passaggi descritti in Guida rapida: registrare un'app con l'endpoint Azure AD v2.0 per ottenerne uno.

    Questo endpoint supporta sia gli account Microsoft personali che gli account Azure AD. Per saperne di più su Azure AD, consulta la panoramica di Microsoft Identity Platform (v2.0).

  5. Configura l'URI elencato in Configura Microsoft come URI di reindirizzamento OAuth valido per la tua app Microsoft. Se hai configurato un dominio personalizzato in Identity Platform, aggiorna l'URI di reindirizzamento nella configurazione dell'app Microsoft in modo da utilizzare il dominio personalizzato anziché il dominio predefinito. Ad esempio, cambia https://myproject.firebaseapp.com/__/auth/handler in https://auth.myownpersonaldomain.com/__/auth/handler.

  6. Registra i domini della tua app facendo clic su Aggiungi dominio in Domini autorizzati. A scopo di sviluppo, localhost è già abilitato per impostazione predefinita.

  7. In Configura la tua applicazione, fai clic su Dettagli di configurazione. Copia lo snippet nel codice della tua app per inizializzare l'SDK client di Identity Platform.

  8. Fai clic su Salva.

Accesso degli utenti con l'SDK client

  1. Crea un'istanza dell'oggetto OAuthProvider, passando microsoft.com come ID provider:

    JavaScript

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

  2. Facoltativo:aggiungi ambiti OAuth. Gli ambiti specificano i dati che stai richiedendo a Microsoft. Dati più sensibili potrebbero richiedere ambiti specifici. Consulta la documentazione di Microsoft per determinare gli ambiti necessari alla tua applicazione.

    JavaScript

    provider.addScope('mail.read');
    provider.addScope('calendars.read');
    
  3. (Facoltativo) Specifica altri parametri OAuth personalizzati. Sono specifici per Microsoft e in genere vengono utilizzati per personalizzare l'esperienza di autenticazione.

    JavaScript

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

    Puoi utilizzare il parametro mkt per personalizzare la lingua del flusso di autenticazione. Ad esempio:

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

    Puoi utilizzare la proprietà tenant per limitare l'accesso agli utenti esterni a un determinato dominio Azure AD. Specifica il nome di dominio descrittivo del tenant o il relativo identificatore GUID. Gli utenti che non sono all'interno di questo dominio non saranno in grado di accedere. Ad esempio:

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

    Consulta la documentazione di Microsoft OAuth per un elenco completo dei parametri supportati da Microsoft. Tieni presente che non puoi passare parametri riservati da OAuth o Identity Platform.

  4. Utilizza l'oggetto OAuthProvider per accedere all'utente. Puoi aprire una finestra popup o reindirizzare la pagina corrente. Il reindirizzamento è più semplice per gli utenti che usano dispositivi mobili.

    Per visualizzare un popup, chiama 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.
      });

    Per reindirizzare la pagina, chiama prima signInWithRedirect():

    Segui le best practice quando utilizzi signInWithRedirect, linkWithRedirect o reauthenticateWithRedirect.

    JavaScript

    firebase.auth().signInWithRedirect(provider);

    Quindi, recupera il token Microsoft chiamando getRedirectResult() durante il caricamento della pagina:

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

Una volta ottenuto un token di accesso, puoi utilizzarlo per chiamare l'API Microsoft Graph, ad esempio:

REST

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

A differenza di altri provider supportati da Identity Platform, Microsoft non fornisce un URL di foto agli utenti. Dovrai invece utilizzare l'API Graph per richiedere i dati binari della foto.

Oltre al token di accesso, puoi anche recuperare il token ID Microsoft di un utente. L'attestazione oid su questo token contiene un ID univoco per l'utente. Puoi confrontare questo valore con l'ID che si trova all'indirizzo user.providerData[0].uid. Se i tuoi utenti accedono con un tenant di Azure AD, questi campi corrisponderanno esattamente. In caso contrario, il campo verrà riempito con zeri (ad esempio, l'ID federato 4b2eabcdefghijkl verrà visualizzato come 00000000-0000-0000-4b2e-abcdefghijkl).

Non utilizzare l'attestazione sub per confrontare gli ID utente. L'attestazione sub è specifica dell'app e non corrisponde all'ID utilizzato da Microsoft.

Accesso manuale agli utenti

Alcuni altri provider Identity Platform, come Google, Facebook e Twitter, ti consentono di far accedere manualmente gli utenti chiamando signInWithCredential().

Questa funzionalità non è supportata per Microsoft. Identity Platform non è in grado di verificare il pubblico dei token di accesso OAuth di Microsoft, che è un requisito di sicurezza fondamentale.

Se non riesci a utilizzare l'SDK client di Identity Platform per accedere agli utenti, dovrai utilizzare una libreria OAuth di terze parti per l'autenticazione con Microsoft. Puoi quindi utilizzare l'autenticazione personalizzata per scambiare le credenziali Microsoft con un token personalizzato.

Passaggi successivi