Accesso degli utenti con Microsoft

Questo documento mostra come utilizzare Identity Platform per eseguire l'accesso degli utenti con Microsoft. Sono supportati sia gli account Microsoft personali che gli account Azure Active Directory (Azure AD).

Prima di iniziare

Questo tutorial presuppone che tu abbia già attivato Identity Platform e un'app web di base scritta utilizzando HTML e JavaScript. Consulta la guida rapida per scoprire come.

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 e il Segreto dell'app Microsoft. Se non disponi già di un ID e di 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. Consulta la panoramica su Microsoft Identity Platform (v2.0) per scoprire di più su Azure AD.

  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 per utilizzare il dominio personalizzato invece del dominio predefinito. Ad esempio, modifica 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 dell'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 possono richiedere ambiti specifici. Consulta la documentazione di Microsoft per determinare gli ambiti necessari per la tua app.

    JavaScript

    provider.addScope('mail.read');
    provider.addScope('calendars.read');
    
  3. Facoltativo:specifica parametri OAuth aggiuntivi personalizzati. Sono specifiche di Microsoft e vengono in genere utilizzate 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 semplice del tenant o l'identificatore GUID. Gli utenti che non si trovano in questo dominio non potranno 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 i parametri riservati da OAuth o Identity Platform.

  4. Utilizza l'oggetto OAuthProvider per eseguire l'accesso dell'utente. Puoi aprire una finestra popup o reindirizzare la pagina corrente. Il reindirizzamento è più semplice per gli utenti di dispositivi mobili.

    Per mostrare 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, devi prima chiamare signInWithRedirect():

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

    JavaScript

    firebase.auth().signInWithRedirect(provider);

    Quindi, recupera il token Microsoft chiamando getRedirectResult() quando viene caricata la 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 degli altri provider supportati da Identity Platform, Microsoft non fornisce un URL delle foto agli utenti. Dovrai 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. La richiesta di tipo oid su questo token contiene un ID univoco per l'utente. Puoi confrontare questo risultato 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 la dichiarazione sub per confrontare gli ID utente. L'attestazione sub è specifica dell'app e non corrisponderà all'ID utilizzato da Microsoft.

Accesso manuale degli utenti

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

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

Se non riesci a utilizzare l'SDK client di Identity Platform per eseguire l'accesso degli 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