Uwierzytelnianie klientów Azure Event Grid publikowania 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 Azure Event Grid 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 usługi Azure AD zapewnia doskonałe zabezpieczenia i łatwość użycia w przypadku uwierzytelniania za pomocą sygnatur dostępu współdzielonego (SAS) opartego na kluczach i sygnaturach dostępu współdzielonego. W usłudze Azure AD nie ma potrzeby przechowywania wpisów tajnych używanych do uwierzytelniania w kodzie i ryzyka potencjalnych luk w zabezpieczeniach. Zdecydowanie zalecamy używanie usługi Azure AD z aplikacjami do publikowania zdarzeń Azure Event Grid. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie klientów publikowania przy użyciu Azure Active Directory.

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 jest ścieżką 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 programowo wygeneruj token SAS, a następnie użyj nagłówka lub Authorization SharedAccessSignature nagłówka aeg-sas-token do uwierzytelniania w usłudze Event Grid.

Programowe generowanie tokenu SAS

Poniższy przykład tworzy token SYGNATURy dostępu współdzielonego 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ń.