Autentisera Azure Event Grid-publiceringsklienter med hjälp av åtkomstnycklar eller signaturer för delad åtkomst

Den här artikeln innehåller information om autentisering av klienter som publicerar händelser till Azure Event Grid-ämnen, domäner, partnernamnområden med hjälp av åtkomstnyckel eller SAS-token (Signatur för delad åtkomst).

Viktigt!

  • Att autentisera och auktorisera användare eller program med Hjälp av Microsoft Entra-identiteter ger överlägsen säkerhet och användarvänlighet vid nyckelbaserad och delad åtkomstsignaturautentisering (SAS). Med Microsoft Entra-ID behöver du inte lagra hemligheter som används för autentisering i din kod och riskera potentiella säkerhetsrisker. Vi rekommenderar starkt att du använder Microsoft Entra-ID med dina Azure Event Grid-program för händelsepublicering. Mer information finns i Autentisera publiceringsklienter med Microsoft Entra-ID.
  • Microsoft Entra-autentisering stöds inte för namnområdesämnen.

Autentisera med hjälp av åtkomstnyckel

Åtkomstnyckelautentisering är den enklaste formen av autentisering. Du kan skicka åtkomstnyckeln som ett HTTP-huvud eller en URL-frågeparameter.

Åtkomstnyckel i ett HTTP-huvud

Skicka åtkomstnyckeln som ett värde för HTTP-huvudet: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Åtkomstnyckel som en frågeparameter

Du kan också ange aeg-sas-key som en frågeparameter.

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

Anvisningar om hur du hämtar åtkomstnycklar för ett ämne eller en domän finns i Hämta åtkomstnycklar.

Autentisera med SAS

SAS-token för en Event Grid-resurs inkluderar resursen, förfallotiden och en signatur. Formatet för SAS-token är: r={resource}&e={expiration}&s={signature}.

Resursen är sökvägen till event grid-ämnet som du skickar händelser till. En giltig resurssökväg är till exempel: https://<yourtopic>.<region>.eventgrid.azure.net/api/events. Information om alla API-versioner som stöds finns i Resurstyper för Microsoft.EventGrid.

Generera först programmatiskt en SAS-token och använd sedan huvudet eller Authorization SharedAccessSignature huvudet för att autentisera aeg-sas-token med Event Grid.

Generera SAS-token programmatiskt

I följande exempel skapas en SAS-token för användning med 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

Använda aeg-sas-token-header

Här är ett exempel på hur du skickar SAS-token som ett värde för aeg-sas-token huvudet.

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

Använda auktoriseringshuvud

Här är ett exempel på hur du skickar SAS-token som ett värde för Authorization huvudet.

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ästa steg

Se Händelseleveransautentisering för att lära dig mer om autentisering med händelsehanterare för att leverera händelser.