התנועה ברשת שנוצרת על ידי Dialogflow עבור בקשות webhook נשלחת ברשת ציבורית. כדי להבטיח שהתעבורה מאובטחת ומהימנה בשני הכיוונים, Dialogflow תומך באופן אופציונלי באימות TLS בו-זמני (mTLS). במהלך לחיצת היד של TLS הרגילה של Dialogflow, שרת ה-webhook שלכם מציג אישור שאפשר לאמת באמצעות Dialogflow, על ידי מעקב אחר שרשרת רשות האישורים או על ידי השוואת האישור לאישור CA מותאם אישית. אם מפעילים mTLS בשרת ה-webhook, הוא יוכל לאמת את האישור של Google שמוצג על ידי Dialogflow לשרת ה-webhook לצורך אימות, וכך להשלים את יצירת האמון ההדדי.
בקשת mTLS
כדי לבקש mTLS:
- מכינים את שרת ה-HTTPS של ה-webhook לבקשת אישור הלקוח במהלך לחיצת היד של TLS.
- שרת ה-webhook צריך לאמת את אישור הלקוח כשהוא מתקבל.
- מתקינים שרשרת אישורים לשרת ה-webhook, שגם הלקוח וגם השרת יכולים לסמוך עליה. אפליקציות שמתחברות לשירותי Google צריכות לתת אמון בכל רשויות האישורים שמפורטות ב-Google Trust Services. אפשר להוריד אישורי בסיס מהכתובת:https://pki.goog/.
דוגמה לקריאה לשרת webhook באמצעות mTLS
בדוגמה הזו נעשה שימוש בסוכן שמוצג בהפעלה המהירה עם שרת webhook שפועל ב-openssl.
- הגדרה לדוגמה
- נציג Dialogflow CX שמקבל הזמנות לחולצות ושולח אותן ל-webhook שמפנה לשרת אינטרנט עצמאי.
- מפתח פרטי לתקשורת TLS בקובץ בשם
key.pem. - שרשרת אישורים שנחתמה על ידי רשות אישורים (CA) שמהימנה על הציבור בקובץ בשם
fullchain.pem.
-
מריצים את התוכנה
openssl s_serverבמכונת השרת.sudo openssl s_server -key key.pem -cert fullchain.pem -accept 443 -verify 1 - בקשה נשלחת לסוכן ממחשב לקוח. בדוגמה הזו, הבקשה היא: "אני רוצה לקנות חולצה אדומה במידה לארג'". אפשר לשלוח את הבקשה הזו באמצעות מסוף Dialogflow או באמצעות קריאה ל-API.
-
הפלט של
openssl s_serverבמכונת השרת.verify depth is 1 Using default temp DH parameters ACCEPT depth=2 C = US, O = Google Trust Services LLC, CN = GTS Root R1 verify return:1 depth=1 C = US, O = Google Trust Services LLC, CN = GTS CA 1D4 verify return:1 depth=0 CN = *.dialogflow.com verify return:1 -----BEGIN SSL SESSION PARAMETERS----- MII... -----END SSL SESSION PARAMETERS----- Client certificate -----BEGIN CERTIFICATE----- MII... -----END CERTIFICATE----- subject=CN = *.dialogflow.com issuer=C = US, O = Google Trust Services LLC, CN = GTS CA 1D4 Shared ciphers:TLS_AES_128_GCM_SHA256:... Signature Algorithms: ECDSA+SHA256:... Shared Signature Algorithms: ECDSA+SHA256:... Peer signing digest: SHA256 Peer signature type: RSA-PSS Supported Elliptic Groups: 0xEAEA:... Shared Elliptic groups: X25519:... CIPHER is TLS_AES_128_GCM_SHA256 Secure Renegotiation IS NOT supported POST /shirts-agent-webhook HTTP/1.1 authorization: Bearer ey... content-type: application/json Host: www.example.com Content-Length: 1595 Connection: keep-alive Accept: */* User-Agent: Google-Dialogflow Accept-Encoding: gzip, deflate, br { "detectIntentResponseId": "a7951ce2-2f00-4af5-a508-4c2cb45698b0", "intentInfo": { "lastMatchedIntent": "projects/PROJECT_ID/locations/REGION/agents/AGENT_ID/intents/0adebb70-a727-4687-b8bc-fbbc2ac0b665", "parameters": { "color": { "originalValue": "red", "resolvedValue": "red" }, "size": { "originalValue": "large", "resolvedValue": "large" } }, "displayName": "order.new", "confidence": 0.9978873 }, "pageInfo": { "currentPage": "projects/PROJECT_ID/locations/REGION/agents/AGENT_ID/flows/00000000-0000-0000-0000-000000000000/pages/06e6fc4d-c2f2-4830-ab57-7a318f20fd90", "displayName": "Order Confirmation" }, "sessionInfo": { "session": "projects/PROJECT_ID/locations/REGION/agents/AGENT_ID/sessions/session-test-001", "parameters": { "color": "red", "size": "large" } }, "fulfillmentInfo": { "tag": "confirm" }, "messages": [{ "text": { "text": ["Ok, let\u0027s start a new order."], "redactedText": ["Ok, let\u0027s start a new order."] }, "responseType": "ENTRY_PROMPT", "source": "VIRTUAL_AGENT" }, { "text": { "text": ["You have selected a large, red shirt."], "redactedText": ["You have selected a large, red shirt."] }, "responseType": "HANDLER_PROMPT", "source": "VIRTUAL_AGENT" }], "text": "I want to buy a large red shirt", "languageCode": "en" }ERROR shutting down SSL CONNECTION CLOSED
אישור לקוח בהתאמה אישית
אפשר להגדיר אישורי לקוח מותאמים אישית ברמת הנציג לשימוש בכל ה-webhooks. בזמן הפעלת ה-webhook, האישורים שהוגדרו יוצגו במהלך הלחיצת יד.
המפתח הפרטי וביטוי הסיסמה מוגדרים כמשאב Secret Manager. צריך להעניק לסוכן השירות של Dialogflow הרשאות Secret Accessor לגישה לסוד ב-Secret Manager.
כדי שהלחיצת יד תצליח, אישורי הלקוח צריכים להיות חתומים על ידי רשות אישורים.
שיטה מומלצת
כדי לוודא שבקשות ה-webhook מופעלות מסוכני Dialogflow שלכם, צריך לאמת את אסימון זהות השירות של Bearer מכותרת ההרשאה של הבקשה. אפשר גם לאמת פרמטר של סשן שסופק קודם על ידי שרת אימות בצד שלכם.
שגיאות
אם אימות אישור הלקוח נכשל (לדוגמה, אם שרת ה-webhook לא בוטח באישור הלקוח), הלחיצה של TLS נכשלת והסשן מסתיים.
הודעות שגיאה נפוצות:
| הודעת השגיאה | הסבר |
|---|---|
| האימות של אישור הלקוח נכשל: x509: האישור נחתם על ידי רשות לא מוכרת | Dialogflow שולח את אישור הלקוח שלו ל-webhook חיצוני, אבל ה-webhook החיצוני לא יכול לאמת אותו. יכול להיות שהסיבה לכך היא ששרשרת אישורי ה-CA לא הותקנה בצורה נכונה ב-webhook החיצוני. צריך לסמוך על כל רשויות אישורי הבסיס של Google. |