Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Apple'ı JavaScript ile Kullanarak Kimlik Doğrulama

Uçtan uca OAuth 2.0 oturum açma akışını gerçekleştirmek için Firebase SDK'yı kullanarak kullanıcılarınızın Apple kimliklerini kullanarak Firebase ile kimlik doğrulamasına izin verebilirsiniz.

Sen başlamadan önce

Apple kullanarak kullanıcılarda oturum açmak için önce Apple'ın geliştirici sitesinde Apple ile Giriş Yap özelliğini yapılandırın, ardından Apple'ı Firebase projeniz için oturum açma sağlayıcısı olarak etkinleştirin.

Apple Geliştirici Programına katılın

Apple ile Giriş Yap yalnızca Apple Geliştirici Programı üyeleri tarafından yapılandırılabilir.

Apple ile Giriş Yapmayı Yapılandırma

Apple Developer sitesinde aşağıdakileri yapın:

  1. Web için Apple ile Giriş Yapmayı Yapılandır'ın ilk bölümünde açıklandığı gibi web sitenizi uygulamanızla ilişkilendirin. İstendiğinde, aşağıdaki URL'yi Dönüş URL'si olarak kaydedin:

    https://YOUR_FIREBASE_PROJECT_ID.firebaseapp.com/__/auth/handler

    Firebase proje kimliğinizi Firebase konsol ayarları sayfasından alabilirsiniz .

    İşiniz bittiğinde, bir sonraki bölümde ihtiyaç duyacağınız yeni Servis Kimliğinizi not edin.

  2. Apple özel anahtarıyla Giriş Yapın . Bir sonraki bölümde yeni özel anahtarınıza ve anahtar kimliğinize ihtiyacınız olacak.
  3. Firebase Authentication'ın e-posta bağlantısı girişi, e-posta adresi doğrulama, hesap değişikliği iptali ve diğerleri dahil olmak üzere kullanıcılara e-posta gönderen özelliklerinden herhangi birini kullanıyorsanız , Apple özel e-posta aktarma hizmetini yapılandırın ve noreply@ YOUR_FIREBASE_PROJECT_ID .firebaseapp.com (veya Apple'ın Firebase Authentication tarafından gönderilen e-postaları anonimleştirilmiş Apple e-posta adreslerine aktarabilmesi için özelleştirilmiş e-posta şablonu etki alanınız).

Apple'ı oturum açma sağlayıcısı olarak etkinleştirin

  1. Firebase'i projenize ekleyin .
  2. In Firebase konsoluna , Auth bölümünü açın. Giriş yöntemi sekmesinde, Apple sağlayıcısını etkinleştirin. Önceki bölümde oluşturduğunuz Hizmet Kimliğini belirtin. Ayrıca, OAuth kod akışı yapılandırması bölümünde , Apple Ekip Kimliğinizi ve önceki bölümde oluşturduğunuz özel anahtarı ve anahtar kimliğini belirtin.

Apple'ın anonimleştirilmiş veri gereksinimlerine uyun

Apple ile Giriş Yap, kullanıcılara, oturum açarken e-posta adresleri dahil olmak üzere verilerini anonimleştirme seçeneği sunar. Bu seçeneği seçen kullanıcıların, privaterelay.appleid.com etki alanı olan e-posta adresleri vardır. Uygulamanızda Apple ile Giriş Yap özelliğini kullandığınızda, bu anonimleştirilmiş Apple Kimlikleriyle ilgili olarak Apple'ın geçerli geliştirici politikalarına veya hükümlerine uymanız gerekir.

Bu, kişisel bilgileri doğrudan anonimleştirilmiş bir Apple Kimliği ile ilişkilendirmeden önce gerekli tüm kullanıcı onayını almayı içerir. Firebase Kimlik Doğrulaması kullanılırken bu, aşağıdaki işlemleri içerebilir:

  • Bir e-posta adresini anonimleştirilmiş bir Apple Kimliğine bağlayın veya tersini yapın.
  • Bir telefon numarasını anonimleştirilmiş bir Apple Kimliğine bağlayın veya tersini yapın
  • Anonim olmayan bir sosyal kimlik bilgilerini (Facebook, Google, vb.) Anonimleştirilmiş bir Apple Kimliğine bağlayın veya tersini yapın.

Yukarıdaki liste kapsamlı değildir. Uygulamanızın Apple gereksinimlerini karşıladığından emin olmak için geliştirici hesabınızın Üyelik bölümündeki Apple Geliştirici Programı Lisans Sözleşmesi'ne bakın.

Firebase SDK ile oturum açma akışını yönetin

Bir web uygulaması oluşturuyorsanız Apple hesaplarını kullanarak Firebase ile kullanıcılarınızın kimliğini doğrulamanın en kolay yolu, tüm oturum açma akışını Firebase JavaScript SDK ile işlemektir.

Firebase JavaScript SDK ile oturum açma akışını yönetmek için şu adımları izleyin:

  1. İlgili sağlayıcı kimliğini apple.com kullanarak bir OAuthProvider örneği oluşturun.

    var provider = new firebase.auth.OAuthProvider('apple.com');
  2. İsteğe bağlı: Kimlik doğrulama sağlayıcısından talep etmek istediğiniz varsayılanın ötesinde ek OAuth 2.0 kapsamları belirtin.

    provider.addScope('email');
    provider.addScope('name');

    Varsayılan olarak, e-posta adresi başına bir hesap etkinleştirildiğinde, Firebase e-posta ve ad kapsamları ister. Bu ayarı e-posta adresi başına Birden çok hesap olarak değiştirirseniz Firebase, siz belirtmedikçe Apple'dan herhangi bir kapsam istemez.

  3. İsteğe bağlı: Apple'ın oturum açma ekranını İngilizce dışında bir dilde görüntülemek istiyorsanız, locale parametresini ayarlayın. Desteklenen yerel ayarlar için Apple ile Giriş Yap belgelerine bakın.

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });
  4. OAuth sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulayın. Bir açılır pencere açarak veya giriş sayfasına yönlendirerek kullanıcılarınızdan Apple Hesapları ile giriş yapmalarını isteyebilirsiniz. Yönlendirme yöntemi mobil cihazlarda tercih edilir.

    • Bir açılır pencereyle oturum açmak için signInWithPopup() çağırın:

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // The signed-in user info.
          var user = result.user;
      
          // You can also get the Apple OAuth Access and ID Tokens.
          var accessToken = credential.accessToken;
          var idToken = credential.idToken;
      
          // ...
        })
        .catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
      
          // ...
        });
    • Oturum açma sayfasına yeniden yönlendirerek oturum açmak için signInWithRedirect() çağırın:

      firebase.auth().signInWithRedirect(provider);

      Kullanıcı oturum açmayı tamamladıktan ve sayfaya döndükten sonra, oturum açma sonucunu getRedirectResult() çağırarak getRedirectResult() :

      // Result from Redirect auth flow.
      firebase
        .auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // You can get the Apple OAuth Access and ID Tokens.
            var accessToken = credential.accessToken;
            var idToken = credential.idToken;
      
            // ...
          }
          // The signed-in user info.
          var user = result.user;
        })
        .catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
      
          // ...
        });

      Bu aynı zamanda hataları yakalayabileceğiniz ve işleyebileceğiniz yerdir. Hata kodlarının bir listesi için API referansına bakın .

    Firebase Auth tarafından desteklenen diğer sağlayıcıların aksine, Apple bir fotoğraf URL'si sağlamaz.

    Ayrıca, kullanıcı e-postalarını uygulamayla paylaşmamayı seçtiğinde, Apple bu kullanıcı için uygulamanızla paylaştığı benzersiz bir e-posta adresi ( xyz@privaterelay.appleid.com biçiminde) sağlar. Özel e-posta aktarma hizmetini yapılandırdıysanız Apple, anonimleştirilmiş adrese gönderilen e-postaları kullanıcının gerçek e-posta adresine iletir.

    Apple, görünen ad gibi kullanıcı bilgilerini yalnızca bir kullanıcı ilk kez oturum firebase.auth().currentUser.displayName , görünen adı firebase.auth().currentUser.displayName ile firebase.auth().currentUser.displayName bir kullanıcı Apple ile ilk kez oturum firebase.auth().currentUser.displayName . Ancak, Apple'ı daha önce bir kullanıcıyı Firebase kullanmadan uygulamada oturum açmak için kullandıysanız, Apple Firebase'e kullanıcının görünen adını sağlamaz.

Yeniden kimlik doğrulama ve hesap bağlama

Aynı model, reauthenticateWithPopup() ve reauthenticateWithRedirect() ile kullanılabilir; bunları yakın zamanda oturum açmayı gerektiren hassas işlemler için yeni bir kimlik bilgisi almak için kullanabilirsiniz:

const provider = new firebase.auth.OAuthProvider('apple.com');

firebase
  .auth()
  .currentUser
  .reauthenticateWithPopup(provider)
  .then((result) => {
    // User is re-authenticated with fresh tokens minted and can perform
    // sensitive operations like account deletion, or updating their email
    // address or password.
    /** @type {firebase.auth.OAuthCredential} */
    var credential = result.credential;

    // The signed-in user info.
    var user = result.user;
     // You can also get the Apple OAuth Access and ID Tokens.
    var accessToken = credential.accessToken;
    var idToken = credential.idToken;

    // ...
  })
  .catch((error) => {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // The email of the user's account used.
    var email = error.email;
    // The firebase.auth.AuthCredential type that was used.
    var credential = error.credential;

    // ...
  });

Ayrıca, farklı kimlik sağlayıcıları mevcut hesaplara bağlamak için linkWithPopup() ve linkWithRedirect() kullanabilirsiniz.

Apple'ın, Apple hesaplarını diğer verilere bağlamadan önce kullanıcılardan açık izin almanızı gerektirdiğini unutmayın.

Örneğin, bir Facebook hesabını mevcut Firebase hesabına bağlamak için, kullanıcıyı Facebook'ta oturum açarak elde ettiğiniz erişim jetonunu kullanın:

const provider = new firebase.auth.FacebookAuthProvider();
provider.addScope('user_birthday');

// Assuming the current user is an Apple user linking a Facebook provider.
firebase.auth().currentUser.linkWithPopup(provider)
    .then((result) => {
      // Facebook credential is linked to the current Apple user.
      // Facebook additional data available in result.additionalUserInfo.profile,

      // Additional Facebook OAuth access token can also be retrieved.
      // result.credential.accessToken

      // The user can now sign in to the same account
      // with either Apple or Facebook.
    })
    .catch((error) => {
      // Handle error.
    });

Bir Chrome uzantısında Firebase ile kimlik doğrulayın

Bir Chrome uzantısı uygulaması oluşturuyorsanız, Chrome uzantı kimliğinizi eklemeniz gerekir:

  1. Firebase konsolunda projenizi açın.
  2. Kimlik Doğrulama bölümünde, Oturum açma yöntemi sayfasını açın.
  3. Yetkili Etki Alanları listesine aşağıdakine benzer bir URI ekleyin:
    chrome-extension://CHROME_EXTENSION_ID

Chrome uzantıları HTTP yeniden yönlendirmelerini kullanamadığından, Chrome uzantılarında yalnızca açılır pencere işlemleri ( signInWithPopup ve linkWithPopup ) kullanılabilir. Kimlik doğrulama açılır penceresi tarayıcı eylemi açılır penceresini iptal edeceğinden, bu yöntemleri bir tarayıcı eylemi açılır penceresinden ziyade bir arka plan komut dosyasından çağırmalısınız.

Chrome uzantınızın manifest dosyasında https://apis.google.com URL'sini content_security_policy izin verilenler listesine eklediğinizden emin olun.

Varsayılan firebaseapp.com alanına benzer şekilde özel alanı Apple ile doğrulamanız gerektiğini unutmayın:

http://auth.custom.example.com/.well-known/apple-developer-domain-association.txt

Gelişmiş: Node.js'de Firebase ile kimlik doğrulama

Bir Node.js uygulamasında Firebase ile kimlik doğrulaması yapmak için:

  1. Kullanıcıya Apple Hesabı ile giriş yapın ve kullanıcının Apple Kimliği jetonunu alın. Bunu birkaç şekilde başarabilirsiniz. Örneğin, Node.js uygulamanızın bir tarayıcı ön ucu varsa:

    1. Arka ucunuzda rastgele bir dize ("nonce") oluşturun ve SHA256 karmasını hesaplayın. Nonce, arka ucunuz ile Apple'ın kimlik doğrulama sunucuları arasındaki tek bir gidiş-dönüş yolculuğunu doğrulamak için kullandığınız tek seferlik kullanım değeridir.

      const crypto = require("crypto");
      const string_decoder = require("string_decoder");
      
      // Generate a new random string for each sign-in
      const generateNonce = function(length) {
        const decoder = new string_decoder.StringDecoder("ascii");
        const buf = Buffer.alloc(length);
        var nonce = "";
        while (nonce.length < length) {
          crypto.randomFillSync(buf);
          nonce = decoder.write(buf);
        }
        return nonce.substr(0, length);
      };
      
      const unhashedNonce = generateNonce(10);
      
      // SHA256-hashed nonce in hex
      const hashedNonceHex = crypto.createHash('sha256')
        .update(unhashedNonce).digest().toString('hex');
    2. Giriş sayfanızda, Apple ile Giriş Yap yapılandırmanızda hashing uygulanmış nonce'yi belirtin:

      <script src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
      <div id="appleid-signin" data-color="black" data-border="true" data-type="sign in"></div>
      <script>
          AppleID.auth.init({
              clientId: YOUR_APPLE_CLIENT_ID,
              scope: 'name email',
              redirectURI: URL_TO_YOUR_REDIRECT_HANDLER,  // See the next step.
              state: '[STATE]',  // Optional value that Apple will send back to you
                                 // so you can return users to the same context after
                                 // they sign in.
              nonce: HASHED_NONCE  // The hashed nonce you generated in the previous step.
          });
      </script>
      
    3. Apple ID jetonunu POSTed kimlik doğrulama yanıtı sunucu tarafında alın:

      app.post('/redirect', (req, res) => {
        const savedState = req.cookies.__session;
        const code = req.body.code;
        const state = req.body.state;
        const appleIdToken = req.body.id_token;
        if (savedState !== state || !code) {
          res.status(403).send('403: Permission denied');
        } else {
          // Sign in with Firebase using appleIdToken. (See next step).
        }
      });
      

    Apple ile Giriş Yapmak İçin Web Sayfanızı Yapılandırma konusuna da bakın.

  2. Kullanıcının Apple Kimliği jetonunu aldıktan sonra, bunu bir Kimlik Bilgisi nesnesi oluşturmak için kullanın ve ardından kullanıcıda kimlik bilgileriyle oturum açın:

    // Build Firebase credential with the Apple ID token.
    const provider = new firebase.auth.OAuthProvider('apple.com');
    const authCredential = provider.credential({
      idToken: appleIdToken,
      rawNonce: unhashedNonce,
    });
    
    // Sign in with credential form the Apple user.
    firebase.auth().signInWithCredential(authCredential)
      .then((result) => {
        // User signed in.
      })
      .catch((error) => {
        // An error occurred. If error.code == 'auth/missing-or-invalid-nonce',
        // make sure you're sending the SHA256-hashed nonce as a hex string
        // with your request to Apple.
        console.log(error);
      });

Sonraki adımlar

Bir kullanıcı ilk kez oturum açtıktan sonra, yeni bir kullanıcı hesabı oluşturulur ve oturum açan kullanıcı kimlik bilgilerine (yani kullanıcı adı ve parolası, telefon numarası veya kimlik doğrulama sağlayıcı bilgileri) bağlanır. Bu yeni hesap, Firebase projenizin bir parçası olarak depolanır ve kullanıcının nasıl oturum açtığına bakılmaksızın projenizdeki her uygulamada bir kullanıcıyı tanımlamak için kullanılabilir.

  • Uygulamalarınızda, kullanıcınızın kimlik doğrulama durumunu öğrenmenin önerilen yolu, Auth nesnesine bir gözlemci ayarlamaktır. Daha sonra kullanıcının temel profil bilgilerini User nesnesinden alabilirsiniz. Kullanıcıları Yönetme konusuna bakın.

  • Firebase Realtime Database ve Cloud Storage Güvenlik Kurallarınızda , oturum auth kullanıcının benzersiz kullanıcı kimliğini auth değişkeninden alabilir ve bir kullanıcının hangi verilere erişebileceğini kontrol etmek için kullanabilirsiniz.

Yetkilendirme sağlayıcı kimlik bilgilerini mevcut bir kullanıcı hesabına bağlayarak , kullanıcıların birden çok kimlik doğrulama sağlayıcısı kullanarak uygulamanızda oturum açmasına izin verebilirsiniz .

Bir kullanıcının oturumunu kapatmak için signOut arayın:

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});