Azure Event Grid-publicatieclients verifiëren met behulp van toegangssleutels of handtekeningen voor gedeelde toegang

Dit artikel bevat informatie over het verifiëren van clients die gebeurtenissen publiceren naar Azure Event Grid-onderwerpen, domeinen, partnernaamruimten met behulp van een toegangssleutel of SAS-token (Shared Access Signature).

Belangrijk

  • Het verifiëren en autoriseren van gebruikers of toepassingen met Behulp van Microsoft Entra-identiteiten biedt superieure beveiliging en gebruiksgemak ten opzichte van sas-verificatie (key-based and Shared Access Signatures). Met Microsoft Entra ID hoeft u geen geheimen op te slaan die worden gebruikt voor verificatie in uw code en potentiële beveiligingsproblemen te riskeren. We raden u ten zeerste aan Microsoft Entra ID te gebruiken met uw Azure Event Grid-toepassing voor het publiceren van gebeurtenissen. Zie Publicerende clients verifiëren met behulp van Microsoft Entra ID voor meer informatie.
  • Microsoft Entra-verificatie wordt niet ondersteund voor naamruimteonderwerpen.

Verifiëren met behulp van toegangssleutel

Verificatie van toegangssleutels is de eenvoudigste vorm van verificatie. U kunt de toegangssleutel doorgeven als een HTTP-header of een URL-queryparameter.

Toegangssleutel in een HTTP-header

Geef de toegangssleutel door als een waarde voor de HTTP-header: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Toegangssleutel als queryparameter

U kunt ook opgeven aeg-sas-key als een queryparameter.

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

Zie Toegangssleutels ophalen voor instructies voor het ophalen van toegangssleutels voor een onderwerp of domein.

Verifiëren met behulp van SAS

SAS-tokens voor een Event Grid-resource bevatten de resource, verlooptijd en een handtekening. De indeling van het SAS-token is: r={resource}&e={expiration}&s={signature}.

De resource is het pad voor het Event Grid-onderwerp waarnaar u gebeurtenissen verzendt. Een geldig resourcepad is bijvoorbeeld: https://<yourtopic>.<region>.eventgrid.azure.net/api/events. Zie Microsoft.EventGrid-resourcetypen voor alle ondersteunde API-versies.

Genereer eerst programmatisch een SAS-token en gebruik vervolgens de aeg-sas-token header of Authorization SharedAccessSignature header om te verifiëren met Event Grid.

SAS-token programmatisch genereren

In het volgende voorbeeld wordt een SAS-token gemaakt voor gebruik met 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

Aeg-sas-tokenheader gebruiken

Hier volgt een voorbeeld van het doorgeven van het SAS-token als een waarde voor de 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

Autorisatieheader gebruiken

Hier volgt een voorbeeld van het doorgeven van het SAS-token als een waarde voor de 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

Volgende stappen

Zie Verificatie van gebeurtenislevering voor meer informatie over verificatie met gebeurtenis-handlers voor het leveren van gebeurtenissen.