Mengautentikasi klien penerbitan Azure Event Grid menggunakan kunci akses atau tanda tangan akses bersama

Artikel ini menyediakan informasi tentang mengautentikasi klien yang menerbitkan peristiwa ke topik atau domain Azure Event Grid, namespace layanan mitra menggunakan kunci akses atau token Tanda Tangan Akses Bersama (SAS).

Penting

  • Mengautentikasi dan mengotorisasi pengguna atau aplikasi menggunakan identitas Microsoft Entra memberikan keamanan yang unggul dan kemudahan penggunaan melalui autentikasi tanda tangan akses berbasis kunci dan bersama (SAS). Dengan ID Microsoft Entra, Anda tidak perlu menyimpan rahasia yang digunakan untuk autentikasi dalam kode Anda dan berisiko potensi kerentanan keamanan. Kami sangat menyarankan Anda menggunakan ID Microsoft Entra dengan aplikasi penerbitan peristiwa Azure Event Grid Anda. Untuk informasi selengkapnya, lihat Mengautentikasi klien penerbitan menggunakan ID Microsoft Entra.
  • Autentikasi Microsoft Entra tidak didukung untuk topik namespace.

Mengautentikasi menggunakan kunci akses

Autentikasi kunci akses adalah bentuk autentikasi yang paling sederhana. Anda dapat meneruskan kunci akses sebagai header HTTP atau parameter kueri URL.

Kunci akses di header HTTP

Lulus kunci akses sebagai nilai untuk header HTTP: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Tombol Access sebagai parameter kueri

Anda juga dapat menentukan aeg-sas-key sebagai parameter kueri.

https://<yourtopic>.<region>.eventgrid.azure.net/api/events?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Untuk instruksi tentang cara mendapatkan kunci akses untuk topik atau domain, lihat Mendapatkan kunci akses.

Mengautentikasi menggunakan SAS

Token SAS untuk sumber daya Azure Event Grid mencakup sumber daya, waktu kedaluwarsa, dan tanda tangan. Format token SAS adalah: r={resource}&e={expiration}&s={signature}.

Sumber daya adalah jalur untuk topik Event Grid tempat Anda mengirim peristiwa. Misalnya, alur sumber daya yang valid adalah: https://<yourtopic>.<region>.eventgrid.azure.net/api/events. Untuk melihat semua versi API yang didukung, lihat jenis sumber daya Microsoft.EventGrid.

Pertama, hasilkan token SAS secara terprogram dan kemudian gunakan aeg-sas-token header atau header untuk Authorization SharedAccessSignature mengautentikasi dengan Event Grid.

Hasilkan token SAS secara terprogram

Contoh berikut membuat token SAS untuk digunakan dengan Event Grid:

static string BuildSharedAccessSignature(string resource, DateTime expirationUtc, string key)
{
    const char Resource = 'r';
    const char Expiration = 'e';
    const char Signature = 's';

    string encodedResource = HttpUtility.UrlEncode(resource);
    var culture = CultureInfo.CreateSpecificCulture("en-US");
    var encodedExpirationUtc = HttpUtility.UrlEncode(expirationUtc.ToString(culture));

    string unsignedSas = $"{Resource}={encodedResource}&{Expiration}={encodedExpirationUtc}";
    using (var hmac = new HMACSHA256(Convert.FromBase64String(key)))
    {
        string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(unsignedSas)));
        string encodedSignature = HttpUtility.UrlEncode(signature);
        string signedSas = $"{unsignedSas}&{Signature}={encodedSignature}";

        return signedSas;
    }
}
def generate_sas_token(uri, key, expiry=3600):
    ttl = datetime.datetime.utcnow() + datetime.timedelta(seconds=expiry)
    encoded_resource = urllib.parse.quote_plus(uri)
    encoded_expiration_utc = urllib.parse.quote_plus(ttl.isoformat())

    unsigned_sas = f'r={encoded_resource}&e={encoded_expiration_utc}'
    signature = b64encode(HMAC(b64decode(key), unsigned_sas.encode('utf-8'), sha256).digest())
    encoded_signature = urllib.parse.quote_plus(signature)
    
    token = f'r={encoded_resource}&e={encoded_expiration_utc}&s={encoded_signature}'

    return token

Menggunakan header aeg-sas-token

Berikut adalah contoh melewati token SAS sebagai nilai untuk aeg-sas-token header.

aeg-sas-token: r=https%3a%2f%2fmytopic.eventgrid.azure.net%2fapi%2fevents&e=6%2f15%2f2017+6%3a20%3a15+PM&s=XXXXXXXXXXXXX%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d

Menggunakan header Otorisasi

Berikut adalah contoh melewati token SAS sebagai nilai untuk Authorization header.

Authorization: SharedAccessSignature r=https%3a%2f%2fmytopic.eventgrid.azure.net%2fapi%2fevents&e=6%2f15%2f2017+6%3a20%3a15+PM&s=XXXXXXXXXXXXX%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d

Langkah berikutnya

Lihat Autentikasi pengiriman acara untuk mempelajari tentang autentikasi dengan penangan peristiwa untuk menyampaikan acara.