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 oparte na internecie za pomocą pakietu SDK Firebase, aby przeprowadzić cały 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:
- Dodaj Firebase do projektu Apple.
- W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.
- Na karcie Metoda logowania włącz dostawcę logowania Microsoft.
-
Dodaj identyfikator klienta i tajny klucz klienta z konsoli deweloperskiej tego dostawcy do konfiguracji dostawcy:
- 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.
-
Podczas rejestrowania aplikacji u tych dostawców pamiętaj, aby zarejestrować domenę
*.firebaseapp.comprojektu jako domenę przekierowania aplikacji.
- Kliknij Zapisz.
Obsługa procesu logowania za pomocą pakietu SDK Firebase
Aby obsłużyć proces logowania za pomocą pakietu Firebase SDK na platformy Apple, wykonaj te czynności:
Dodaj niestandardowe schematy URL do projektu w Xcode:
- Otwórz konfigurację projektu: w widoku drzewa po lewej stronie kliknij dwukrotnie nazwę projektu. W sekcji MIEJSCA DOCELOWE wybierz aplikację, a następnie kliknij kartę Informacje i rozwiń sekcję Typy adresów URL.
-
Kliknij przycisk + i dodaj zakodowany identyfikator aplikacji jako schemat URI adresu URL.
Pozostałe pola pozostaw puste.
Zakodowany identyfikator aplikacji znajdziesz w Firebase konsoli: otwórz
Ustawienia > kartę Ogólne, a następnie przewiń w dół do sekcji Twoje aplikacje, aby wyświetlić szczegóły aplikacji na iOS.Po zakończeniu konfiguracja powinna wyglądać podobnie do poniższej (ale z wartościami specyficznymi dla Twojej aplikacji):
Utwórz instancję OAuthProvider, używając identyfikatora dostawcy microsoft.com.
Swift
var provider = OAuthProvider(providerID: "microsoft.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"];
Opcjonalnie: określ dodatkowe parametry niestandardowe protokołu OAuth, które chcesz wysłać wraz z żądaniem OAuth.
Swift
provider.customParameters = [ "prompt": "consent", "login_hint": "user@firstadd.onmicrosoft.com" ]
Objective-C
[provider setCustomParameters:@{@"prompt": @"consent", @"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.
Swift
provider.customParameters = [ // 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" ]
Objective-C
// 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.customParameters = @{@"tenant": @"TENANT_ID"};
Opcjonalnie: określ dodatkowe zakresy OAuth 2.0 poza podstawowym profilem, które chcesz przesłać do dostawcy uwierzytelniania.
Swift
provider.scopes = ["mail.read", "calendars.read"]
Objective-C
[provider setScopes:@[@"mail.read", @"calendars.read"]];
Więcej informacji znajdziesz w dokumentacji firmy Microsoft dotyczącej uprawnień i zgody.
Opcjonalnie: jeśli chcesz dostosować sposób wyświetlania przez aplikację elementów
SFSafariViewControllerlubUIWebViewpodczas wyświetlania użytkownikowi reCAPTCHA, utwórz klasę niestandardową zgodną z protokołemAuthUIDelegatei przekaż ją docredentialWithUIDelegate.Uwierzytelnij w Firebase za pomocą obiektu dostawcy OAuth.
Swift
// Replace nil with the custom class that conforms to AuthUIDelegate // you created in last step to use a customized web view. provider.getCredentialWith(nil) { credential, error in if error != nil { // Handle error. } if credential != nil { Auth().signIn(with: credential) { authResult, error in if error != nil { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // (authResult.credential as? OAuthCredential)?.accessToken // OAuth ID token can also be retrieved: // (authResult.credential as? OAuthCredential)?.idToken } } }
Objective-C
[provider getCredentialWithUIDelegate:nil completion:^(FIRAuthCredential *_Nullable credential, NSError *_Nullable error) { if (error) { // Handle error. } if (credential) { [[FIRAuth auth] signInWithCredential:credential completion:^(FIRAuthDataResult *_Nullable authResult, NSError *_Nullable error) { if (error) { // Handle error. } // User is signed in. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).accessToken // OAuth ID token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).idToken }]; } }];
Za pomocą tokena dostępu OAuth możesz wywoływać Microsoft Graph API.
Aby na przykład uzyskać podstawowe informacje o profilu, możesz wywołać interfejs API REST, przekazując token dostępu w nagłówku
Authorization: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
OAuthCredentialmożna też pobrać token identyfikatora OAuth użytkownika. Roszczeniesubw 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 roszczeniaoid. Jeśli do logowania używasz najemcy Azure AD, roszczenieoidbędzie dokładnym dopasowaniem. W przypadku konta bez subskrypcji poleoidjest jednak uzupełniane. W przypadku federacyjnego identyfikatora4b2eabcdefghijklpoleoidbędzie miało format00000000-0000-0000-4b2e-abcdefghijkl.Powyższe przykłady dotyczą przepływów logowania, ale możesz też połączyć dostawcę Microsoft z istniejącym użytkownikiem za pomocą
linkWithCredential. Możesz na przykład połączyć wielu dostawców z tym samym użytkownikiem, aby mógł on logować się za pomocą dowolnego z nich.Swift
Auth().currentUser.link(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // Microsoft credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // (authResult.credential as? OAuthCredential)?.accessToken // OAuth ID token can also be retrieved: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // Microsoft credential is linked to the current user. // IdP data available in authResult.additionalUserInfo.profile. // OAuth access token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).accessToken // OAuth ID token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).idToken }];
Ten sam wzorzec można stosować w przypadku funkcji
reauthenticateWithCredential, która umożliwia pobieranie nowych danych logowania do operacji wrażliwych wymagających niedawnego zalogowania się.Swift
Auth().currentUser.reauthenticateWithCredential(withCredential: credential) { authResult, error in if error != nil { // Handle error. } // 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. // Additional OAuth access token can also be retrieved: // (authResult.credential as? OAuthCredential)?.accessToken // OAuth ID token can also be retrieved: // (authResult.credential as? OAuthCredential)?.idToken }
Objective-C
[[FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { if (error) { // Handle error. } // 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. // Additional OAuth access token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).accessToken // OAuth ID token can also be retrieved: // ((FIROAuthCredential *)authResult.credential).idToken }];
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.
-
W aplikacjach możesz pobierać 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
authi 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:.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
Możesz też dodać kod obsługi błędów dla pełnego zakresu błędów uwierzytelniania. Zobacz Obsługa błędów.