Uwierzytelnianie klientów publikowania usługi Azure Event Grid przy użyciu kluczy dostępu lub sygnatur dostępu współdzielonego

Ten artykuł zawiera informacje na temat uwierzytelniania klientów, którzy publikują zdarzenia w tematach, domenach, przestrzeniach nazw partnerów przy użyciu klucza dostępu lub tokenu sygnatury dostępu współdzielonego (SAS).

Ważne

  • Uwierzytelnianie i autoryzowanie użytkowników lub aplikacji przy użyciu tożsamości firmy Microsoft Entra zapewnia doskonałe zabezpieczenia i łatwość korzystania z uwierzytelniania opartego na kluczach i sygnatur dostępu współdzielonego (SAS). W przypadku identyfikatora Entra firmy Microsoft nie ma potrzeby przechowywania wpisów tajnych używanych do uwierzytelniania w kodzie i ryzyka potencjalnych luk w zabezpieczeniach. Zdecydowanie zalecamy używanie identyfikatora Entra firmy Microsoft z aplikacjami do publikowania zdarzeń usługi Azure Event Grid. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie klientów publikowania przy użyciu identyfikatora Entra firmy Microsoft.
  • Uwierzytelnianie entra firmy Microsoft nie jest obsługiwane w przypadku tematów przestrzeni nazw.

Uwierzytelnianie przy użyciu klucza dostępu

Uwierzytelnianie za pomocą klucza dostępu jest najprostszą formą uwierzytelniania. Klucz dostępu można przekazać jako nagłówek HTTP lub parametr zapytania adresu URL.

Klucz dostępu w nagłówku HTTP

Przekaż klucz dostępu jako wartość nagłówka HTTP: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Klucz dostępu jako parametr zapytania

Można również określić aeg-sas-key jako parametr zapytania.

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

Aby uzyskać instrukcje dotyczące uzyskiwania kluczy dostępu dla tematu lub domeny, zobacz Uzyskiwanie kluczy dostępu.

Uwierzytelnianie przy użyciu sygnatury dostępu współdzielonego

Tokeny sygnatury dostępu współdzielonego dla zasobu usługi Event Grid obejmują zasób, czas wygaśnięcia i podpis. Format tokenu SAS to: r={resource}&e={expiration}&s={signature}.

Zasób to ścieżka tematu usługi Event Grid, do którego wysyłasz zdarzenia. Na przykład prawidłową ścieżką zasobu jest: https://<yourtopic>.<region>.eventgrid.azure.net/api/events. Aby wyświetlić wszystkie obsługiwane wersje interfejsu API, zobacz Typy zasobów Microsoft.EventGrid.

Najpierw programowe generowanie tokenu SAS, a następnie używanie nagłówka lub Authorization SharedAccessSignature nagłówka aeg-sas-token do uwierzytelniania za pomocą usługi Event Grid.

Programowe generowanie tokenu SAS

Poniższy przykład tworzy token SAS do użycia z usługą 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

Używanie nagłówka aeg-sas-token

Oto przykład przekazywania tokenu SAS jako wartości nagłówka 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

Używanie nagłówka autoryzacji

Oto przykład przekazywania tokenu SAS jako wartości nagłówka 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

Następne kroki

Zobacz Uwierzytelnianie dostarczania zdarzeń, aby dowiedzieć się więcej o uwierzytelnianiu za pomocą procedur obsługi zdarzeń w celu dostarczania zdarzeń.