Clients verifiëren Azure Event Grid publiceren 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 toegangssleutel of SAS-token (Shared Access Signature).

Belangrijk

Het verifiëren en autoriseren van gebruikers of toepassingen met behulp van Azure AD-identiteiten biedt superieure beveiliging en gebruiksgemak ten opzichte van SAS-verificatie (Key-based and Shared Access Signatures). Met Azure AD 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 Azure AD te gebruiken met uw Azure Event Grid toepassingen voor het publiceren van gebeurtenissen. Zie Publicerende clients verifiëren met behulp van Azure Active Directory voor meer informatie.

Verifiëren met behulp van toegangssleutel

Verificatie met 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 een onderwerp of domein voor instructies voor het ophalen van toegangssleutels.

Verifiëren met 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 om alle ondersteunde API-versies te bekijken.

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.