Akış oturumu isteklerinin kimliğini doğrulama

Yayın isteği, canlı yayın etkinliği için bir oturum kaydeder. Ayrıntılı bilgi için Yayın isteğinde bulunma başlıklı makaleyi inceleyin.

Bu sayfada, akış isteklerinin kimliğini doğrulamak için HMAC jetonunun kullanılması ele alınmaktadır.

Başlamadan önce

Devam etmeden önce aşağıdakileri yapın:

HMAC jetonu oluşturma

Jeton oluşturmak için aşağıdakileri yapın:

  1. Canlı yayınınızın öğe anahtarını ve geçerlilik bitiş zamanını toplayın. Daha fazla bilgi için DAI akış oturumları oluşturma istekleri için kimlik doğrulamayı etkinleştirme başlıklı makaleyi inceleyin.
  2. Aşağıdaki parametreleri alfabetik olarak sıralayın ve parametreleri tilde ~ karakteriyle ayırın:

    event=ASSET_KEY~exp=EXPIRATION
    

    Aşağıdakini değiştirin:

    • ASSET_KEY: Zorunlu. Canlı yayın etkinliğinin öğe anahtarı.
    • EXPIRATION: Zorunlu. Jetonun geçerlilik bitiş zaman damgası (Unix sıfır zamanı).
  3. DAI kimlik doğrulama anahtarınızı kullanarak jeton dizesinin SHA-256 karmasını hesaplayın.

  4. Karma çıkışını onaltılık biçimde biçimlendirin.

  5. Jeton dizesini imzalamak için daha önce toplanan parametrelerin sonuna imzayı ekleyin:

    event=...~hmac=HMAC_SIGNATURE
    

    HMAC_SIGNATURE yerine, jeton dizesini DAI kimlik doğrulama anahtarınızla karma oluşturarak ürettiğiniz imzayı girin.

  6. İmzalı jeton dizesini güvenli bir şekilde iletmek için imzalı jeton dizesine URL kodlaması uygulayın.

Aşağıdaki örnek, 60 saniye içinde sona eren bir jeton dizesini imzalar ve kodlar:

# 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

Canlı yayın oturumu istemek için HMAC jetonunu kullanma

Akış oluşturma isteğinizin kimliğini HMAC jetonuyla doğrulamak için aşağıdakilerden birini yapın:

Authorization istek başlığı

  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"

Sorgu dizesi parametresi

  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"

Form veri alanı

  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"

İşlem başarılı olursa aşağıdaki JSON yanıtını görürsünüz:

  {
  "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"
  }

Yanıt yapısını ve durum kodlarını anlamak için Yöntem: stream başlıklı makaleyi inceleyin. Kimlik doğrulama başarısız olursa aşağıdaki hatayı görürsünüz:

  <!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>