Share via


Azure Event Grid-clients verifiëren met behulp van toegangssleutels of handtekeningen voor gedeelde toegang (preview)

Dit artikel bevat informatie over het verifiëren van clients voor Azure Event Namespace Topics, aangepaste onderwerpen, domeinen en 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 Om Microsoft Entra ID te gebruiken voor uw toepassingen.

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.

Voor naamruimteonderwerpen is dit bijvoorbeeld de manier waarop uw HTTP-aanvraag-URL eruit kan zien als een sleutel als parameter wordt doorgegeven.

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

Voor aangepaste onderwerpen, domeinen en partnernaamruimten moet de URL van uw HTTP-aanvraag er als volgt uitzien:

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

Shared Access Signatures

Shared Access Signatures (SAS) biedt toegangsbeheer over resources waarmee clients kunnen communiceren. Hier volgen enkele van de besturingselementen die u in een SAS kunt instellen:

  • Stel een SAS-verlooptijd in. Deze waarde definieert effectief het interval waarvoor de SAS geldig is, kan worden gebruikt voor verificatie.
  • De resource waarvoor een SAS kan worden gebruikt. SAS-token kan worden gemaakt voor toegang tot aangepaste onderwerpen, domeinen, partnernaamruimten en naamruimten. Als u een SAS maakt voor een aangepast onderwerp, domein of partnernaamruimte, kan een client deze gebruiken om gebeurtenissen naar een van deze resources te publiceren. Wanneer u een SAS voor naamruimteresources maakt, hebt u gedetailleerde controle over waartoe een client toegang heeft. Als u een SAS maakt waarvan de resource een naamruimte is, kan een client gebeurtenissen publiceren naar een naamruimteonderwerp in de naamruimte en gebeurtenissen ontvangen van elk gebeurtenisabonnement op een van de onderwerpen van de naamruimte. Op dezelfde manier kan een client, wanneer u een SAS voor een naamruimteonderwerp maakt, gebeurtenissen publiceren naar dat naamruimteonderwerp en gebeurtenissen ontvangen van elk gebeurtenisabonnement op dat onderwerp. Wanneer een SAS wordt gemaakt voor een gebeurtenisabonnement, kan de client gebeurtenissen ontvangen via dat gebeurtenisabonnement.
  • Alleen clients die een geldige SAS presenteren, kunnen gegevens verzenden of ontvangen naar Event Grid.

Shared Access Signature-token

U kunt een SAS-token genereren dat moet worden opgenomen wanneer uw clienttoepassing communiceert met Event Grid. SAS-tokens voor Event Grid-resources zijn URL gecodeerde tekenreeksen met de volgende indeling: r={resource}&e={expiration_utc}&s={signature}

  • {resource} is de URL die de Event Grid-resource vertegenwoordigt waartoe de client toegang heeft.
    • De geldige URL-indeling voor aangepaste onderwerpen, domeinen en partnernaamruimten is https://<yourtopic>.<region>.eventgrid.azure.net/api/events.
    • De geldige indeling voor naamruimtebronnen is als volgt:
      • Naamruimten: https://<namespace-name>.<region>.eventgrid.azure.net
      • Onderwerpen over naamruimten: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>
      • Gebeurtenisabonnementen: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>/eventsubscriptions/<event_subscription_name>
  • {expiration_utc} is de URL van de SAS gecodeerde UTC-verlooptijd.
  • {signature} is de SHA-256-hash berekend via de resource-URI en de tekenreeksweergave van het token verloopt direct, gescheiden door CRLF. De hash-berekening lijkt op de volgende pseudocode en retourneert een hash-waarde van 256-bits/32-bytes.
SHA-256('https://<namespace_name>.eventgrid.azure.net/'+'\n'+ 1438205742)

Het token bevat de niet-hashwaarden, zodat de ontvanger (Event Grid) de hash opnieuw kan compileren met dezelfde parameters, waarbij wordt gecontroleerd of het token niet is gewijzigd (gegevensintegriteit).

Een SAS-token is geldig voor alle resources die zijn voorafgegaan door de resource-URI die wordt gebruikt in de handtekeningtekenreeks.

Als u alle ondersteunde API-versies wilt raadplegen wanneer u Event Grid gebruikt, raadpleegt u Microsoft.EventGrid-resourcetypen.

Verifiëren met behulp van SAS

Uw toepassing kan worden geverifieerd vóór een Event Grid-resource door een SAS-token te presenteren. Dit kan worden gedaan met behulp van de aeg-sas-token header of de Authorization SharedAccessSignature header met een HTTP-aanvraag. In de volgende secties wordt beschreven hoe u een SAS-token genereert en hoe u dit kunt gebruiken wanneer uw clienttoepassing HTTP-aanvragen verzendt of ontvangt (pull-levering).

SAS-token programmatisch genereren

In de volgende C#- en Python-voorbeelden ziet u hoe u een SAS-token maakt voor gebruik met Event Grid:

C#-voorbeeld

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

Python-voorbeeld

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 een SAS-token als 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

In dit voorbeeld ziet u hoe u een SAS-token doorgeeft 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