Możesz zezwolić użytkownikom na uwierzytelnianie w Firebase za pomocą dostawców protokołu OAuth, takich jak Microsoft Azure Active Directory przez integrację internetowego 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:
- 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.
Jeśli nie masz jeszcze podanego odcisku cyfrowego SHA-1 aplikacji, zrób to Strona Ustawienia konsoli Firebase. Więcej informacji: Uwierzytelnianie klienta , aby dowiedzieć się, jak pobrać odcisk cyfrowy SHA-1 aplikacji.
Zarejestruj się za pomocą pakietu SDK Firebase
Jeśli tworzysz aplikację na Androida, najprostszy sposób uwierzytelniania użytkowników z Firebase, korzystając z kont Microsoft, cały proces logowania za pomocą pakietu SDK Firebase na Androida.
Aby zalogować się za pomocą pakietu SDK Firebase na Androida, wykonaj te czynności:
Utwórz instancję dostawcy OAuthProvider za pomocą jego elementu Builder z parametrem identyfikator dostawcy microsoft.com.
Kotlin+KTX
val provider = OAuthProvider.newBuilder("microsoft.com")
Java
OAuthProvider.Builder provider = OAuthProvider.newBuilder("microsoft.com");
Opcjonalnie: określ dodatkowe niestandardowe parametry OAuth, które chcesz stosować wysyłać z żądaniem OAuth.
Kotlin+KTX
// Target specific email with login hint. // Force re-consent. provider.addCustomParameter("prompt", "consent") // Target specific email with login hint. provider.addCustomParameter("login_hint", "user@firstadd.onmicrosoft.com")
Java
// Target specific email with login hint. // Force re-consent. provider.addCustomParameter("prompt", "consent"); // Target specific email with login hint. provider.addCustomParameter("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.
Kotlin+KTX
// 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". provider.addCustomParameter("tenant", "TENANT_ID")
Java
// 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". provider.addCustomParameter("tenant", "TENANT_ID");
Opcjonalnie: określ dodatkowe zakresy OAuth 2.0 poza podstawowym profilem, które których chcesz żądać od dostawcy uwierzytelniania.
Kotlin+KTX
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. provider.scopes = listOf("mail.read", "calendars.read")
Java
// Request read access to a user's email addresses. // This must be preconfigured in the app's API permissions. List<String> scopes = new ArrayList<String>() { { add("mail.read"); add("calendars.read"); } }; provider.setScopes(scopes);
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. Pamiętaj, że w przeciwieństwie do inne uwierzytelnianie Firebase przejmie kontrolę nad interfejsem użytkownika, wyświetlając Niestandardowa karta Chrome Dlatego nie odwołuj się do swojej aktywności w
OnSuccessListener
iOnFailureListener
, które dołączysz, ponieważ zostaną natychmiast odłączone po operacja powoduje uruchomienie interfejsu użytkownika.Najpierw sprawdź, czy nie wysłaliśmy Ci już odpowiedzi. Logowanie przez ta metoda umieszcza Twoją aktywność w tle, co oznacza, że może odzyskanych przez system podczas logowania. Aby zapewnić nie zmuszaj użytkownika do ponownej próby, jeśli tak się stanie, wynik już istnieje.
Aby sprawdzić, czy jest jakiś oczekujący wynik, zadzwoń pod numer
getPendingAuthResult
:Kotlin+KTX
val pendingResultTask = firebaseAuth.pendingAuthResult if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. } } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Java
Task<AuthResult> pendingResultTask = firebaseAuth.getPendingAuthResult(); if (pendingResultTask != null) { // There's something already here! Finish the sign-in for your user. pendingResultTask .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } }); } else { // There's no pending result so you need to start the sign-in flow. // See below. }
Aby rozpocząć procedurę logowania, zadzwoń pod numer
startActivityForSignInWithProvider
:Kotlin+KTX
firebaseAuth .startActivityForSignInWithProvider(activity, provider.build()) .addOnSuccessListener { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } .addOnFailureListener { // Handle failure. }
Java
firebaseAuth .startActivityForSignInWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is signed in. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // ((OAuthCredential)authResult.getCredential()).getAccessToken(). // The OAuth secret can be retrieved by calling: // ((OAuthCredential)authResult.getCredential()).getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Po pomyślnym ukończeniu konfiguracji token dostępu OAuth powiązany z dostawcy można pobrać ze zwróconego obiektu
OAuthCredential
.Korzystając z tokena dostępu OAuth, możesz wywoływać metodę Interfejs Microsoft Graph API.
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
OAuthCredential
. Deklaracjasub
w tokenie identyfikatora odnosi się do aplikacji i nie pasuje do sfederowanego identyfikator użytkownika wykorzystywany przez Uwierzytelnianie Firebase i dostępny przezuser.getProviderData().get(0).getUid()
Pole deklaracjioid
powinno być: . 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
Powyższe przykłady dotyczą procesu logowania, ale masz też możliwość połączenia dostawcy Microsoft z istniejącym użytkownikiem za pomocą
startActivityForLinkWithProvider
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.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForLinkWithProvider(activity, provider.build()) .addOnSuccessListener { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForLinkWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // Provider credential is linked to the current user. // IdP data available in // authResult.getAdditionalUserInfo().getProfile(). // The OAuth access token can also be retrieved: // authResult.getCredential().getAccessToken(). // The OAuth secret can be retrieved by calling: // authResult.getCredential().getSecret(). } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
Tego samego wzoru można użyć w funkcji
startActivityForReauthenticateWithProvider
, których można używać do pobierania nowe dane uwierzytelniające na potrzeby operacji poufnych, które wymagają ostatniego logowania.Kotlin+KTX
// The user is already signed-in. val firebaseUser = firebaseAuth.currentUser!! firebaseUser .startActivityForReauthenticateWithProvider(activity, provider.build()) .addOnSuccessListener { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } .addOnFailureListener { // Handle failure. }
Java
// The user is already signed-in. FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); firebaseUser .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build()) .addOnSuccessListener( new OnSuccessListener<AuthResult>() { @Override public void onSuccess(AuthResult authResult) { // User is re-authenticated with fresh tokens and // should be able to perform sensitive operations // like account deletion and email or password // update. } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Handle failure. } });
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.
-
W swoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z
FirebaseUser
. 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
:
Kotlin+KTX
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();