Membuat kunci konten dengan REST

logo layanan media


Media Services memungkinkan Anda mengirimkan aset terenkripsi. ContentKey memberikan akses aman ke Aset Anda.

Saat Anda membuat aset baru (misalnya, sebelum Anda mengunggah file), Anda dapat menentukan opsi enkripsi berikut: StorageEncrypted, CommonEncryptionProtected, atau EnvelopeEncryptionProtected.

Ketika mengirimkan aset ke klien, Anda dapat mengonfigurasi aset untuk dienkripsi secara dinamis dengan salah satu dari dua enkripsi berikut: DynamicEnvelopeEncryption atau DynamicCommonEncryption.

Aset terenkripsi harus dikaitkan dengan ContentKey. Artikel ini menjelaskan cara membuat kunci konten.

Berikut ini adalah langkah-langkah umum untuk membuat kunci konten yang Anda kaitkan dengan aset yang ingin Anda enkripsi.

  1. Buat kunci AES 16-byte secara acak (untuk enkripsi amplop dan umum) atau kunci AES 32-byte (untuk enkripsi penyimpanan).

    Ini adalah kunci konten untuk aset Anda, yang berarti semua file yang terkait dengan aset tersebut perlu menggunakan kunci konten yang sama selama dekripsi.

  2. Panggil metode GetProtectionKeyId dan GetProtectionKey untuk mendapatkan Sertifikat X.509 yang benar, yang harus digunakan untuk mengenkripsi kunci konten Anda.

  3. Enkripsi kunci konten Anda dengan kunci umum Sertifikat X.509.

    SDK .NET Media Services menggunakan RSA dengan OAEP saat melakukan enkripsi. Anda dapat melihat contoh di fungsi EncryptSymmetricKeyData.

  4. Buat nilai checksum (berdasarkan algoritme checksum kunci AES PlayReady) yang dihitung menggunakan pengidentifikasi kunci dan kunci konten. Untuk informasi selengkapnya, lihat bagian “Algoritma Checksum Kunci PlayReady AES” dari dokumen Objek Header PlayReady yang terletak di sini.

    Contoh .NET berikut menghitung checksum menggunakan bagian GUID dari pengidentifikasi kunci dan kunci konten yang jelas.

    public static string CalculateChecksum(byte[] contentKey, Guid keyId)
     {
       byte[] array = null;
         using (AesCryptoServiceProvider aesCryptoServiceProvider = new AesCryptoServiceProvider())
         {
             aesCryptoServiceProvider.Mode = CipherMode.ECB;
             aesCryptoServiceProvider.Key = contentKey;
             aesCryptoServiceProvider.Padding = PaddingMode.None;
             ICryptoTransform cryptoTransform = aesCryptoServiceProvider.CreateEncryptor();
             array = new byte[16];
             cryptoTransform.TransformBlock(keyId.ToByteArray(), 0, 16, array, 0);
         }
         byte[] array2 = new byte[8];
         Array.Copy(array, array2, 8);
         return Convert.ToBase64String(array2);
     }
    
  5. Buat kunci Konten dengan nilai EncryptedContentKey (dikonversi ke string yang dikodekan base64), ProtectionKeyId, ProtectionKeyType, ContentKeyType, dan Checksum yang Anda terima di langkah sebelumnya.

  6. Kaitkan entitas ContentKey dengan entitas Asset Anda melalui operasi $links.

Artikel ini tidak menunjukkan cara membuat kunci AES, mengenkripsi kunci, dan menghitung checksum.

Catatan

Saat mengakses entitas di Media Services, Anda harus mengatur bidang dan nilai header tertentu dalam permintaan HTTP Anda. Untuk informasi selengkapnya, lihat Setelan untuk Pengembangan API REST Azure Media Services.

Menyambungkan ke Media Services

Untuk informasi tentang cara menyambungkan ke AMS API, lihat Mengakses API Azure Media Services dengan autentikasi Azure AD.

Mengambil ProtectionKeyId

Contoh berikut menunjukkan cara mengambil ProtectionKeyId, thumbprint sertifikat, untuk sertifikat yang harus Anda gunakan saat mengenkripsi kunci konten Anda. Lakukan langkah ini untuk memastikan bahwa Anda sudah memiliki sertifikat yang sesuai di komputer Anda.

Permintaan:

GET https://media.windows.net/api/GetProtectionKeyId?contentKeyType=0 HTTP/1.1
MaxDataServiceVersion: 3.0;NetFx
Accept: application/json
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services
Authorization: Bearer <ENCODED JWT TOKEN> 
x-ms-version: 2.19
Host: media.windows.net

Respons:

HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 139
charset=utf-8
Server: Microsoft-IIS/8.5
request-id: 2b6aa7a4-3a09-4b08-b581-26b55667f817
x-ms-request-id: 2b6aa7a4-3a09-4b08-b581-26b55667f817
X-Content-Type-Options: nosniff
DataServiceVersion: 3.0;
X-Powered-By: ASP.NET
Strict-Transport-Security: max-age=31536000; includeSubDomains
Date: Wed, 04 Feb 2015 02:42:52 GMT

$metadata#Edm.String","value":"7D9BB04D9D0A4A24800CADBFEF232689E048F69C"}

Ambil ProtectionKey untuk ProtectionKeyId

Contoh berikut menunjukkan cara mengambil sertifikat X.509 menggunakan ProtectionKeyId yang Anda terima di langkah sebelumnya.

Permintaan:

GET https://media.windows.net/api/GetProtectionKey?ProtectionKeyId='7D9BB04D9D0A4A24800CADBFEF232689E048F69C' HTTP/1.1
MaxDataServiceVersion: 3.0;NetFx
Accept: application/json
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services
Authorization: Bearer <ENCODED JWT TOKEN> 
x-ms-version: 2.19
x-ms-client-request-id: 78d1247a-58d7-40e5-96cc-70ff0dfa7382
Host: media.windows.net

Respons:

HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 1227
Content-Type: application/json;odata=minimalmetadata;streaming=true;charset=utf-8
Server: Microsoft-IIS/8.5
x-ms-client-request-id: 78d1247a-58d7-40e5-96cc-70ff0dfa7382
request-id: 1523e8f3-8ed2-40fe-8a9a-5d81eb572cc8
x-ms-request-id: 1523e8f3-8ed2-40fe-8a9a-5d81eb572cc8
X-Content-Type-Options: nosniff
DataServiceVersion: 3.0;
X-Powered-By: ASP.NET
Strict-Transport-Security: max-age=31536000; includeSubDomains
Date: Thu, 05 Feb 2015 07:52:30 GMT

{"odata.metadata":"https://wamsbayclus001rest-hs.cloudapp.net/api/$metadata#Edm.String", "value":"MIIDSTCCAjGgAwIBAgIQqf92wku/HLJGCbMAU8GEnDANBgkqhkiG9w0BAQQFADAuMSwwKgYDVQQDEyN3YW1zYmx1cmVnMDAxZW5jcnlwdGFsbHNlY3JldHMtY2VydDAeFw0xMjA1MjkwNzAwMDBaFw0zMjA1MjkwNzAwMDBaMC4xLDAqBgNVBAMTI3dhbXNibHVyZWcwMDFlbmNyeXB0YWxsc2VjcmV0cy1jZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzR0SEbXefvUjb9wCUfkEiKtGQ5Gc328qFPrhMjSo+YHe0AVviZ9YaxPPb0m1AaaRV4dqWpST2+JtDhLOmGpWmmA60tbATJDdmRzKi2eYAyhhE76MgJgL3myCQLP42jDusWXWSMabui3/tMDQs+zfi1sJ4Ch/lm5EvksYsu6o8sCv29VRwxfDLJPBy2NlbV4GbWz5Qxp2tAmHoROnfaRhwp6WIbquk69tEtu2U50CpPN2goLAqx2PpXAqA+prxCZYGTHqfmFJEKtZHhizVBTFPGS3ncfnQC9QIEwFbPw6E5PO5yNaB68radWsp5uvDg33G1i8IT39GstMW6zaaG7cNQIDAQABo2MwYTBfBgNVHQEEWDBWgBCOGT2hPhsvQioZimw8M+jOoTAwLjEsMCoGA1UEAxMjd2Ftc2JsdXJlZzAwMWVuY3J5cHRhbGxzZWNyZXRzLWNlcnSCEKn/dsJLvxyyRgmzAFPBhJwwDQYJKoZIhvcNAQEEBQADggEBABcrQPma2ekNS3Wc5wGXL/aHyQaQRwFGymnUJ+VR8jVUZaC/U/f6lR98eTlwycjVwRL7D15BfClGEHw66QdHejaViJCjbEIJJ3p2c9fzBKhjLhzB3VVNiLIaH6RSI1bMPd2eddSCqhDIn3VBN605GcYXMzhYp+YA6g9+YMNeS1b+LxX3fqixMQIxSHOLFZ1G/H2xfNawv0VikH3djNui3EKT1w/8aRkUv/AAV0b3rYkP/jA1I0CPn0XFk7STYoiJ3gJoKq9EMXhit+Iwfz0sMkfhWG12/XO+TAWqsK1ZxEjuC9OzrY7pFnNxs4Mu4S8iinehduSpY+9mDd3dHynNwT4="}

Membuat ContentKey

Setelah Anda mengambil sertifikat X.509 dan menggunakan kunci umum untuk mengenkripsi kunci konten Anda, buat entitas ContentKey dan tetapkan nilai propertinya yang sesuai.

Salah satu nilai yang harus Anda atur saat membuat kunci konten adalah jenisnya. Pilih salah satu nilai berikut ini:

public enum ContentKeyType
{
    /// <summary>
    /// Specifies a content key for common encryption.
    /// </summary>
    /// <remarks>This is the default value.</remarks>
    CommonEncryption = 0,

    /// <summary>
    /// Specifies a content key for storage encryption.
    /// </summary>
    StorageEncryption = 1,

    /// <summary>
    /// Specifies a content key for configuration encryption.
    /// </summary>
    ConfigurationEncryption = 2,

    /// <summary>
    /// Specifies a content key for Envelope encryption.  Only used internally.
    /// </summary>
    EnvelopeEncryption = 4
    }

Contoh berikut menunjukkan cara membuat ContentKey dengan ContentKeyType yang diatur untuk enkripsi penyimpanan ("1") dan ProtectionKeyType diatur ke "0" untuk menunjukkan bahwa ID kunci perlindungan adalah thumbprint sertifikat X.509.

Minta

POST https://media.windows.net/api/ContentKeys HTTP/1.1
Content-Type: application/json
DataServiceVersion: 1.0;NetFx
MaxDataServiceVersion: 3.0;NetFx
Accept: application/json
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services
Authorization: Bearer <ENCODED JWT TOKEN> 
x-ms-version: 2.19
Host: media.windows.net
{
"Name":"ContentKey",
"ProtectionKeyId":"7D9BB04D9D0A4A24800CADBFEF232689E048F69C", 
"ContentKeyType":"1", 
"ProtectionKeyType":"0",
"EncryptedContentKey":"your encrypted content key",
"Checksum":"calculated checksum"
}

Respons:

HTTP/1.1 201 Created
Cache-Control: no-cache
Content-Length: 777
Content-Type: application/json;odata=minimalmetadata;streaming=true;charset=utf-8
Location: https://media.windows.net/api/ContentKeys('nb%3Akid%3AUUID%3A9c8ea9c6-52bd-4232-8a43-8e43d8564a99')
Server: Microsoft-IIS/8.5
request-id: 76e85e0f-5cf1-44cb-b689-b3455888682c
x-ms-request-id: 76e85e0f-5cf1-44cb-b689-b3455888682c
X-Content-Type-Options: nosniff
DataServiceVersion: 3.0;
X-Powered-By: ASP.NET
Strict-Transport-Security: max-age=31536000; includeSubDomains
Date: Wed, 04 Feb 2015 02:37:46 GMT

{"odata.metadata":"https://wamsbayclus001rest-hs.cloudapp.net/api/$metadata#ContentKeys/@Element",
"Id":"nb:kid:UUID:9c8ea9c6-52bd-4232-8a43-8e43d8564a99","Created":"2015-02-04T02:37:46.9684379Z",
"LastModified":"2015-02-04T02:37:46.9684379Z",
"ContentKeyType":1,
"EncryptedContentKey":"your encrypted content key",
"Name":"ContentKey",
"ProtectionKeyId":"7D9BB04D9D0A4A24800CADBFEF232689E048F69C",
"ProtectionKeyType":0,
"Checksum":"calculated checksum"}

Mengaitkan ContentKey dengan Aset

Setelah membuat ContentKey, kaitkan dengan Aset Anda menggunakan operasi $links, seperti yang ditunjukkan pada contoh berikut:

Permintaan:

POST https://media.windows.net/api/Assets('nb%3Acid%3AUUID%3Afbd7ce05-1087-401b-aaae-29f16383c801')/$links/ContentKeys HTTP/1.1
DataServiceVersion: 1.0;NetFx
MaxDataServiceVersion: 3.0;NetFx
Accept: application/json
Accept-Charset: UTF-8
Content-Type: application/json
Authorization: Bearer <ENCODED JWT TOKEN> 
x-ms-version: 2.19
Host: media.windows.net

{"uri":"https://wamsbayclus001rest-hs.cloudapp.net/api/ContentKeys('nb%3Akid%3AUUID%3A01e6ea36-2285-4562-91f1-82c45736047c')"}

Respons:

HTTP/1.1 204 No Content 

Jalur pembelajaran Media Services

Media Services v3 (terbaru)

Lihat versi terbaru Azure Media Services!

Layanan Media v2 (warisan)

Berikan umpan balik

Gunakan forum User Voice untuk memberikan umpan balik dan membuat saran tentang cara meningkatkan Azure Media Services. Anda juga dapat langsung masuk ke salah satu kategori berikut: