Share via


Autentisera Azure Event Grid-klienter med hjälp av åtkomstnycklar eller signaturer för delad åtkomst (förhandsversion)

Den här artikeln innehåller information om hur du autentiserar klienter till Azure Event Namespace Topics, anpassade ämnen, domäner och 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 program.

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.

För namnområdesämnen är det till exempel så här din HTTP-begärande-URL kan se ut att skicka en nyckel som en parameter.

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

För anpassade ämnen, domäner och partnernamnområden bör URL:en för HTTP-begäran se ut så här:

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

Signaturer för delad åtkomst

Signaturer för delad åtkomst (SAS) ger dig åtkomstkontroll över resurser som klienter kan kommunicera med. Här är några av de kontroller som du kan ange i en SAS:

  • Ange en SAS-förfallotid. Det här värdet definierar effektivt det intervall som SAS är giltigt för kan användas för autentisering.
  • Den resurs som en SAS kan användas för. SAS-token kan skapas för att få åtkomst till anpassade ämnen, domäner, partnernamnområden och namnområden. Om du skapar en SAS för ett anpassat ämne, en domän eller ett partnernamnområde kan en klient använda den för att publicera händelser till någon av dessa resurser. När du skapar en SAS för namnområdesresurser har du detaljerad kontroll över vad en klient kan komma åt. Om du skapar en SAS vars resurs är ett namnområde kan en klient publicera händelser till valfritt namnområdesämne i namnområdet och kan ta emot händelser från valfri händelseprenumeration i något av namnområdets ämnen. När du skapar en SAS för ett namnområdesämne kan en klient publicera händelser till det namnområdesavsnittet och ta emot händelser från en händelseprenumeration i det ämnet. När en SAS skapas för en händelseprenumeration kan klienten ta emot händelser via den händelseprenumerationen.
  • Endast klienter som presenterar en giltig SAS kan skicka eller ta emot data till Event Grid.

Signaturtoken för delad åtkomst

Du kan generera en SAS-token som ska inkluderas när klientprogrammet kommunicerar med Event Grid. SAS-token för Event Grid-resurser är Base64 kodade strängar med följande format: r={resource}&e={expiration_utc}&s={signature}.

  • {resource} är den URL som representerar Event Grid-resursen som klienten har åtkomst till.
    • Det giltiga URL-formatet för anpassade ämnen, domäner och partnernamnområden är https://<yourtopic>.<region>.eventgrid.azure.net/api/events.
    • Det giltiga formatet för namnområdesresurser är följande:
      • Namnområden: https://<namespace-name>.<region>.eventgrid.azure.net
      • Namnområdesämnen: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>
      • Händelseprenumerationer: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>/eventsubscriptions/<event_subscription_name>
  • {expiration_utc} är SAS URL-kodad UTC-förfallotid.
  • {signature} är SHA-256-hashen som beräknas över resurs-URI:n och strängrepresentationen av tokens utgångs omedelbart, avgränsat med CRLF. Hash-beräkningen liknar följande pseudokod och returnerar ett hashvärde på 256 bitar/32 byte.
SHA-256('https://<namespace_name>.eventgrid.azure.net/'+'\n'+ 1438205742)

Token innehåller de icke-hashade värdena så att mottagaren (Event Grid) kan omkomplera hashen med samma parametrar och verifiera att token inte har ändrats (dataintegritet).

En SAS-token är giltig för alla resurser som är prefix med resurs-URI:n som används i signatursträngen.

Information om alla API-versioner som stöds när du använder Event Grid finns i Microsoft.EventGrid-resurstyper.

Autentisera med SAS

Ditt program kan autentiseras före en Event Grid-resurs genom att presentera en SAS-token. Detta kan göras med hjälp aeg-sas-token av huvudet eller Authorization SharedAccessSignature huvudet med en HTTP-begäran. I följande avsnitt beskrivs hur du genererar en SAS-token och hur du använder den när klientprogrammet gör HTTP-begäranden för att skicka eller ta emot (pull-leverans) händelser.

Generera SAS-token programmatiskt

Följande C#- och Python-exempel visar hur du skapar en SAS-token för användning med Event Grid:

C#-exempel

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-exempel

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 som visar hur du skickar en 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

Det här exemplet visar hur du skickar en 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