Authentifizierung mit Microsoft auf Apple-Plattformen

Sie können Ihren Benutzern die Authentifizierung bei Firebase über OAuth-Anbieter wie Microsoft Azure Active Directory ermöglichen, indem Sie die webbasierte generische OAuth-Anmeldung mithilfe des Firebase SDK in Ihre App integrieren, um den End-to-End-Anmeldevorgang durchzuführen.

Bevor Sie beginnen

Um Benutzer mit Microsoft-Konten (Azure Active Directory und persönliche Microsoft-Konten) anzumelden, müssen Sie zunächst Microsoft als Anmeldeanbieter für Ihr Firebase-Projekt aktivieren:

  1. In Firebase zu Ihrem Apple - Projekt .
  2. In der Firebase Konsole , öffnen Sie den Abschnitt Auth.
  3. Auf dem Anmelden Methode Registerkarte, aktivieren Sie die Microsoft - Provider.
  4. Fügen Sie die Client - ID und Client - Geheimnis von dem betreffenden Anbieter Entwickler - Konsole an den Provider - Konfiguration:
    1. Um ein Microsoft OAuth - Client zu registrieren, folgen Sie den Anweisungen in Quickstart: Register eine App mit dem Azure Active Directory v2.0 Endpunkt . Beachten Sie, dass dieser Endpunkt die Anmeldung mit persönlichen Microsoft-Konten sowie mit Azure Active Directory-Konten unterstützt. Weitere über Azure Active Directory v2.0.
    2. Bei Anwendungen mit diesen Anbietern registrieren, müssen Sie die Registrierung *.firebaseapp.com Domain für Ihr Projekt als Redirect - Domain für Ihre App.
  5. Klicken Sie auf Speichern.

Verwalten Sie den Anmeldevorgang mit dem Firebase SDK

Führen Sie die folgenden Schritte aus, um den Anmeldevorgang mit dem Firebase-SDK für Apple-Plattformen abzuwickeln:

  1. Fügen Sie Ihrem Xcode-Projekt benutzerdefinierte URL-Schemas hinzu:

    1. Öffnen Sie Ihre Projektkonfiguration: Doppelklicken Sie in der linken Baumansicht auf den Projektnamen. Wählen Sie Ihre App aus dem Abschnitt VORGABEN, wählen Sie dann die Registerkarte Info, und erweitern Sie den URL - Typen Abschnitt.
    2. Klicken Sie auf die Schaltfläche +, und fügen Sie eine URL - Schema für die Reversed - Client - ID. Um diesen Wert zu finden, öffnen Sie die GoogleService-Info.plist Konfigurationsdatei, und suchen Sie nach dem REVERSED_CLIENT_ID Schlüssel. Kopieren Sie den Wert dieses Schlüssels, und fügen Sie ihn in das URL - Schemata auf der Konfigurationsseite Feld. Lassen Sie die anderen Felder leer.

      Nach Abschluss sollte Ihre Konfiguration in etwa wie folgt aussehen (aber mit Ihren anwendungsspezifischen Werten):

  2. Erstellen Sie eine Instanz eines OAuthProvider mit der Provider - ID microsoft.com.

    Schnell

        var provider = OAuthProvider(providerID: "microsoft.com")
        

    Ziel c

        FIROAuthProvider *provider = [FIROAuthProvider providerWithProviderID:@"microsoft.com"];
        
  3. Optional: Geben Sie zusätzliche benutzerdefinierte OAuth Parameter , die Sie mit dem OAuth Anfrage senden möchten.

    Schnell

        provider.customParameters = [
          "prompt": "consent",
          "login_hint": "user@firstadd.onmicrosoft.com"
        ]
        

    Ziel c

        [provider setCustomParameters:@{@"prompt": @"consent", @"login_hint": @"user@firstadd.onmicrosoft.com"}];
        

    Für die Parameter Microsoft unterstützt, finden Sie in der Microsoft OAuth Dokumentation . Beachten Sie, dass Sie nicht Firebase-erforderliche Parameter mit übergeben können setCustomParameters . Diese Parameter sind client_id, response_type, redirect_uri, Zustand, Umfang und response_mode.

    Damit sich nur Benutzer eines bestimmten Azure AD-Mandanten bei der Anwendung anmelden können, kann entweder der benutzerfreundliche Domänenname des Azure AD-Mandanten oder die GUID-ID des Mandanten verwendet werden. Dies kann durch Angabe des Felds "Mandant" im benutzerdefinierten Parameterobjekt erfolgen.

    Schnell

        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"
        ]
        

    Ziel 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"};
        
  4. Optional: Geben Sie zusätzliche OAuth 2.0 Bereiche jenseits Grundprofil , dass Sie auf Anfrage vom Authentifizierungs - Provider wollen.

    Schnell

        provider.scopes = ["mail.read", "calendars.read"]
        

    Ziel c

        [provider setScopes:@[@"mail.read", @"calendars.read"]];
        

    Um mehr zu erfahren, beziehen sich auf die Microsoft - Berechtigungen und Zustimmung Dokumentation .

  5. Optional: Wenn Sie die Möglichkeit , Ihre App präsentiert die anpassen SFSafariViewController oder UIWebView , wenn die reCAPTCHA für den Benutzer, eine benutzerdefinierte Klasse erstellen , das entspricht das FIRAuthUIDelegate Protokoll und übergibt es an getCredentialWithUIDelegate:completion: .

  6. Authentifizieren Sie sich bei Firebase mithilfe des OAuth-Anbieterobjekts.

    Schnell

        // 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.accessToken
              // OAuth ID token can also be retrieved:
              // authResult.credential.idToken
            }
          }
        }
        

    Ziel 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:
              // authResult.credential.accessToken
              // OAuth ID token can also be retrieved:
              // authResult.credential.idToken
            }];
          }
        }];
        

    Unter Verwendung der OAuth - Zugriffstoken, können Sie den Anruf Microsoft Graph API .

    Zum Beispiel Grundprofil Informationen zu erhalten, können Sie die REST - API aufrufen, die Zugriff vorbei in den Token - Authorization - Header:

    https://graph.microsoft.com/v1.0/me
    

    Im Gegensatz zu anderen Anbietern von Firebase Auth unterstützt wird , hat Microsoft kein Foto URL zur Verfügung stellen und stattdessen hat die binären Daten für ein neue Profil - Foto über angefordert werden Microsoft Graph API .

    Neben den OAuth - Zugriffstoken, der Benutzers OAuth ID - OAuthCredential Token können auch von den abgerufen werden OAuthCredential Objekt. Der sub in ID - Token ist app-spezifisch und nicht das föderierte Anwenderidentifizierer von Firebase Auth und zugänglich über verwendeten übereinstimmen user.providerData[0].uid . Der oid Anspruch Feld sollte stattdessen verwendet werden. Wenn eine Azure AD Mieter mit zur Anmeldung in der oid wird Anspruch eine exakte Übereinstimmung sein. Doch für den Nicht-Mieter Fall die oid ist Feld gepolstert. Für eine föderierte ID 4b2eabcdefghijkl , die oid haben eine Form haben 00000000-0000-0000-4b2e-abcdefghijkl .

  7. Während die obigen Beispiele auf Anmelde-Flows konzentrieren, haben Sie auch die Möglichkeit , einen Microsoft - Provider zu einem vorhandenen Benutzer verwenden zu verknüpfen linkWithCredential . Sie können beispielsweise mehrere Anbieter mit demselben Benutzer verknüpfen, sodass sie sich bei beiden anmelden können.

    Schnell

        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.accessToken
          // OAuth ID token can also be retrieved:
          // authResult.credential.idToken
        }
        

    Ziel 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:
          // authResult.credential.accessToken
          // OAuth ID token can also be retrieved:
          // authResult.credential.idToken
        }];
        
  8. Das gleiche Muster kann mit verwendet wird reauthenticateWithCredential die verwendet werden können frische Anmeldeinformationen für sensible Vorgänge abzurufen , die letzte Anmeldung erforderlich.

    Schnell

        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.accessToken
          // OAuth ID token can also be retrieved:
          // authResult.credential.idToken
        }
        

    Ziel 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:
          // authResult.credential.accessToken
          // OAuth ID token can also be retrieved:
          // authResult.credential.idToken
        }];
        

Nachdem sich ein Benutzer zum ersten Mal anmeldet, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen – d. h. Benutzername und Kennwort, Telefonnummer oder Authentifizierungsanbieterinformationen – verknüpft, mit denen sich der Benutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Benutzer anmeldet.

  • In Ihren Anwendungen können Sie die Benutzerprofilgrundinformationen aus dem bekommen FIRUser Objekt. Siehe Benutzer verwalten .

  • In Ihrer Datenbank und Firebase Realtime Cloud Storage Sicherheitsregeln , können Sie die angemeldeten Nutzer die eindeutige Benutzer - ID aus der bekommen auth Variable, und es verwenden , um steuern kann ein Benutzer Zugriff , welche Daten.

Sie können Benutzer erlauben , durch mehrere Authentifizierungsanbieter anmelden, um Ihre App Verknüpfung Auth - Provider - Anmeldeinformationen zu einem vorhandenen Benutzerkonto.

Um einen Benutzer abzumelden, rufen signOut: .

Schnell

    let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}
  

Ziel c

    NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

Möglicherweise möchten Sie auch einen Fehlerbehandlungscode für alle Authentifizierungsfehler hinzufügen. Siehe Handle Fehler .