Bagikan melalui


Mengautentikasi klien Azure Event Grid menggunakan kunci akses atau tanda tangan akses bersama (Pratinjau)

Artikel ini menyediakan informasi tentang mengautentikasi klien ke Topik Namespace Azure Event, topik kustom, domain, dan namespace 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. Sebaiknya gunakan ID Microsoft Entra dengan aplikasi Anda.

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.

Misalnya, untuk topik namespace layanan, ini adalah cara URL permintaan HTTP Anda dapat terlihat meneruskan kunci sebagai parameter.

https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>:publish?aeg-sas-key=XXXXXXXX53249XX8XXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Untuk topik kustom, domain, dan namespace mitra, URL permintaan HTTP Anda akan terlihat seperti berikut ini:

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

Tanda Tangan Akses Bersama

Tanda Tangan Akses Bersama (SAS) memberi Anda kontrol akses atas sumber daya yang dapat dikomunikasikan klien. Berikut adalah beberapa kontrol yang dapat Anda tetapkan di SAS:

  • Atur waktu kedaluwarsa SAS. Nilai ini secara efektif menentukan interval di mana SAS valid dapat digunakan untuk autentikasi.
  • Sumber daya tempat SAS dapat digunakan. Token SAS dapat dibuat untuk mengakses topik kustom, domain, namespace mitra, dan namespace layanan. Jika Anda membuat SAS untuk topik kustom, domain, atau namespace mitra, klien dapat menggunakannya untuk menerbitkan peristiwa ke salah satu sumber daya tersebut. Saat Anda membuat SAS untuk sumber daya namespace, Anda memiliki kontrol terperinci atas apa yang dapat diakses klien. Jika Anda membuat SAS yang sumber dayanya adalah namespace layanan, klien dapat menerbitkan peristiwa ke topik namespace apa pun di dalam namespace layanan dan dapat menerima peristiwa dari langganan peristiwa apa pun pada salah satu topik namespace. Demikian pula, saat Anda membuat SAS untuk topik namespace layanan, klien dapat menerbitkan peristiwa ke topik namespace layanan tersebut dan menerima peristiwa dari langganan peristiwa apa pun tentang topik tersebut. Saat SAS dibuat untuk langganan peristiwa, klien dapat menerima peristiwa melalui langganan peristiwa tersebut.
  • Hanya klien yang menyajikan SAS yang valid yang dapat mengirim atau menerima data ke Event Grid.

Token Tanda Tangan Akses Bersama

Anda dapat membuat token SAS untuk disertakan saat aplikasi klien Anda berkomunikasi dengan Event Grid. Token SAS untuk sumber daya Event Grid adalah string yang Base64 dikodekan dengan format berikut: r={resource}&e={expiration_utc}&s={signature}.

  • {resource} adalah URL yang mewakili sumber daya Event Grid yang diakses klien.
    • Format URL yang valid untuk topik kustom, domain, dan namespace mitra adalah https://<yourtopic>.<region>.eventgrid.azure.net/api/events.
    • Format yang valid untuk sumber daya namespace adalah sebagai berikut:
      • Namespaces: https://<namespace-name>.<region>.eventgrid.azure.net
      • Topik namespace: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>
      • Langganan peristiwa: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>/eventsubscriptions/<event_subscription_name>
  • {expiration_utc} adalah waktu kedaluwarsa UTC yang dikodekan URL SAS.
  • {signature} adalah hash SHA-256 yang dihitung melalui URI sumber daya dan representasi string dari instan kedaluwarsa token, dipisahkan oleh CRLF. Komputasi hash terlihat mirip dengan kode pseudo berikut dan mengembalikan 256-bit/32-byte nilai hash.
SHA-256('https://<namespace_name>.eventgrid.azure.net/'+'\n'+ 1438205742)

Token berisi nilai yang tidak di-hash sehingga penerima (Event Grid) dapat mengkompilasi ulang hash dengan parameter yang sama, memverifikasi bahwa token belum dimodifikasi (integritas data).

Token SAS valid untuk semua sumber daya yang diawali dengan URI sumber daya yang digunakan dalam string tanda tangan.

Untuk berkonsultasi dengan semua versi API yang didukung saat menggunakan Event Grid, lihat Jenis sumber daya Microsoft.EventGrid.

Mengautentikasi menggunakan SAS

Aplikasi Anda dapat mengautentikasi sebelum sumber daya Event Grid dengan menyajikan token SAS. Ini dapat dilakukan dengan menggunakan aeg-sas-token header atau Authorization SharedAccessSignature header dengan permintaan HTTP. Bagian berikut menjelaskan cara menghasilkan token SAS dan cara menggunakannya ketika aplikasi klien Anda membuat permintaan HTTP untuk mengirim atau menerima peristiwa (pengiriman pull).

Hasilkan token SAS secara terprogram

Contoh C# dan Python berikut menunjukkan kepada Anda cara membuat token SAS untuk digunakan dengan Event Grid:

Contoh C#

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;
    }
}

Contoh Python

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 yang menunjukkan cara meneruskan 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

Contoh ini menunjukkan cara meneruskan 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