Możesz zezwolić użytkownikom na uwierzytelnianie w Firebase za pomocą dostawców protokołu OAuth, takich jak Microsoft Azure Active Directory przez integrację ogólnego logowania OAuth do aplikacji za pomocą pakietu SDK Firebase, aby przeprowadzić kompleksowy proces logowania.
Zanim zaczniesz
Do logowania użytkowników przy użyciu kont Microsoft (Azure Active Directory i osobistych kont Microsoft), musisz najpierw włączyć Microsoft jako dostawcę logowania dla projekt Firebase:
- Dodaj Firebase do projektu JavaScript.
- W konsoli Firebase otwórz sekcję Uwierzytelnianie.
- Na karcie Metoda logowania włącz dostawcę Microsoft.
- Dodaj Client ID (Identyfikator klienta) i Client Secret (Tajny klucz klienta) z konsoli programisty tego dostawcy do
konfiguracja dostawcy:
- Aby zarejestrować klienta OAuth firmy Microsoft, postępuj zgodnie z instrukcjami w artykule Krótkie wprowadzenie: rejestrowanie aplikacji w punkcie końcowym Azure Active Directory w wersji 2.0. Pamiętaj, że ten punkt końcowy obsługuje logowanie się przy użyciu kont osobistych Microsoft i Azure kont Active Directory. Więcej informacji informacje o Azure Active Directory w wersji 2.0.
- Podczas rejestrowania aplikacji u tych dostawców pamiętaj o zarejestrowaniu
Domena
*.firebaseapp.com
dla Twojego projektu jako domena przekierowująca Twojego projektu .
- Kliknij Zapisz.
Zarejestruj się za pomocą pakietu SDK Firebase
Jeśli tworzysz aplikację internetową, najprostszy sposób uwierzytelniania użytkowników Cały proces logowania odbywa się za pomocą Firebase za pomocą kont Microsoft. pakiet SDK Firebase JavaScript.
Aby zalogować się za pomocą pakietu SDK Firebase JavaScript, wykonaj te czynności:
Utwórz instancję OAuthProvider za pomocą 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');
Opcjonalnie: określ dodatkowe niestandardowe parametry OAuth, które chcesz stosować wysyłać 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 Dokumentacja protokołu OAuth firmy Microsoft. Pamiętaj, że parametrów wymaganych przez Firebase nie można przekazywać za pomocą funkcji
setCustomParameters()
Te parametry to client_id, response_type, redirect_uri, state, scope i response_mode.Aby zezwolić na podpisy tylko użytkowników pochodzących z określonego najemcy Azure AD do aplikacji, czyli przyjazną nazwę domeny najemcy Azure AD, lub za pomocą identyfikatora GUID najemcy. W tym celu należy określić „najemca” 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' });
Opcjonalnie: określ dodatkowe zakresy OAuth 2.0 poza podstawowym profilem, które których chcesz żądać od dostawcy uwierzytelniania.
provider.addScope('mail.read'); provider.addScope('calendars.read');
Aby dowiedzieć się więcej, zapoznaj się z Dokumentacja dotycząca uprawnień i zgody użytkownika firmy Microsoft.
Uwierzytelniaj w Firebase za pomocą obiektu dostawcy OAuth. Możesz prosić użytkownicy mogą zalogować się na swoje konta Microsoft przez otwarcie pojawi się wyskakujące okienko lub przekierujemy Cię na stronę logowania. Metoda przekierowania to na urządzeniach mobilnych.
- Aby zalogować się za pomocą wyskakującego okienka, zadzwoń pod numer
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ę, przekierowując na stronę logowania, zadzwoń pod numer
signInWithRedirect
:
Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
Po zalogowaniu się i powrocie użytkownika na stronę można uzyskać wynik logowania, dzwoniąc pod numer
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 ukończeniu konfiguracji token dostępu OAuth powiązany z dostawcy można pobrać z obiektu
firebase.auth.UserCredential
.Korzystając z tokena dostępu OAuth, możesz wywoływać metodę Interfejs Microsoft Graph API.
Aby na przykład uzyskać podstawowe informacje o profilu, użyj poniższego interfejsu API REST można nazwać:
curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://graph.microsoft.com/v1.0/me
W przeciwieństwie do innych dostawców obsługiwanych przez Uwierzytelnianie Firebase Microsoft podać adres URL zdjęcia. Zamiast tego dane binarne zdjęcia profilowego muszą żądania za pośrednictwem Interfejs Microsoft Graph API.
Oprócz tokena dostępu OAuth użytkownika Token tożsamości można też pobrać z obiektu
firebase.auth.UserCredential
. Deklaracjasub
w tokenie identyfikatora odnosi się do aplikacji i nie pasuje do sfederowanego identyfikator użytkownika wykorzystywany przez Uwierzytelnianie Firebase i dostępny przezuser.providerData[0].uid
Zamiast niego należy używać pola deklaracjioid
. Jeśli do logowania używasz najemcy Azure AD, żądanieoid
będzie dokładne dopasowania. W przypadku nienajemców poleoid
jest jednak dopełnione. W przypadku sfederowanego Identyfikator4b2eabcdefghijkl
,oid
będzie mieć formularz00000000-0000-0000-4b2e-abcdefghijkl
- Aby zalogować się za pomocą wyskakującego okienka, zadzwoń pod numer
Powyższe przykłady dotyczą procesu logowania, ale masz też możliwość połączenia dostawcy Microsoft z istniejącym użytkownikiem za pomocą
linkWithPopup
/linkWithRedirect
. Możesz na przykład połączyć kilka dostawców usług dla tego samego użytkownika, umożliwiając im logowanie się za pomocą dowolnej 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. });
Tego samego wzoru można użyć w funkcji
reauthenticateWithPopup
/reauthenticateWithRedirect
, które można wykorzystać, aby: pobieranie nowych danych logowania na potrzeby operacji poufnych, które wymagają ostatnich dane 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 Przewodnik po dokumentach poza ekranem
Dalsze kroki
Gdy użytkownik zaloguje się po raz pierwszy, tworzone jest nowe konto użytkownika. powiązane z danymi logowania, czyli z nazwą użytkownika, hasłem i numerem telefonu, numer telefonu lub informacje o dostawcy uwierzytelniania – użytkownik zalogowany. Ten nowy jest przechowywane w ramach projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od tego, jak się loguje.
-
Aby sprawdzić stan uwierzytelniania użytkownika w swoich aplikacjach, ustaw obserwatora na obiekcie
Auth
. Dzięki temu możesz uzyskać dane użytkownika podstawowych informacji o profilu z obiektuUser
. Zobacz Zarządzanie użytkownikami Na liście Firebase Realtime Database i Cloud Storage regułami zabezpieczeń, pobierz ze zmiennej
auth
unikalny identyfikator zalogowanego użytkownika, i używać ich do kontrolowania, do jakich danych użytkownik ma dostęp.
Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu wielokrotnego uwierzytelniania. dostawców, łącząc dane logowania dostawcy uwierzytelniania z istniejącego konta użytkownika.
Aby wylogować użytkownika, wywołaj
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. });