אימות בקשות להפעלת סשן סטרימינג

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

בדף הזה מוסבר איך משתמשים באסימון HMAC כדי לאמת את בקשות הסטרימינג.

לפני שמתחילים

לפני שממשיכים, צריך:

יצירת טוקן HMAC

כדי ליצור אסימון:

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

    event=ASSET_KEY~exp=EXPIRATION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ASSET_KEY: חובה. מפתח הנכס של האירוע בשידור חי.
    • EXPIRATION: חובה. חותמת הזמן של התפוגה של האסימון בפורמט Unix epoch time.
  3. מחשבים גיבוב (hash) SHA-256 של מחרוזת הטוקן באמצעות מפתח האימות של DAI.

  4. הפלט של הגיבוב צריך להיות בפורמט הקסדצימלי.

  5. כדי לחתום על מחרוזת האסימון, מוסיפים את החתימה בסוף הפרמטרים שנאספו קודם:

    event=...~hmac=HMAC_SIGNATURE
    

    מחליפים את HMAC_SIGNATURE בחתימה שיצרתם על ידי גיבוב של מחרוזת האסימון באמצעות מפתח האימות של DAI.

  6. כדי להעביר את מחרוזת האסימון החתומה בצורה בטוחה, צריך להחיל קידוד URL על מחרוזת האסימון החתומה.

בדוגמה הבאה מוצגת חתימה וקידוד של מחרוזת אסימון שתוקף שלה פג תוך 60 שניות:

# Add 60 seconds to the current time
future_epoch=$((EPOCHSECONDS + 60))

echo "Current: $EPOCHSECONDS"
echo "Future: $future_epoch"
# Current: 1767389133
# Future: 1767389193

# Sample DAI stream authentication key
key="DE0E9..."

# Sort parameters in the token string
token="event=YRB0Bl0oQRCb5J-maPpJUQ~exp=1767389193"

# Generate the token's signature.
echo -n $token | openssl dgst -sha256 -mac HMAC -macopt key:$key
# SHA2-256(stdin)= 9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248

# Sign the token: event=YRB0Bl0oQRCb5J-maPpJUQ~exp=1767389193~hmac=9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248

# Encode the token: event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248

שימוש בטוקן HMAC כדי לבקש סשן של שידור חי

כדי לאמת את בקשת יצירת השידור באמצעות אסימון HMAC, מבצעים את הפעולות הבאות:

כותרת הבקשה Authorization

  curl "https://dai.google.com/linear/v1/hls/event/YRB0Bl0oQRCb5J-maPpJUQ/stream" \
  -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: DCLKDAI token=event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248"

פרמטר של מחרוזת שאילתה

  curl "https://dai.google.com/linear/v1/hls/event/YRB0Bl0oQRCb5J-maPpJUQ/stream?auth-token=event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248" \
  -X POST \
  -H "Content-Type: application/x-www-form-urlencoded"

שדה נתונים בטופס

  curl "https://dai.google.com/linear/v1/hls/event/YRB0Bl0oQRCb5J-maPpJUQ/stream" \
  -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "auth-token=event%3DYRB0Bl0oQRCb5J%2DmaPpJUQ%7Eexp%3D1767389193%7Ehmac%3D9935a013957e5ce893a7ee444d3d452fd0de7d273ff8b65471ddd4619b80d248"

אם הפעולה בוצעה ללא שגיאות, תופיע תגובת ה-JSON הבאה:

  {
  "hls_master_playlist": "https://dai.google.com/linear/hls/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/master.m3u8",
  "media_verification_url": "https://dai.google.com/view/p/service/linear/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/loc/DLS/network/21775744923/event/YRB0Bl0oQRCb5J-maPpJUQ/media/",
  "metadata_url": "https://dai.google.com/linear/v1/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/metadata",
  "polling_frequency": 10,
  "session_update_url": "https://dai.google.com/linear/v1/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/session",
  "stream_id": "e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS",
  "stream_manifest": "https://dai.google.com/linear/hls/pa/event/YRB0Bl0oQRCb5J-maPpJUQ/stream/e91f907e-6a0a-4795-8c96-c8e36e89cbf6:DLS/master.m3u8"
  }

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

  <!DOCTYPE html>
  <html lang=en>
    <meta charset=utf-8>
    <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
    <title>Error 401 (Unauthorized)!!1</title>
    ...
    <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
    <p><b>401.</b> <ins>That’s an error.</ins>
    <p><ins>That’s all we know.</ins>