Uwierzytelniaj za pomocą oprogramowania Microsoft i JavaScript

Możesz umożliwić użytkownikom uwierzytelnianie w Firebase za pomocą dostawców OAuth, takich jak Microsoft Azure Active Directory, integrując w aplikacji ogólne logowanie OAuth za pomocą pakietu SDK Firebase, aby przeprowadzić pełny proces logowania.

Zanim zaczniesz

Aby logować użytkowników za pomocą kont Microsoft (Azure Active Directory i osobistych kont Microsoft), musisz najpierw włączyć Microsoft jako dostawcę logowania w projekcie Firebase:

  1. Dodaj Firebase do projektu JavaScript.
  2. W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.
  3. Na karcie Metoda logowania włącz dostawcę logowania Microsoft.
  4. Dodaj identyfikator klienta i tajny klucz klienta z konsoli deweloperskiej tego dostawcy do konfiguracji dostawcy:
    1. Aby zarejestrować klienta OAuth Microsoft, postępuj zgodnie z instrukcjami w tym przewodniku. Pamiętaj, że ten punkt końcowy obsługuje logowanie przy użyciu osobistych kont Microsoft, a także kont Azure Active Directory. Dowiedz się więcej o Azure Active Directory w wersji 2.0.
    2. Podczas rejestrowania aplikacji u tych dostawców pamiętaj, aby zarejestrować domenę *.firebaseapp.com projektu jako domenę przekierowania aplikacji.
  5. Kliknij Zapisz.

Obsługa procesu logowania za pomocą pakietu SDK Firebase

Jeśli tworzysz aplikację internetową, najprostszym sposobem uwierzytelniania użytkowników w Firebase za pomocą ich kont Microsoft jest obsługa całego procesu logowania za pomocą pakietu Firebase JavaScript SDK.

Aby obsłużyć proces logowania za pomocą pakietu Firebase JavaScript SDK, wykonaj te czynności:

  1. Utwórz instancję OAuthProvider, używając identyfikatora dostawcy microsoft.com.

    Web

    import { OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('microsoft.com');

    Web

    var provider = new firebase.auth.OAuthProvider('microsoft.com');
  2. Opcjonalnie: określ dodatkowe parametry niestandardowe protokołu OAuth, które chcesz wysłać wraz z żądaniem OAuth.

    Web

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

    Web

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

    Parametry obsługiwane przez Microsoft znajdziesz w dokumentacji OAuth firmy Microsoft. Pamiętaj, że nie możesz przekazywać parametrów wymaganych przez Firebase za pomocą znaku setCustomParameters(). Są to parametry client_id, response_type, redirect_uri, state, scope i response_mode.

    Aby zezwolić na logowanie się w aplikacji tylko użytkownikom z określonej dzierżawy Azure AD, możesz użyć przyjaznej nazwy domeny dzierżawy Azure AD lub identyfikatora GUID dzierżawy. Możesz to zrobić, określając pole „tenant” w obiekcie parametrów niestandardowych.

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

    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'
    });
  3. Opcjonalnie: określ dodatkowe zakresy OAuth 2.0 poza podstawowym profilem, które chcesz przesłać do dostawcy uwierzytelniania.

    provider.addScope('mail.read');
    provider.addScope('calendars.read');

    Więcej informacji znajdziesz w dokumentacji firmy Microsoft dotyczącej uprawnień i zgody.

  4. Uwierzytelnij w Firebase za pomocą obiektu dostawcy OAuth. Możesz poprosić użytkowników o zalogowanie się za pomocą kont Microsoft, otwierając wyskakujące okienko lub przekierowując ich na stronę logowania. Na urządzeniach mobilnych zalecana jest metoda przekierowania.

    • Aby zalogować się w wyskakującym okienku, wywołaj funkcję signInWithPopup:

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

    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.
      });
    • Aby zalogować się przez przekierowanie na stronę logowania, wywołaj funkcję signInWithRedirect:

    Podczas korzystania z elementów signInWithRedirect, linkWithRedirect lub reauthenticateWithRedirect stosuj sprawdzone metody.

    Web

    import { getAuth, signInWithRedirect } from "firebase/auth";
    
    const auth = getAuth();
    signInWithRedirect(auth, provider);

    Web

    firebase.auth().signInWithRedirect(provider);

    Gdy użytkownik zakończy logowanie i wróci na stronę, możesz uzyskać wynik logowania, wywołując metodę getRedirectResult.

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

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

    Po pomyślnym zakończeniu token dostępu OAuth powiązany z dostawcą można pobrać z obiektu firebase.auth.UserCredential zwróconego przez funkcję.

    Za pomocą tokena dostępu OAuth możesz wywoływać Microsoft Graph API.

    Aby na przykład uzyskać podstawowe informacje o profilu, można wywołać ten interfejs API REST:

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

    W przeciwieństwie do innych dostawców obsługiwanych przez Firebase Auth Microsoft nie udostępnia adresu URL zdjęcia. Zamiast tego dane binarne zdjęcia profilowego należy pobrać za pomocą interfejsu Microsoft Graph API.

    Oprócz tokena dostępu OAuth z obiektu firebase.auth.UserCredential można też pobrać token identyfikatora OAuth użytkownika. Roszczenie sub w tokenie identyfikatora jest specyficzne dla aplikacji i nie będzie zgodne z identyfikatorem użytkownika sfederowanego używanym przez Uwierzytelnianie Firebase i dostępnym za pomocą user.providerData[0].uid. Zamiast niego użyj pola roszczenia oid. Jeśli do logowania używasz najemcy Azure AD, roszczenie oid będzie dokładnym dopasowaniem. W przypadku konta bez subskrypcji pole oid jest jednak uzupełniane. W przypadku federacyjnego identyfikatora 4b2eabcdefghijkl pole oid będzie miało format 00000000-0000-0000-4b2e-abcdefghijkl.

  5. Powyższe przykłady dotyczą przepływów logowania, ale możesz też połączyć dostawcę Microsoft z istniejącym użytkownikiem za pomocą linkWithPopup/linkWithRedirect. Możesz na przykład połączyć z tym samym użytkownikiem kilku dostawców, aby mógł logować się za pomocą dowolnego z nich.

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

    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.
        });
  6. Ten sam wzorzec można zastosować w przypadku funkcji reauthenticateWithPopup/reauthenticateWithRedirect, która umożliwia pobieranie nowych danych logowania do operacji związanych z poufnymi danymi, które wymagają niedawnego logowania.

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

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

Uwierzytelnianie za pomocą Firebase w rozszerzeniu do Chrome

Jeśli tworzysz aplikację rozszerzenia do Chrome, zapoznaj się z  przewodnikiem po dokumentach poza ekranem.

Dalsze kroki

Po pierwszym zalogowaniu się użytkownika tworzone jest nowe konto użytkownika, które jest powiązane z danymi logowania, czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania, za pomocą których użytkownik się zalogował. To nowe konto jest przechowywane w ramach projektu w Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w projekcie, niezależnie od sposobu logowania.

  • Zalecanym sposobem sprawdzania stanu uwierzytelniania użytkownika w aplikacjach jest ustawienie obserwatora na obiekcie Auth. Następnie możesz pobrać podstawowe informacje o profilu użytkownika z obiektu User. Zobacz Zarządzanie użytkownikami.

  • W Firebase Realtime Database i Cloud Storage regułach bezpieczeństwa możesz pobrać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik może mieć dostęp.

Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą wielu dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.

Aby wylogować użytkownika, wywołaj funkcję signOut:

Web

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});