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 Azure AD memberikan keamanan unggul dan kemudahan penggunaan atas autentikasi tanda tangan akses bersama (SAS) dan berbasis kunci. Dengan Microsoft Azure AD, tidak perlu menyimpan rahasia yang digunakan untuk autentikasi dalam kode Anda dan merisikokan potensi kerentanan keamanan. Kami sangat menyarankan Anda menggunakan Microsoft Azure AD dengan aplikasi penerbitan acara Azure Event Grid Anda. Untuk informasi selengkapnya, lihat Mengautentikasi klien penerbitan menggunakan Azure Active Directory.

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 alur untuk topik event grid tempat Anda mengirim acara. 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.