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 för att 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 Azure AD-identiteter ger överlägsen säkerhet och användarvänlighet vid sas-autentisering (key-based and shared access signatures). Med Azure AD 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 Azure AD med dina Azure Event Grid händelsepubliceringsprogram. Mer information finns i Autentisera publiceringsklienter med Azure Active Directory.

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 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 det event grid-ämne 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 Microsoft.EventGrid-resurstyper.

Generera först en SAS-token programmässigt 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-tokenrubrik

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.