Autenticar clientes de publicação da Grade de Eventos do Azure usando chaves de acesso ou assinaturas de acesso compartilhado

Este artigo fornece informações sobre como autenticar clientes que publicam eventos em tópicos da Grade de Eventos do Azure, domínios, namespaces de parceiros usando chave de acesso ou token SAS (Assinatura de Acesso Compartilhado).

Importante

  • Autenticar e autorizar usuários ou aplicativos usando identidades Microsoft Entra oferece segurança superior e facilidade de uso em relação à autenticação SAS (assinaturas de acesso compartilhado) e baseada em chave. Com o Microsoft Entra ID, não há necessidade de armazenar segredos usados para autenticação em seu código e arriscar possíveis vulnerabilidades de segurança. É altamente recomendável usar a ID do Microsoft Entra com seus aplicativos de publicação de eventos da Grade de Eventos do Azure. Para obter mais informações, consulte Autenticar clientes de publicação usando o Microsoft Entra ID.
  • A autenticação do Microsoft Entra não é suportada para tópicos de namespace.

Autenticar usando a chave de acesso

A autenticação por chave de acesso é a forma mais simples de autenticação. Você pode passar a chave de acesso como um cabeçalho HTTP ou um parâmetro de consulta de URL.

Chave de acesso em um cabeçalho HTTP

Passe a chave de acesso como um valor para o cabeçalho HTTP: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Chave de acesso como parâmetro de consulta

Você também pode especificar aeg-sas-key como um parâmetro de consulta.

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

Para obter instruções sobre como obter chaves de acesso para um tópico ou domínio, consulte Obter chaves de acesso.

Autenticar usando SAS

Os tokens SAS para um recurso de Grade de Eventos incluem o recurso, o tempo de expiração e uma assinatura. O formato do token SAS é: r={resource}&e={expiration}&s={signature}.

O recurso é o caminho para o tópico Grade de Eventos para o qual você está enviando eventos. Por exemplo, um caminho de recurso válido é: https://<yourtopic>.<region>.eventgrid.azure.net/api/events. Para ver todas as versões de API suportadas, consulte Tipos de recursos Microsoft.EventGrid.

Primeiro, gere programaticamente um token SAS e, em seguida, use o cabeçalho ou Authorization SharedAccessSignature cabeçalho para autenticar com a aeg-sas-token Grade de Eventos.

Gerar token SAS programaticamente

O exemplo a seguir cria um token SAS para uso com 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

Usando o cabeçalho aeg-sas-token

Aqui está um exemplo de passagem do token SAS como um valor para o aeg-sas-token cabeçalho.

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

Usando o cabeçalho Autorização

Aqui está um exemplo de passagem do token SAS como um valor para o Authorization cabeçalho.

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

Próximos passos

Consulte Autenticação de entrega de eventos para saber mais sobre a autenticação com manipuladores de eventos para entregar eventos.