במדריך הזה נסביר איך לאחזר, לאמת ולאחסן פרטי כניסה של צד שלישי באמצעות Identity Platform, הסביבה הרגילה של App Engine ו-Datastore.
במאמר הזה נסביר איך ליצור אפליקציה פשוטה לרישום הערות בשם Firenotes, שמאחסנת את ההערות של המשתמשים בפנקסים אישיים משלהם. מחברות מאוחסנות לכל משתמש, ומזוהות לפי מזהה ייחודי של Identity Platform של כל משתמש. האפליקציה כוללת את הרכיבים הבאים:
חלק הקצה הקדמי מגדיר את ממשק המשתמש לכניסה ומאחזר את מזהה Identity Platform. הוא גם מטפל בשינויים במצב האימות ומאפשר למשתמשים לראות את ההערות שלהם.
FirebaseUI הוא פתרון קוד פתוח שניתן להטמעה בקלות, ומפשט את משימות האימות וממשק המשתמש. ה-SDK מטפל בכניסת משתמשים, בקישור של כמה ספקים לחשבון אחד, בשחזור סיסמאות ועוד. הוא מטמיע שיטות מומלצות לאימות, כדי לספק חוויית כניסה חלקה ומאובטחת.
הקצה העורפי מאמת את מצב האימות של המשתמש ומחזיר את פרטי פרופיל המשתמש ואת ההערות של המשתמש.
האפליקציה מאחסנת את פרטי הכניסה של המשתמש ב-Datastore באמצעות ספריית הלקוח NDB, אבל אפשר לאחסן את פרטי הכניסה במסד נתונים שתבחרו.
Firenotes מבוסס על מסגרת אפליקציית האינטרנט Flask. האפליקציה לדוגמה משתמשת ב-Flask בגלל הפשטות וקלות השימוש שלה, אבל המושגים והטכנולוגיות שנבדקים רלוונטיים לכל framework שבה משתמשים.
מטרות
במדריך הזה תלמדו:
- הגדרת ממשק המשתמש באמצעות FirebaseUI ל-Identity Platform.
- מקבלים אסימון מזהה מ-Identity Platform ומאמתים אותו באמצעות אימות בצד השרת.
- אחסון של פרטי הכניסה של המשתמשים והנתונים המשויכים ב-Datastore.
- שליחת שאילתה למסד נתונים באמצעות ספריית הלקוח NDB.
- פריסת אפליקציה ב-App Engine.
עלויות
במדריך הזה נעשה שימוש ברכיבים של Google Cloudשחלים עליהם חיובים, כולל:
- Datastore
- Identity Platform
אפשר להשתמש במחשבון עלויות כדי ליצור הערכת עלויות בהתאם לשימוש החזוי.
לפני שמתחילים
- מתקינים את Git, Python 2.7 ו- virtualenv. מידע נוסף על הגדרת סביבת הפיתוח בשפת Python, כמו התקנת הגרסה העדכנית של Python, מופיע במאמר הגדרת סביבת פיתוח בשפת Python ל- Google Cloud.
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init
אם כבר התקנתם את ה-SDK והפעלתם אותו בפרויקט אחר,
צריך להגדיר את gcloud project למזהה פרויקט App Engine שבו אתם משתמשים
ב-Firenotes. במאמר ניהול ההגדרות של Google Cloud SDK מפורטות פקודות ספציפיות לעדכון פרויקט באמצעות הכלי gcloud.
שיבוט של האפליקציה לדוגמה
כדי להוריד את הדוגמה למחשב המקומי:
משכפלים את מאגר האפליקציה לדוגמה ומעבירים אותו למכונה המקומית:
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
אפשרות נוספת היא להוריד את קובץ הדוגמה כקובץ ZIP ולחלץ אותו.
עוברים לספרייה שמכילה את הקוד לדוגמה:
cd python-docs-samples/appengine/standard/firebase/firenotes
הוספת ממשק המשתמש
כדי להגדיר את FirebaseUI ל-Identity Platform ולהפעיל ספקי זהויות:
כדי להוסיף את Identity Platform לאפליקציה:
- עוברים אל Google Cloud המסוף.
כניסה למסוף Google Cloud - בוחרים את הפרויקט Google Cloud שרוצים להשתמש בו:
- אם יש לכם פרויקט קיים, בוחרים אותו מהרשימה הנפתחת Select organization בחלק העליון של הדף.
- אם אין לכם פרויקט קיים ב- Google Cloud , אתם יכולים ליצור פרויקט חדש במסוףGoogle Cloud .
- נכנסים לדף Identity Platform Marketplace במסוף Google Cloud .
כניסה לדף Identity Platform Marketplace - בדף Identity Platform Marketplace, לוחצים על Enable Customer Identity (הפעלת זהות לקוחות).
- עוברים לדף Users של Customer Identity במסוף Google Cloud .
כניסה לדף Users - בפינה השמאלית העליונה, לוחצים על סמל האפליקציה פרטי ההגדרה.
מעתיקים את פרטי ההגדרה של האפליקציה לאפליקציית האינטרנט.
- עוברים אל Google Cloud המסוף.
עורכים את הקובץ
backend/app.yamlכדי להוסיף אתGOOGLE_CLOUD_PROJECT : 'PROJECT_ID'בקטעenv_variables:בקובץ
frontend/main.js, מגדירים את ווידג'ט הכניסה של FirebaseUI על ידי בחירת הספקים שרוצים להציע למשתמשים.במסוף Google Cloud , מפעילים את הספקים שבחרתם לשמור:
- נכנסים לדף Providers של Customer Identity במסוף Google Cloud .
כניסה לדף Providers - לוחצים על הוספת ספק.
- ברשימה הנפתחת בחירת ספק, בוחרים את הספקים שרוצים להשתמש בהם.
- לצד מופעל, לוחצים על הלחצן כדי להפעיל את הספק.
- נכנסים לדף Providers של Customer Identity במסוף Google Cloud .
מוסיפים את הדומיין לרשימת הדומיינים המורשים ב-Identity Platform:
- עוברים לדף Settings (הגדרות) של Customer Identity (זהות לקוחות) במסוף Google Cloud .
מעבר לדף ההגדרות - בקטע דומיינים מורשים, לוחצים על הוספת דומיין.
מזינים את הדומיין של האפליקציה בפורמט הבא:
[PROJECT_ID].appspot.comלא כוללים את
http://לפני שם הדומיין.
- עוברים לדף Settings (הגדרות) של Customer Identity (זהות לקוחות) במסוף Google Cloud .
יחסי תלות בהתקנות
מנווטים לספרייה
backendומשלימים את הגדרת האפליקציה:cd backend/מתקינים את יחסי התלות בספרייה
libבפרויקט:pip install -t lib -r requirements.txtב-
appengine_config.py, השיטהvendor.add()רושמת את הספריות בספרייהlib.
הרצת האפליקציה באופן מקומי
כדי להריץ את האפליקציה באופן מקומי, משתמשים בשרת הפיתוח המקומי של App Engine:
מוסיפים את כתובת ה-URL הבאה כ
backendHostURLב-main.js:http://localhost:8081עוברים לספריית הבסיס של האפליקציה. לאחר מכן, מפעילים את שרת הפיתוח:
dev_appserver.py frontend/app.yaml backend/app.yamlעוברים אל http://localhost:8080/ בדפדפן אינטרנט.
אימות משתמשים בשרת
אחרי שמגדירים פרויקט ומפעילים אפליקציה לפיתוח, אפשר לעיין בקוד כדי להבין איך לאחזר ולאמת אסימוני מזהה של Identity Platform בשרת.
קבלת אסימון מזהה מ-Identity Platform
השלב הראשון באימות בצד השרת הוא אחזור של טוקן גישה לאימות. בקשות אימות מטופלות באמצעות onAuthStateChanged()
listener מ-Identity Platform:
כשמשתמש מחובר לחשבון, ה-method של Identity Platform getToken() ב-callback מחזיר טוקן מזהה של Identity Platform בפורמט של JSON Web Token (JWT).
אימות טוקנים בשרת
אחרי שהמשתמש מתחבר, שירות הקצה הקדמי מאחזר את כל ההערות הקיימות בפנקס הרשימות של המשתמש באמצעות בקשת AJAX GET. כדי לגשת לנתוני המשתמש נדרשת הרשאה, ולכן ה-JWT נשלח בכותרת Authorization של הבקשה באמצעות סכימת Bearer:
לפני שהלקוח יכול לגשת לנתוני השרת, השרת צריך לוודא שהטוקן חתום על ידי Identity Platform. אפשר לאמת את האסימון הזה באמצעות ספריית האימות של Google ל-Python.
משתמשים בפונקציה verify_firebase_token של ספריית האימות כדי לאמת את אסימון ה-Bearer ולחלץ את הטענות:
כל ספק זהויות שולח קבוצה שונה של הצהרות, אבל לכל אחד מהם יש לפחות הצהרה עם מזהה משתמש ייחודי והצהרה שמספקת מידע מסוים על הפרופיל, כמו name או email, שבהם אפשר להשתמש כדי להתאים אישית את חוויית המשתמש באפליקציה.sub
ניהול נתוני משתמשים ב-Datastore
אחרי אימות המשתמש, צריך לשמור את הנתונים שלו כדי שהם יישארו זמינים גם אחרי שסשן הכניסה מסתיים. בקטעים הבאים מוסבר איך לאחסן הערה כישות ב-Datastore, ולהפריד בין ישויות לפי מזהה משתמש.
יצירת ישויות לאחסון נתוני משתמשים
אפשר ליצור ישות ב-Datastore על ידי הצהרה על מחלקת מודל NDB עם מאפיינים מסוימים כמו מספרים שלמים או מחרוזות. Datastore מבצע אינדוקס של ישויות לפי סוג. במקרה של Firenotes, הסוג של כל ישות הוא Note.
לצורך שאילתות, כל Note נשמר עם שם מפתח, שהוא ה-User ID שהתקבל מהטענה sub בקטע הקודם.
בדוגמת הקוד הבאה אפשר לראות איך מגדירים מאפיינים של ישות, גם באמצעות שיטת הבנאי של מחלקת המודל כשיוצרים את הישות, וגם באמצעות הקצאה של מאפיינים נפרדים אחרי היצירה:
כדי לכתוב את Note שנוצר לאחרונה ב-Datastore, צריך לבצע קריאה ל-method put() באובייקט note.
אחזור נתוני משתמשים
כדי לאחזר נתוני משתמש שמשויכים למזהה משתמש מסוים, משתמשים בשיטה NDB
query() כדי לחפש במסד הנתונים הערות באותה קבוצת ישויות.
ישויות באותה קבוצה, או נתיב אב, חולקות שם מפתח משותף, שבמקרה הזה הוא מזהה המשתמש.
לאחר מכן אפשר לאחזר את נתוני השאילתה ולהציג את ההערות בלקוח:
פריסת האפליקציה
הטמעתם בהצלחה את Identity Platform באפליקציית App Engine. כדי לראות את האפליקציה שלכם פועלת בסביבת ייצור פעילה:
- משנים את כתובת ה-URL של המארח בקצה העורפי ב-
main.jsל-https://backend-dot-[PROJECT_ID].appspot.com. מחליפים את[PROJECT_ID]במזהה הפרויקט. פורסים את האפליקציה באמצעות ממשק שורת הפקודה של Google Cloud SDK:
gcloud app deploy backend/index.yaml frontend/app.yaml backend/app.yamlאפשר לצפות בשידור חי של הטקס בכתובת
https://[PROJECT_ID].appspot.com.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את פרויקט App Engine:
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
המאמרים הבאים
- כדאי להעמיק את הקריאה ולהכיר דוגמאות לארכיטקטורות, תרשימים ושיטות מומלצות בנושאי Google Cloud. כל אלה זמינים במרכז הארכיטקטורה של Cloud.