Możesz umożliwić użytkownikom uwierzytelnianie się 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 w Firebase:
- Dodaj Firebase do projektu Apple.
- W konsoli Firebase otwórz Zabezpieczenia > Uwierzytelnianie.
- Na karcie Metoda logowania włącz dostawcę logowania Microsoft.
-
Dodaj identyfikator klienta i tajny klucz klienta z konsoli dewelopera tego dostawcy do konfiguracji dostawcy:
- Aby zarejestrować klienta Microsoft OAuth, postępuj zgodnie z instrukcjami w przewodniku Szybki start: rejestrowanie aplikacji w punkcie końcowym Azure Active Directory w wersji 2.0. Pamiętaj, że ten punkt końcowy obsługuje logowanie za pomocą osobistych kont Microsoft oraz kont Azure Active Directory. Więcej informacji o Azure Active Directory w wersji 2.0.
-
Podczas rejestrowania aplikacji u tych dostawców zarejestruj domenę dla swojego projektu jako domenę przekierowania dla aplikacji.
*.firebaseapp.com
- Kliknij Zapisz.
Obsługa procesu logowania za pomocą pakietu SDK Firebase
Aby obsługiwać proces logowania za pomocą pakietu SDK Firebase na platformach Apple, wykonaj te czynności:
Dodaj niestandardowe schematy adresów URL do projektu Xcode:
- Otwórz konfigurację projektu: kliknij dwukrotnie nazwę projektu w widoku drzewa po lewej stronie. W sekcji TARGETS wybierz aplikację, a następnie kliknij kartę Info i rozwiń sekcję URL Types.
-
Kliknij przycisk + i dodaj zakodowany identyfikator aplikacji jako schemat URI adresu URL.
Pozostałe pola pozostaw puste.
Zakodowany identyfikator aplikacji znajdziesz w konsoli Firebase: otwórz ustawienia
Settings > kartę General, a następnie przewiń w dół do sekcji Your apps, aby wyświetlić szczegóły aplikacji na iOS.Po zakończeniu konfiguracja powinna wyglądać podobnie do tej (ale z wartościami specyficznymi dla Twojej aplikacji):
Utwórz instancję OAuthProvider za pomocą identyfikatora dostawcy microsoft.com.
Swift
var provider = OAuthProvider(providerID: "microsoft.com")
Objective-C
FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"];
Opcjonalnie: określ dodatkowe niestandardowe parametry OAuth, które chcesz wysłać 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"}];
Informacje o parametrach obsługiwanych przez Microsoft znajdziesz w dokumentacji Microsoft OAuth. Pamiętaj, że nie możesz przekazywać parametrów wymaganych przez Firebase za pomocą
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 protokołu OAuth 2.0 poza podstawowym profilem, o które chcesz poprosić dostawcę uwierzytelniania.
Swift
provider.scopes = ["mail.read", "calendars.read"]
Objective-C
[provider setScopes:@[@"mail.read", @"calendars.read"]];
Więcej informacji znajdziesz w dokumentacji Microsoft dotyczącej uprawnień i zgody.
Opcjonalnie: jeśli chcesz dostosować sposób, w jaki aplikacja wyświetla
SFSafariViewControllerlubUIWebViewpodczas wyświetlania użytkownikowi reCAPTCHA, utwórz klasę niestandardową zgodną z protokołemAuthUIDelegatei przekaż ją docredentialWithUIDelegate.Uwierzytelnij się 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 Uwierzytelnianie Firebase Microsoft nie udostępnia adresu URL zdjęcia, a dane binarne zdjęcia profilowego trzeba pobrać za pomocą Microsoft Graph API.
Oprócz tokena dostępu OAuth z obiektu
OAuthCredentialmożna też pobrać token identyfikatora OAuth użytkownika. Deklaracjasubw tokenie identyfikatora jest specyficzna dla aplikacji i nie będzie zgodna z identyfikatorem użytkownika sfederowanego używanym przez Uwierzytelnianie Firebase, do którego można uzyskać dostęp za pomocąuser.providerData[0].uid. Zamiast tego należy użyć pola deklaracjioid. Gdy do logowania używasz dzierżawy Azure AD, deklaracjaoidbędzie dokładnie pasować. W przypadku braku dzierżawy poleoidjest jednak dopełniane. W przypadku identyfikatora sfederowanego4b2eabcdefghijklpoleoidbędzie mieć postać00000000-0000-0000-4b2e-abcdefghijkl.Powyższe przykłady koncentrują się na procesach 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ł się on logować 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
reauthenticateWithCredential, którego można używać do pobierania nowych danych logowania w przypadku operacji wrażliwych wymagających niedawnego logowania.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 }];
Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z danymi logowania – 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 projekcie w Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od sposobu logowania.
-
W aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu
User. Zobacz Zarządzanie użytkownikami. W regułach bezpieczeństwa Firebase Realtime Database i Cloud Storage Bazy danych czasu rzeczywistego Firebase i Cloud Storage, możesz uzyskać unikalny identyfikator zalogowanego użytkownika z 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 przez połączenie danych logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.
Aby wylogować użytkownika, wywołaj
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.