Autenticare Griglia di eventi di Azure client di pubblicazione usando chiavi di accesso o firme di accesso condiviso

Questo articolo fornisce informazioni sull'autenticazione dei client che pubblicano eventi in Griglia di eventi di Azure argomenti, domini, spazi dei nomi partner usando la chiave di accesso o il token di firma di accesso condiviso.

Importante

  • L'autenticazione e l'autorizzazione di utenti o applicazioni che usano le identità di Microsoft Entra offrono una maggiore sicurezza e facilità d'uso tramite l'autenticazione basata su chiavi e firme di accesso condiviso (SAS). Con Microsoft Entra ID non è necessario archiviare i segreti usati per l'autenticazione nel codice e rischiare potenziali vulnerabilità di sicurezza. È consigliabile usare Microsoft Entra ID con le applicazioni di pubblicazione di eventi Griglia di eventi di Azure. Per altre informazioni, vedere Autenticare i client di pubblicazione con Microsoft Entra ID.
  • L'autenticazione di Microsoft Entra non è supportata per gli argomenti dello spazio dei nomi.

Eseguire l'autenticazione con la chiave di accesso

L'autenticazione con chiave di accesso è la forma più semplice di autenticazione. È possibile passare la chiave di accesso come intestazione HTTP o un parametro di query URL.

Chiave di accesso in un'intestazione HTTP

Passare la chiave di accesso come valore per l'intestazione HTTP: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Chiave di accesso come parametro di query

Come parametro di query è anche possibile specificare aeg-sas-key.

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

Per istruzioni su come ottenere le chiavi di accesso per un argomento o un dominio, vedere Ottenere le chiavi di accesso.

Eseguire l'autenticazione con la firma di accesso condiviso

I token di firma di accesso condiviso per una risorsa di Griglia di eventi includono la risorsa, l'ora di scadenza e una firma. Il formato del token di firma di accesso condiviso è: r={resource}&e={expiration}&s={signature}.

La risorsa è il percorso dell'argomento di Griglia di eventi a cui si inviano eventi. Un percorso di risorsa valido, ad esempio, è: https://<yourtopic>.<region>.eventgrid.azure.net/api/events. Per visualizzare tutte le versioni dell'API supportate, vedere Tipi di risorsa di Microsoft.EventGrid.

Prima di tutto, generare un token di firma di accesso condiviso a livello di codice e quindi usare l'intestazione o Authorization SharedAccessSignature l'intestazione per l'autenticazione aeg-sas-token con Griglia di eventi.

Generare un token di firma di accesso condiviso a livello di codice

L'esempio seguente crea un token di firma di accesso condiviso per l'uso con Griglia di eventi:

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

Uso dell'intestazione aeg-sas-token

Di seguito è riportato un esempio di passaggio del token di firma di accesso condiviso come valore per l'intestazione aeg-sas-token .

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

Uso dell'intestazione di autorizzazione

Di seguito è riportato un esempio di passaggio del token di firma di accesso condiviso come valore per l'intestazione Authorization .

Authorization: SharedAccessSignature r=https%3a%2f%2fmytopic.eventgrid.azure.net%2fapi%2fevents&e=6%2f15%2f2017+6%3a20%3a15+PM&s=XXXXXXXXXXXXX%2fBPjdDLOrc6THPy3tDcGHw1zP4OajQ%3d

Passaggi successivi

Vedere Autenticazione del recapito di eventi per informazioni sull'autenticazione con i gestori eventi per recapitare gli eventi.