Aracılığıyla paylaş


Event Grid olay şeması ile uç nokta doğrulama

Web kancaları, Azure Event Grid'den olay almanın birçok yolu arasında yer alır. Yeni bir olay hazır olduğunda Event Grid hizmeti, istek gövdesindeki olay bilgileriyle yapılandırılmış uç noktaya bir HTTP isteği oluşturur.

Web kancalarını destekleyen diğer birçok hizmet gibi Event Grid de web kancası uç noktanıza olay göndermeye başlamadan önce web kancası uç noktanızın sahipliğini kanıtlamanızı gerektirir. Bu gereksinim, kötü amaçlı bir kullanıcının uç noktanızı olaylarla dolup taşmasını önler.

Event Grid olaylarıyla uç nokta doğrulama

Aşağıdaki üç Azure hizmetlerinden herhangi birini kullandığınızda, Azure altyapısı bu doğrulamayı otomatik olarak işler:

HTTP tetikleyicisi tabanlı Azure işlevi gibi başka bir uç nokta türü kullanıyorsanız, uç nokta kodunuzun Event Grid ile doğrulama el sıkışmasına katılması gerekir. Event Grid, aboneliği doğrulamanın iki yolunu destekler.

  • Zaman uyumlu el sıkışması: Event Grid, olay aboneliği oluşturma sırasında uç noktanıza bir abonelik doğrulama olayı gönderir. Bu olayın şeması diğer Event Grid olaylarına benzer. Bu olayın veri bölümü bir validationCode özellik içerir. Uygulamanız doğrulama isteğinin beklenen bir olay aboneliği için olduğunu doğrular ve yanıttaki doğrulama kodunu zaman uyumlu olarak döndürür. Bu el sıkışma mekanizması tüm Event Grid sürümlerinde desteklenir.

  • Zaman uyumsuz el sıkışması: Bazı durumlarda yanıtta validationCode zaman uyumlu olarak döndüremezsiniz. Örneğin, Microsoft dışı bir hizmet (örneğin Zapier , IFTTT) kullanıyorsanız doğrulama koduyla program aracılığıyla yanıt veremezsiniz.

    Event Grid el ile doğrulama el sıkışmayı destekler. API sürüm 2018-05-01-preview veya üzerini kullanan bir SDK veya araçla olay aboneliği oluşturuyorsanız, Event Grid abonelik doğrulama olayının veri bölümüne bir validationUrl özellik gönderir. El sıkışmayı tamamlamak için olay verilerinde bu URL'yi bulun ve bir GET isteği yapın. REST istemcisini veya web tarayıcınızı kullanabilirsiniz.

    Sağlanan URL 10 dakika boyunca geçerlidir. Bu süre boyunca, olay aboneliğinin sağlama durumu olur AwaitingManualAction. El ile doğrulamayı 10 dakika içinde tamamlamazsanız, sağlama durumu olarak Failedayarlanır. El ile doğrulamaya başlamadan önce olay aboneliğini yeniden oluşturmanız gerekir.

    Bu kimlik doğrulama mekanizması, web kancası uç noktasının, doğrulama olayının POST değerinin el ile doğrulama moduna geçirilmeden önce kabul edilmiş olduğunu bilmesi için 200 http durum kodu döndürmesini de gerektirir. Başka bir deyişle, uç nokta 200 döndürür ancak zaman uyumlu olarak bir doğrulama yanıtını geri döndürmezse, mod el ile doğrulama moduna geçirilir. Doğrulama URL'sinde 10 dakika içinde bir GET varsa, doğrulama el sıkışmasının başarılı olduğu kabul edilir.

Not

Doğrulama için otomatik olarak imzalanan sertifikaların kullanılması desteklenmez. Bunun yerine ticari sertifika yetkilisinden (CA) imzalı bir sertifika kullanın.

Doğrulama ayrıntıları

  • Event Grid, olay aboneliği oluşturma/güncelleştirme sırasında hedef uç noktaya bir abonelik doğrulama olayı postalar.
  • Olay bir üst bilgi değeri aeg-event-type: SubscriptionValidationiçerir.
  • Olay gövdesi, diğer Event Grid olaylarıyla aynı şemaya sahiptir.
  • olayın eventType özelliği şeklindedir Microsoft.EventGrid.SubscriptionValidationEvent.
  • olayının data özelliği, rastgele oluşturulan dizeye validationCode sahip bir özellik içerir. Örneğin, validationCode: acb13….
  • Olay verileri, aboneliği el ile doğrulamak için URL'ye sahip bir özellik de içerir validationUrl .
  • Dizi yalnızca doğrulama olayını içerir. Doğrulama kodunu geri yankıladıktan sonra diğer olaylar ayrı bir istekte gönderilir.
  • Event Grid veri düzlemi SDK'ları, abonelik doğrulama olay verilerine ve abonelik doğrulama yanıtına karşılık gelen sınıflara sahiptir.

Aşağıdaki örnekte subscriptionValidationEvent örneği gösterilmiştir:

[
  {
    "id": "2d1781af-3a4c-4d7c-bd0c-e34b19da4e66",
    "topic": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "subject": "",
    "data": {
      "validationCode": "512d38b6-c7b8-40c8-89fe-f46f9e9622b6",
      "validationUrl": "https://rp-eastus2.eventgrid.azure.net:553/eventsubscriptions/myeventsub/validate?id=0000000000-0000-0000-0000-00000000000000&t=2022-10-28T04:23:35.1981776Z&apiVersion=2018-05-01-preview&token=1A1A1A1A"
    },
    "eventType": "Microsoft.EventGrid.SubscriptionValidationEvent",
    "eventTime": "2022-10-28T04:23:35.1981776Z",
    "metadataVersion": "1",
    "dataVersion": "1"
  }
]

Uç nokta sahipliğini kanıtlamak için, aşağıdaki örnekte gösterildiği gibi özelliğindeki validationResponse doğrulama kodunu tekrarlayın:

{
  "validationResponse": "512d38b6-c7b8-40c8-89fe-f46f9e9622b6"
}

Aşağıdaki adımlardan birini izleyin:

  • HTTP 200 Tamam yanıt durumu kodunu döndürmeniz gerekir. HTTP 202 Kabul Edildi geçerli bir Event Grid aboneliği doğrulama yanıtı olarak tanınmıyor. HTTP isteği 30 saniye içinde tamamlanmalıdır. İşlem 30 saniye içinde tamamlanmazsa işlem iptal edilir ve 5 saniye sonra yeniden başlatılır. Tüm denemeler başarısız olursa doğrulama el sıkışma hatası olarak değerlendirilir.

    Uygulamanızın doğrulama kodunu işlemeye ve döndürmeye hazır olması, olay aboneliğini oluşturduğunuzu ve olayı almayı beklediğinizi gösterir. El sıkışma doğrulamasının desteklenmediğini ve bir korsanın uygulama URL'nizi tanıması senaryosunu düşünün. Bilgisayar korsanı, uygulamanızın URL'siyle bir konu ve olay aboneliği oluşturabilir ve çok sayıda olay göndererek uygulamanıza bir DoS saldırısı gerçekleştirmeye başlayabilir. El sıkışma doğrulaması bunun olmasını önler.

    Kendi olay aboneliklerinizi oluşturduğunuz için doğrulamanın uygulamanızda zaten uygulandığını düşünün. Bir bilgisayar korsanı uygulama URL'nizle bir olay aboneliği oluştursa bile doğrulama isteği olayını doğru uygulamanız, bunun sizin tanıdığınız bir olay aboneliği olduğunu belirlemek için aeg-subscription-name istekteki üst bilgiyi denetler.

    Bu doğru el sıkışma uygulamasından sonra bile, bir bilgisayar korsanı Event Grid'den geliyor gibi görünen bir isteği çoğaltarak uygulamanızı (olay aboneliğini zaten doğrulamış) basabilir. Bunu önlemek için, Microsoft Entra kimlik doğrulaması ile web kancanızın güvenliğini sağlamalısınız. Daha fazla bilgi için bkz . Olayları Microsoft Entra korumalı uç noktalarına teslim etme.

  • Alternatif olarak, doğrulama URL'sine bir GET isteği göndererek aboneliği el ile de doğrulayabilirsiniz. Olay aboneliği doğrulanana kadar bekleme durumunda kalır. Doğrulama Url'si 553 numaralı bağlantı noktasını kullanır. Güvenlik duvarı kurallarınız 553 numaralı bağlantı noktasını engelliyorsa, el ile başarılı bir el sıkışması için kuralları güncelleştirmeniz gerekir.

    Abonelik doğrulama olayını doğruladığınızda, bunun olay beklediğiniz bir olay aboneliği olmadığını belirlerseniz 200 yanıt döndürmezsiniz veya hiç yanıt döndürmezsiniz. Bu nedenle doğrulama başarısız olur.

Abonelik doğrulama el sıkışmasını işleme örneği için bkz. C # örneği.

Olay aboneliği doğrulama sorunlarını gidermeyi öğrenmek için aşağıdaki makaleye bakın: Olay aboneliği doğrulama sorunlarını giderme.