Authentifizieren von Azure Event Grid-Veröffentlichungsclients mithilfe von Zugriffsschlüsseln oder SAS (Shared Access Signatures)

Dieser Artikel enthält Informationen zur Authentifizierung von Clients, die Ereignisse zu Azure Event Grid-Themen, -Domänen oder -Partnernamespaces mit Zugriffsschlüssel oder SAS-Token (Shared Access Signature) veröffentlichen.

Wichtig

  • Die Authentifizierung und Autorisierung von Benutzern oder Anwendungen mithilfe von Microsoft Entra-Identitäten bietet höhere Sicherheit und Benutzerfreundlichkeit als schlüsselbasierte SAS-Authentifizierung (Shared Access Signatures). Mit Microsoft Entra ID ist es nicht erforderlich, für Authentifizierung verwendete Geheimnisse in Ihrem Code zu speichern und potenzielle Sicherheitsrisiken einzugehen. Es wird dringend empfohlen, Microsoft Entra ID mit Ihren Azure Event Grid-Ereignisveröffentlichungsanwendungen zu verwenden. Weitere Informationen finden Sie unter Authentifizieren von Veröffentlichungsclients mit Microsoft Entra ID.
  • Microsoft Entra-Authentifizierung wird für Namespacethemen nicht unterstützt.

Authentifizieren mithilfe eines Zugriffsschlüssels

Schlüsselauthentifizierung ist die einfachste Form von Authentifizierung. Sie können den Zugriffsschlüssel als HTTP-Header oder URL-Abfrageparameter übergeben.

Zugriffsschlüssel in einem HTTP-Header

Übergeben Sie den Zugriffsschlüssel als Wert für den HTTP-Header: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Zugriffsschlüssel als Abfrageparameter

Sie können auch aeg-sas-key als Abfrageparameter angeben.

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

Anleitungen zum Abrufen von Zugriffsschlüsseln für ein Thema oder eine Domäne finden Sie unter Abrufen von Zugriffsschlüsseln.

Authentifizieren mithilfe von SAS

SAS-Token für eine Event Grid-Ressource schließen die Ressource, eine Ablaufzeit und eine Signatur ein. Das Format des SAS-Tokens ist: r={resource}&e={expiration}&s={signature}.

Die Ressource ist der Pfad für das Event Grid-Thema, an das Sie Ereignisse senden. Beispielsweise lautet ein gültiger Ressourcenpfad: https://<yourtopic>.<region>.eventgrid.azure.net/api/events. Alle unterstützten API-Versionen finden Sie unter Microsoft.EventGrid-Ressourcentypen.

Generieren Sie zunächst programmgesteuert ein SAS-Token, und verwenden Sie dann den aeg-sas-token-Header oder Authorization SharedAccessSignature-Header, um die Authentifizierung mit Event Grid auszuführen.

Programmgesteuertes Generieren von SAS-Token

Das folgende Beispiel erstellt ein SAS-Token für die Verwendung mit 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

Verwenden des aeg-sas-token-Headers

Im Folgenden finden Sie ein Beispiel für das Übergeben des SAS-Tokens als Wert für den 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

Verwenden des Autorisierungsheaders

Im Folgenden finden Sie ein Beispiel für das Übergeben des SAS-Tokens als Wert für den 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

Nächste Schritte

Weitere Informationen zur Authentifizierung mit Ereignishandlern für die Übermittlung von Ereignissen finden Sie unter Ereignisübermittlungsauthentifizierung.