בדף הזה מוסבר איך לתמוך באימות משתמשים ב-Cloud Endpoints.
כדי לאמת משתמש, אפליקציית לקוח צריכה לשלוח אסימון אינטרנט מסוג JSON (JWT) בכותרת ההרשאה של בקשת ה-HTTP אל ה-API של הבק-אנד. Extensible Service Proxy (ESP) מאמת את הטוקן בשם ה-API שלכם, כך שלא צריך להוסיף קוד ל-API כדי לעבד את האימות. עם זאת, צריך להגדיר את מסמך ה-OpenAPI כך שיתמוך בשיטות האימות שבחרתם.
ESP מאמת JWT בצורה יעילה באמצעות המפתחות הציבוריים של מנפיק ה-JWT. ספק ה-ESP שומר במטמון את המפתחות הציבוריים למשך חמש דקות. בנוסף, שרת ה-ESP שומר במטמון אסימוני JWT מאומתים למשך חמש דקות או עד לתפוגה של ה-JWT, לפי המוקדם מביניהם.
לפני שמתחילים
- מוסיפים קוד אימות לאפליקציית הלקוח, בהתאם למסמכי התיעוד של אימות ב-Firebase. Firebase תומך באימות באמצעות סיסמאות, מספרי טלפון וספקי זהויות פופולריים כמו Google, Facebook ו-Twitter.
-
כשיישום הלקוח שולח בקשת HTTP, כותרת ההרשאה בבקשה חייבת להכיל את הטענות הבאות של JWT:
iss(מנפיק)sub(נושא)aud(קהל)iat(הונפק ב-)exp(תאריך התפוגה)
הגדרת מסמך OpenAPI
כדי ש-ESP יאמת את הטענות ב-JWT החתום, במסמך OpenAPI צריך להיות אובייקט של דרישות אבטחה ואובייקט של הגדרות אבטחה.
כדי לתמוך באימות ב-Firebase:
OpenAPI 2.0
- מוסיפים את הקוד הבא למפרט OpenAPI:
securityDefinitions: firebase: authorizationUrl: "" flow: "implicit" type: "oauth2" # Replace PROJECT_ID with your project ID x-google-issuer: "https://securetoken.google.com/PROJECT_ID" x-google-jwks_uri: "https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com" x-google-audiences: "PROJECT_ID"
- מוסיפים קטע אבטחה ברמת ה-API כדי להחיל אותו על ה-API כולו, או ברמת השיטה כדי להחיל אותו על שיטה ספציפית.
security: - firebase: []
OpenAPI 3.x
- מוסיפים את הקוד הבא למפרט OpenAPI:
components: securitySchemes: firebase: type: oauth2 flows: implicit: authorizationUrl: "" scopes: {} x-google-auth: # Replace PROJECT_ID with your project ID issuer: https://securetoken.google.com/PROJECT_ID jwksUri: https://www.googleapis.com/service_accounts/v1/metadata/x509/securetoken@system.gserviceaccount.com audiences: - PROJECT_ID
- מוסיפים קטע אבטחה ברמת ה-API כדי להחיל אותו על ה-API כולו, או ברמת ה-method כדי להחיל אותו על method ספציפית.
security: - firebase: []
אפשר להגדיר כמה הגדרות אבטחה במסמך OpenAPI, אבל לכל הגדרה צריך להיות מנפיק שונה. אם משתמשים בקטעי אבטחה ברמת ה-API וברמת השיטה, ההגדרות ברמת השיטה מבטלות את ההגדרות ברמת ה-API.
אפשר גם להתאים אישית את המיקומים של JWT על ידי הוספת x-google תוספים. לפרטים נוספים, ראו תוספים של OpenAPI 2.0
או תוספים של OpenAPI 3.x.
ביצוע קריאה מאומתת ל-Endpoints API
כששולחים בקשה באמצעות אסימון אימות, מטעמי אבטחה מומלץ להוסיף את האסימון לכותרת Authorization:Bearer. לדוגמה:
curl -H "Authorization: Bearer <var>TOKEN</var>" "<var>ENDPOINTS_HOST</var>/echo"
מחליפים את המשתנים ENDPOINTS_HOST ו-TOKEN בשם המארח של ה-API ובאסימון האימות, בהתאמה. דוגמאות קוד לשליחת בקשה באמצעות הכותרת Authorization:Bearer מופיעות במאמר שליחת בקשה מאומתת ל-Endpoints API.
אם אי אפשר להשתמש בכותרת כששולחים את הבקשה, אפשר להוסיף את אסימון האימות לפרמטר שאילתה שנקרא access_token. לדוגמה:
curl "<var>ENDPOINTS_HOST</var>/echo?access_token=<var>TOKEN</var>"
קבלת תוצאות מאומתות ב-API
בדרך כלל ספקי ESP מעבירים את כל הכותרות שהם מקבלים. עם זאת, הוא מחליף את הכותרת המקורית Authorization כשכתובת ה-Backend מצוינת על ידי x-google-backend במפרט OpenAPI או על ידי BackendRule בהגדרת שירות gRPC.
ספק ה-ESP ישלח את תוצאת האימות ב-X-Endpoint-API-UserInfo
ל-API של השרת העורפי. מומלץ להשתמש בכותרת הזו במקום בכותרת המקורית Authorization. הכותרת הזו היא מחרוזת שbase64urlמקודדת אובייקט JSON. פורמט אובייקט ה-JSON שונה בין ESPv2 לבין ESP.
ב-ESPv2, אובייקט ה-JSON הוא בדיוק המטען הייעודי (payload) המקורי של ה-JWT. ב-ESP, אובייקט ה-JSON משתמש בשמות שדות שונים ומציב את מטען ה-JWT המקורי בשדה claims.
מידע נוסף על הפורמט זמין במאמר בנושא טיפול ב-JWT בשירות לקצה העורפי.
המאמרים הבאים