Google is committed to advancing racial equity for Black communities. See how.
דף זה תורגם על ידי Cloud Translation API.
Switch to English

אמת באמצעות Apple עם JavaScript

באפשרותך לאפשר למשתמשים לבצע אימות באמצעות Firebase באמצעות מזהה Apple שלהם באמצעות Firebase SDK לביצוע זרימת הכניסה מקצה לקצה OAuth 2.0.

לפני שאתה מתחיל

כדי להיכנס למשתמשים באמצעות Apple, ראשית הגדר את כניסה באמצעות Apple באתר המפתחים של Apple, ואז הפעל את Apple כספקית כניסה לפרויקט Firebase שלך.

הצטרף לתוכנית המפתחים של אפל

כניסה באמצעות Apple יכולה להיות מוגדרת רק על ידי חברי תוכנית המפתחים של Apple .

הגדר כניסה באמצעות Apple

באתר המפתחים של אפל , בצע את הפעולות הבאות:

  1. שייך את האתר שלך לאפליקציה שלך כמתואר בסעיף הראשון של הגדרת כניסה עם Apple באינטרנט . כאשר תתבקש, רשום את כתובת האתר הבאה ככתובת URL חזרה:

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

    תוכל לקבל את מזהה הפרויקט שלך ב- Firebase בדף ההגדרות של מסוף Firebase .

    כשתסיים, שים לב למזהה השירות החדש שלך, אשר תזדקק לו בסעיף הבא.

  2. צור כניסה באמצעות מפתח פרטי של Apple . תצטרך את המפתח הפרטי החדש שלך ואת מזהה המפתח בחלק הבא.
  3. אם אתה משתמש בתכונות של אימות Firebase השולח דוא"ל למשתמשים, כולל כניסה לקישור דוא"ל, אימות כתובת דוא"ל, ביטול שינוי חשבון ואחרים, הגדר את שירות ממסר הדוא"ל הפרטי של Apple noreply@ YOUR_FIREBASE_PROJECT_ID .firebaseapp.com (או תחום תבנית הדוא"ל המותאם אישית שלך) כך שאפל תוכל להעביר דוא"ל שנשלח על ידי Firebase Authentication לכתובות דוא"ל של Apple אנונימיות.

אפשר את אפל כספקית כניסה

  1. הוסף את Firebase לפרויקט שלך .
  2. במסוף Firebase , פתח את החלק Auth . בכרטיסיה שיטת כניסה , הפעל את ספק Apple . ציין את מזהה השירות שיצרת בסעיף הקודם. כמו כן, בקטע תצורת זרימת קוד OAuth , ציין את מזהה Apple Team שלך ואת המפתח הפרטי ומזהה המפתח שיצרת בסעיף הקודם.

ציית לדרישות הנתונים האנונימיות של Apple

כניסה באמצעות Apple נותנת למשתמשים אפשרות לבצע אנונימיזציה של הנתונים שלהם, כולל כתובת הדוא"ל שלהם, בעת הכניסה. למשתמשים שבוחרים באפשרות זו יש כתובות דוא"ל עם התחום privaterelay.appleid.com . כשאתה משתמש בכניסה עם Apple באפליקציה שלך, עליך לציית לכל מדיניות התנאים או התנאים הרלוונטיים של Apple בנוגע לזהות Apple אנונימיות אלה.

זה כולל קבלת כל הסכמת משתמש נדרשת לפני שאתה משייך מידע אישי המזהה ישירות עם מזהה אפל אנונימי. בעת שימוש באימות Firebase, זה עשוי לכלול את הפעולות הבאות:

  • קישור כתובת דוא"ל לתעודת מזהה אפל אנונימית או להיפך.
  • קשר מספר טלפון למזהה אפל אנונימי או להיפך
  • קשר אישורים חברתיים לא אנונימיים (פייסבוק, גוגל וכו ') לתעודת מזהה אפל אנונימית או להיפך.

הרשימה לעיל אינה ממצה. עיין בהסכם הרישיון של תוכנית המפתחים של אפל בסעיף חברות בחשבון המפתח שלך כדי לוודא שהאפליקציה שלך עומדת בדרישות של אפל.

לטפל בזרימת הכניסה באמצעות SDK של Firebase

אם אתה בונה אפליקציית אינטרנט, הדרך הקלה ביותר לאמת את המשתמשים שלך באמצעות Firebase באמצעות חשבונות Apple שלהם היא לטפל בכל זרימת הכניסה באמצעות Firebase JavaScript SDK.

כדי לטפל בזרימת הכניסה עם Firebase JavaScript SDK, בצע את הצעדים הבאים:

  1. צור מופע של OAuthProvider באמצעות מזהה הספק המתאים apple.com .

    var provider = new firebase.auth.OAuthProvider('apple.com');
  2. אופציונלי: ציין טווחי OAuth 2.0 נוספים מעבר לברירת המחדל שברצונך לבקש מספק האימות.

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

    כברירת מחדל, כאשר חשבון אחד לכל כתובת דוא"ל מופעל, Firebase מבקש טווחי דוא"ל ושמות. אם תשנה הגדרה זו למספר חשבונות לכל כתובת דוא"ל , Firebase אינה מבקשת היקפים מאפל אלא אם כן אתה מציין אותם.

  3. אופציונלי: אם ברצונך להציג את מסך הכניסה של אפל בשפה שאינה אנגלית, הגדר את פרמטר locale . עיין במסמכי הכניסה עם Apple עבור האזורים הנתמכים.

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });
  4. אמת באמצעות Firebase באמצעות אובייקט ספק ה- OAuth. באפשרותך להנחות את המשתמשים שלך להיכנס באמצעות חשבונות Apple שלהם על ידי פתיחת חלון קופץ או על ידי הפניה מחדש לדף הכניסה. שיטת ההפניה עדיפה במכשירים ניידים.

    • כדי להיכנס באמצעות חלון קופץ, התקשר ל- signInWithPopup() :

      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;
      
          // ...
        });
    • כדי להיכנס באמצעות הפניה לדף הכניסה, התקשר ל- signInWithRedirect() :

      firebase.auth().signInWithRedirect(provider);

      לאחר שהמשתמש משלים את הכניסה וחוזר לדף, אתה יכול לקבל את תוצאת הכניסה על ידי קריאה ל- 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;
      
          // ...
        });

      זה גם המקום בו תוכלו לתפוס ולטפל בשגיאות. לקבלת רשימה של קודי שגיאה, עיין בהפניה ל- API .

    בניגוד לספקים אחרים הנתמכים על ידי Firebase Auth, אפל אינה מספקת כתובת אתר של תמונה.

    כמו כן, כאשר המשתמש בוחר שלא לשתף את הדוא"ל שלו עם האפליקציה, אפל xyz@privaterelay.appleid.com כתובת דוא"ל ייחודית עבור אותו משתמש ( xyz@privaterelay.appleid.com ), שהיא משתפת עם האפליקציה שלך. אם הגדרת את שירות ממסר הדוא"ל הפרטי, אפל מעבירה דוא"ל שנשלח לכתובת האנונימית לכתובת הדוא"ל האמיתית של המשתמש.

    אפל משתפת פרטי משתמש, כגון שם התצוגה, רק עם אפליקציות בפעם הראשונה שמשתמש נכנס. בדרך כלל Firebase שומרת את שם התצוגה בפעם הראשונה שמשתמש נכנס עם Apple, אותה תוכל להשיג באמצעות firebase.auth().currentUser.displayName . עם זאת, אם בעבר השתמשת באפל כדי להיכנס למשתמש לאפליקציה מבלי להשתמש ב- Firebase, אפל לא תספק ל- Firebase את שם התצוגה של המשתמש.

אימות מחדש וקישור חשבונות

ניתן להשתמש באותה תבנית עם reauthenticateWithPopup() ו- reauthenticateWithRedirect() , בה תוכלו להשתמש בכדי לאחזר אישורים חדשים לפעולות רגישות הדורשות כניסה לאחרונה:

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;

    // ...
  });

בנוסף, תוכלו להשתמש ב- linkWithPopup() וב- linkWithRedirect() , כדי לקשר ספקי זהות שונים לחשבונות קיימים.

שים לב שאפל דורשת ממך לקבל הסכמה מפורשת ממשתמשים לפני שתקשר את חשבונות Apple שלהם לנתונים אחרים.

לדוגמה, כדי לקשר חשבון פייסבוק לחשבון Firebase הנוכחי, השתמש באסימון הגישה שקיבלת מהכניסה למשתמש לפייסבוק:

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.
    });

אמת באמצעות Firebase בתוסף Chrome

אם אתה בונה אפליקציית תוספים ל- Chrome, עליך להוסיף את מזהה התוסף שלך ל- Chrome:

  1. פתח את הפרויקט שלך במסוף Firebase .
  2. במקטע אימות , פתח את דף שיטת הכניסה .
  3. הוסף URI כמו הבא לרשימת הדומיינים המורשים:
    chrome-extension://CHROME_EXTENSION_ID

רק פעולות קופצות ( signInWithPopup ו- linkWithPopup ) זמינות linkWithPopup Chrome, שכן סיומות Chrome אינן יכולות להשתמש בהפניות מחדש של HTTP. עליך להתקשר לשיטות אלה מתסריט רקע ולא מקופץ לפעולה בדפדפן, מכיוון שקופץ האימות יבטל את חלון הקופץ של פעולת הדפדפן.

בקובץ המניפסט של תוסף Chrome שלך ​​הקפד להוסיף את כתובת האתר https://apis.google.com לרשימת ההיתרים content_security_policy .

שים לב שעליך עדיין לאמת את הדומיין המותאם אישית עם Apple באופן דומה לדומיין ברירת המחדל firebaseapp.com:

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

מתקדם: אמת עם Firebase ב- Node.js

כדי לאמת עם Firebase ביישום Node.js:

  1. היכנס למשתמש באמצעות חשבון Apple שלו וקבל את אסימון ה- Apple ID של המשתמש. אתה יכול להשיג זאת בכמה דרכים. לדוגמה, אם לאפליקציית Node.js שלך יש ממשק קצה לדפדפן:

    1. בחלק האחורי שלך, צור מחרוזת אקראית ("nonce") וחשב את ה- SHA256 שלו. ה- nonce הוא ערך שימוש חד פעמי שבו אתה משתמש כדי לאמת נסיעה הלוך ושוב בין ה- backend שלך לשרתי האימות של אפל.

      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. בדף הכניסה שלך, ציין את ה- hash nonce בתצורת הכניסה שלך עם Apple:

      <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 מצדו של שרת תגובת האימות POSTed:

      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 .

  2. לאחר שתקבל אסימון מזהה Apple של המשתמש, השתמש בו לבניית אובייקט אישורים ואז היכנס למשתמש עם האישור:

    // 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);
      });

הצעדים הבאים

לאחר שמשתמש נכנס בפעם הראשונה, נוצר חשבון משתמש חדש ומקושר לאישורי האישור - כלומר לשם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האימות - המשתמש נכנס איתו. חשבון חדש זה מאוחסן כחלק מפרויקט Firebase שלך, וניתן להשתמש בו לזיהוי משתמש בכל אפליקציה בפרויקט שלך, ללא קשר לאופן בו המשתמש נכנס.

  • באפליקציות שלך, הדרך המומלצת לדעת את סטטוס האימות של המשתמש שלך היא להגדיר צופה באובייקט Auth . לאחר מכן תוכל לקבל את פרטי הפרופיל הבסיסיים של User מאובייקט User . ראה ניהול משתמשים .

  • במסד הנתונים שלך בזמן אמת ב- Firebase ובכללי האבטחה של אחסון ענן, אתה יכול לקבל את מזהה המשתמש הייחודי של המשתמש auth ממשתנה auth , ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

באפשרותך לאפשר למשתמשים להיכנס לאפליקציה שלך באמצעות ספקי אימות מרובים על ידי קישור אישורי ספק האימות לחשבון משתמש קיים.

כדי לצאת ממשתמש, התקשר ל- signOut :

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