Aracılığıyla paylaş


Erişim anahtarlarını veya paylaşılan erişim imzalarını kullanarak Azure Event Grid istemcilerinin kimliğini doğrulama (Önizleme)

Bu makalede, erişim anahtarı veya Paylaşılan Erişim İmzası (SAS) belirtecini kullanarak Azure Olay Ad Alanı Konuları, özel konular, etki alanları ve iş ortağı ad alanlarında istemcilerin kimliğini doğrulama hakkında bilgi sağlanır.

Önemli

  • Microsoft Entra kimliklerini kullanarak kullanıcıların veya uygulamaların kimliğini doğrulamak ve yetkilendirmek, anahtar tabanlı ve paylaşılan erişim imzaları (SAS) kimlik doğrulamasına göre üstün güvenlik ve kullanım kolaylığı sağlar. Microsoft Entra Id ile, kodunuzda kimlik doğrulaması için kullanılan gizli dizileri depolamaya ve olası güvenlik açıklarını riske atmaya gerek yoktur. Uygulamalarınızda Microsoft Entra Id kullanmanızı kesinlikle öneririz.

Erişim anahtarını kullanarak kimlik doğrulaması

Erişim anahtarı kimlik doğrulaması, kimlik doğrulamasının en basit biçimidir. Erişim anahtarını HTTP üst bilgisi veya URL sorgu parametresi olarak geçirebilirsiniz.

HTTP üst bilgisinde Erişim anahtarı

Erişim anahtarını HTTP üst bilgisi için bir değer olarak geçirin: aeg-sas-key.

aeg-sas-key: XXXXXXXXXXXXXXXXXX0GXXX/nDT4hgdEj9DpBeRr38arnnm5OFg==

Sorgu parametresi olarak erişim anahtarı

Sorgu parametresi olarak da belirtebilirsiniz aeg-sas-key .

Örneğin, ad alanı konuları için HTTP isteği URL'nizin parametre olarak anahtar geçirerek nasıl görünebileceğidir.

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

Özel konular, etki alanları ve iş ortağı ad alanları için HTTP isteği URL'niz aşağıdaki gibi görünmelidir:

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

Paylaşılan Erişim İmzaları

Paylaşılan Erişim İmzaları (SAS), istemcilerin iletişim kurabileceği kaynaklar üzerinde erişim denetimi sağlar. Sas içinde ayarlayabileceğiniz denetimlerden bazıları şunlardır:

  • SAS süre sonu ayarlayın. Bu değer, kimlik doğrulaması için SAS'nin geçerli olduğu aralığı etkili bir şekilde tanımlar.
  • SAS'nin kullanılabilmesi için kaynak. ÖZEL konulara, etki alanlarına, iş ortağı ad alanlarına ve ad alanlarına erişmek için SAS belirteci oluşturulabilir. Özel bir konu, etki alanı veya iş ortağı ad alanı için SAS oluşturursanız, bir istemci bu kaynaklardan herhangi birine olay yayımlamak için bunu kullanabilir. Ad alanı kaynakları için sas oluşturduğunuzda, istemcinin erişebileceği şeyler üzerinde ayrıntılı denetime sahipsinizdir. Kaynağı ad alanı olan bir SAS oluşturursanız, istemci ad alanı içindeki herhangi bir ad alanı konusuna olay yayımlayabilir ve ad alanının konu başlıklarından herhangi bir olay aboneliğinden olay alabilir. Benzer şekilde, bir ad alanı konusu için SAS oluşturduğunuzda, istemci bu ad alanı konusuna olay yayımlayabilir ve bu konudaki herhangi bir olay aboneliğinden olay alabilir. Bir olay aboneliği için SAS oluşturulduğunda, istemci bu olay aboneliği aracılığıyla olayları alabilir.
  • Yalnızca geçerli bir SAS sunan istemciler Event Grid'e veri gönderebilir veya alabilir.

Paylaşılan Erişim İmzası belirteci

İstemci uygulamanız Event Grid ile iletişim kurarken eklenecek bir SAS belirteci oluşturabilirsiniz. Event Grid kaynakları için SAS belirteçleri şu biçimde kodlanmış dizelerdir Base64 : r={resource}&e={expiration_utc}&s={signature}.

  • {resource} , istemcinin eriştiği Event Grid kaynağını temsil eden URL'dir.
    • Özel konular, etki alanları ve iş ortağı ad alanları için geçerli URL biçimidir https://<yourtopic>.<region>.eventgrid.azure.net/api/events.
    • Ad alanı kaynakları için geçerli biçim aşağıdaki gibidir:
      • Ad alanları: https://<namespace-name>.<region>.eventgrid.azure.net
      • Ad alanı konuları: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>
      • Olay abonelikleri: https://<namespace_name>.<region>.eventgrid.azure.net/topics/<topic_name>/eventsubscriptions/<event_subscription_name>
  • {expiration_utc} , SAS'nin URL kodlanmış UTC süre sonu zamanıdır.
  • {signature} , kaynak URI'si üzerinden hesaplanan SHA-256 karması ve CRLF ile ayrılmış belirteç süre sonu anında dize gösterimidir. Karma hesaplama aşağıdaki sahte koda benzer ve 256 bit/32 bayt karma değeri döndürür.
SHA-256('https://<namespace_name>.eventgrid.azure.net/'+'\n'+ 1438205742)

Belirteç, alıcının (Event Grid) karmayı aynı parametrelerle yeniden derleyerek belirtecin değiştirilmediğini (veri bütünlüğü) doğrulayabilmesi için karma olmayan değerleri içerir.

SAS belirteci, imza dizesinde kullanılan kaynak URI'siyle önekli tüm kaynaklar için geçerlidir.

Event Grid kullanırken desteklenen tüm API sürümlerine başvurmak için bkz . Microsoft.EventGrid kaynak türleri.

SAS kullanarak kimlik doğrulaması

Uygulamanız bir SAS belirteci sunarak Event Grid kaynağı öncesinde kimlik doğrulaması yapabilir. Bu, üst bilgi veya Authorization SharedAccessSignature üst bilgi bir HTTP isteğiyle kullanılarak aeg-sas-token yapılabilir. Aşağıdaki bölümlerde SAS belirteci oluşturmanın yolu ve istemci uygulamanız http istekleri gönderildiğinde veya olay almak (çekme teslimi) yaptığında bu belirtecin nasıl kullanılacağı açıklanmaktadır.

Program aracılığıyla SAS belirteci oluşturma

Aşağıdaki C# ve Python örnekleri, Event Grid ile kullanmak üzere SAS belirtecinin nasıl oluşturulacağını gösterir:

C# örneği

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

Python örneği

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

aeg-sas-token üst bilgisini kullanma

Burada, sas belirtecinin üst bilgi için bir değer olarak nasıl geçirildiğini gösteren bir örnek verilmiş.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

Yetkilendirme üst bilgisini kullanma

Bu örnekte, sas belirtecinin üst bilgi için bir değer olarak nasıl geçirilir gösterilmektedir 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

Sonraki adımlar