Sdílet prostřednictvím


Ověřování klientů Azure Event Gridu pomocí přístupových klíčů nebo sdílených přístupových podpisů (Preview)

Tento článek obsahuje informace o ověřování klientů v tématech oboru názvů událostí Azure, vlastních tématech, doménách a partnerských oborech názvů pomocí přístupového klíče nebo tokenu sdíleného přístupového podpisu (SAS).

Důležité

  • Ověřování a autorizace uživatelů nebo aplikací pomocí identit Microsoft Entra poskytuje vynikající zabezpečení a snadné použití prostřednictvím ověřování pomocí klíčů a sdílených přístupových podpisů (SAS). S ID Microsoft Entra není nutné ukládat tajné kódy používané k ověřování v kódu a riskovat potenciální ohrožení zabezpečení. Důrazně doporučujeme používat Microsoft Entra ID s vašimi aplikacemi.

Ověřování pomocí přístupového klíče

Ověřování pomocí přístupového klíče je nejjednodušší formou ověřování. Přístupový klíč můžete předat jako hlavičku HTTP nebo parametr dotazu adresy URL.

Přístupový klíč v hlavičce HTTP

Předejte přístupový klíč jako hodnotu hlavičky HTTP: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Přístupový klíč jako parametr dotazu

Můžete také zadat aeg-sas-key jako parametr dotazu.

Například u témat oboru názvů se jedná o způsob, jakým adresa URL požadavku HTTP může vypadat jako parametr předání klíče.

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

Pro vlastní témata, domény a obory názvů partnerů by adresa URL požadavku HTTP měla vypadat takto:

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

Sdílené přístupové podpisy

Sdílené přístupové podpisy (SAS) poskytují řízení přístupu k prostředkům, se kterými můžou klienti komunikovat. Tady jsou některé ovládací prvky, které můžete nastavit v SAS:

  • Nastavte čas vypršení platnosti SAS. Tato hodnota efektivně definuje interval, ve kterém je SAS platný, se dá použít k ověřování.
  • Prostředek, pro který je možné použít SAS. Token SAS je možné vytvořit pro přístup k vlastním tématům, doménám, partnerským oborům názvů a oborům názvů. Pokud vytvoříte SAS pro vlastní téma, doménu nebo obor názvů partnera, klient ho může použít k publikování událostí do libovolného z těchto prostředků. Při vytváření SAS pro prostředky oboru názvů máte podrobnou kontrolu nad tím, k čemu má klient přístup. Pokud vytvoříte SAS, jehož prostředkem je obor názvů, klient může publikovat události do libovolného tématu oboru názvů uvnitř oboru názvů a může přijímat události z libovolného odběru událostí v libovolném tématu oboru názvů. Podobně když vytvoříte SAS pro téma oboru názvů, klient může publikovat události do daného tématu oboru názvů a přijímat události z libovolného odběru událostí v tomto tématu. Při vytvoření sdíleného přístupového podpisu pro odběr událostí může klient přijímat události prostřednictvím daného odběru událostí.
  • Do Event Gridu můžou odesílat nebo přijímat data pouze klienti, kteří představují platný SAS.

Token sdíleného přístupového podpisu

Token SAS, který se má zahrnout, můžete vygenerovat, když klientská aplikace komunikuje se službou Event Grid. Tokeny SAS pro prostředky Event Gridu jsou Base64 kódované řetězce s následujícím formátem: r={resource}&e={expiration_utc}&s={signature}.

  • {resource} je adresa URL, která představuje prostředek Event Gridu, ke kterému klient přistupuje.
    • Platný formát adresy URL pro vlastní témata, domény a obory názvů partnerů je https://<yourtopic>.<region>.eventgrid.azure.net/api/events.
    • Platný formát prostředků oboru názvů je následující:
      • Obory názvů: https://<namespace-name>.<region>.eventgrid.azure.net
      • Témata oboru názvů: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>
      • Odběry událostí: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>/eventsubscriptions/<event_subscription_name>
  • {expiration_utc} je adresa URL SAS zakódovaná v čase vypršení platnosti UTC.
  • {signature} je hodnota hash SHA-256 vypočítaná přes identifikátor URI prostředku a řetězcové vyjádření okamžité vypršení platnosti tokenu oddělené crlf. Výpočet hodnoty hash vypadá podobně jako následující pseudokód a vrátí hodnotu hash 256 bitů/32 bajtů.
SHA-256('https://<namespace_name>.eventgrid.azure.net/'+'\n'+ 1438205742)

Token obsahuje hodnoty, které nejsou hashované, aby příjemce (Event Grid) mohl hodnotu hash překompilovat stejnými parametry a ověřit, že token nebyl změněn (integrita dat).

Token SAS je platný pro všechny prostředky s předponou identifikátoru URI prostředku, který se používá v řetězci podpisu.

Informace o všech podporovaných verzích rozhraní API při použití Event Gridu najdete v tématu Typy prostředků Microsoft.EventGrid.

Ověřování pomocí SAS

Aplikace se může ověřit před prostředkem Event Gridu tím, že předá token SAS. Můžete to provést pomocí hlavičky aeg-sas-token nebo hlavičky Authorization SharedAccessSignature s požadavkem HTTP. Následující části popisují způsob, jak vygenerovat token SAS a jak ho použít, když klientská aplikace odesílá nebo přijímá události http pro odesílání nebo přijímání událostí (doručování změn).

Programové generování tokenu SAS

Následující příklady jazyka C# a Python ukazují, jak vytvořit token SAS pro použití se službou Event Grid:

Příklad jazyka C#

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;
    }
}

Příklad Pythonu

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

Použití hlavičky aeg-sas-token

Tady je příklad, který ukazuje, jak předat token SAS jako hodnotu hlavičky 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

Použití autorizační hlavičky

Tento příklad ukazuje, jak předat token SAS jako hodnotu hlavičky 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

Další kroky