Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 事件网格订阅不严格要求验证?_Azure_Azure Eventgrid - Fatal编程技术网

Azure 事件网格订阅不严格要求验证?

Azure 事件网格订阅不严格要求验证?,azure,azure-eventgrid,Azure,Azure Eventgrid,Azure事件网格的 您的应用程序需要通过回显验证代码进行响应。事件网格不会向未通过验证的WebHook端点传递事件 我创建了我的WebHook Azure函数,它只是OK的任何POST请求,没有验证代码。尽管如此,我仍然可以看到发送到此端点的自定义事件 为什么在这种情况下不严格要求验证?Azure函数的令牌交换在幕后进行,因此您不需要回显验证代码。这同样适用于逻辑应用程序。如果您使用基于“事件网格触发器”的Azure函数作为事件订阅目标,订阅验证将自动处理。从2018-01-01 API版本开

Azure事件网格的

您的应用程序需要通过回显验证代码进行响应。事件网格不会向未通过验证的WebHook端点传递事件

我创建了我的WebHook Azure函数,它只是OK的任何POST请求,没有验证代码。尽管如此,我仍然可以看到发送到此端点的自定义事件


为什么在这种情况下不严格要求验证?

Azure函数的令牌交换在幕后进行,因此您不需要回显验证代码。这同样适用于逻辑应用程序。

如果您使用基于“事件网格触发器”的Azure函数作为事件订阅目标,订阅验证将自动处理。从2018-01-01 API版本开始,如果您使用的是基于“HTTP触发器”的函数(作为事件订阅创建期间的目标端点),则需要在代码中处理此验证。这记录在

下面是一些C#中的示例代码:

步骤1:向Microsoft.Azure.EventGrid添加依赖项: 为此,请单击Azure函数中的“查看文件”链接(Azure函数门户中最右侧的窗格),并创建一个名为project.json的文件。将以下内容添加到project.json文件并保存:

{
    "frameworks": {
        "net46": {
            "dependencies": {
               "Microsoft.Azure.EventGrid": "1.1.0-preview"
             }
         }
     }
}
步骤2:处理订阅验证事件:

using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using Microsoft.Azure.EventGrid.Models;

class SubscriptionValidationEventData
{
    public string ValidationCode { get; set; }
}

class SubscriptionValidationResponseData
{
    public string ValidationResponse { get; set; }
}

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,  TraceWriter log)
{
    string response = string.Empty;
    const string SubscriptionValidationEvent  = "Microsoft.EventGrid.SubscriptionValidationEvent";

    string requestContent = await req.Content.ReadAsStringAsync();
    EventGridEvent[] eventGridEvents = JsonConvert.DeserializeObject<EventGridEvent[]>(requestContent);

    foreach (EventGridEvent eventGridEvent in eventGridEvents)
    {
        JObject dataObject = eventGridEvent.Data as JObject;

        // Deserialize the event data into the appropriate type based on event type
        if (string.Equals(eventGridEvent.EventType, SubscriptionValidationEvent, StringComparison.OrdinalIgnoreCase))
        {
            var eventData = dataObject.ToObject<SubscriptionValidationEventData>();
            log.Info($"Got SubscriptionValidation event data, validation code {eventData.ValidationCode}, topic={eventGridEvent.Topic}");
            // Do any additional validation (as required) and then return back the below response
            var responseData = new SubscriptionValidationResponseData();
            responseData.ValidationResponse = eventData.ValidationCode;
            return req.CreateResponse(HttpStatusCode.OK, responseData);   
        }            
    }

    return req.CreateResponse(HttpStatusCode.OK, response);    
}
使用System.Net;
使用Newtonsoft.Json;
使用Newtonsoft.Json.Linq;
使用Newtonsoft.Json.Serialization;
使用Microsoft.Azure.EventGrid.Models;
类SubscriptionValidationEventData
{
公共字符串验证代码{get;set;}
}
类SubscriptionValidationResponseData
{
公共字符串验证响应{get;set;}
}
公共静态异步任务运行(HttpRequestMessage请求、TraceWriter日志)
{
字符串响应=string.Empty;
常量字符串SubscriptionValidationEvent=“Microsoft.EventGrid.SubscriptionValidationEvent”;
string requestContent=wait req.Content.ReadAsStringAsync();
EventGridEvent[]eventGridEvents=JsonConvert.DeserializeObject(requestContent);
foreach(eventGridEvents中的EventGridEvent)
{
JObject dataObject=eventGridEvent.Data作为JObject;
//根据事件类型将事件数据反序列化为适当的类型
if(string.Equals(eventGridEvent.EventType、SubscriptionValidationEvent、StringComparison.OrdinalIgnoreCase))
{
var eventData=dataObject.ToObject();
log.Info($“获取了SubscriptionValidation事件数据,验证代码{eventData.ValidationCode},主题={eventGridEvent.topic}”);
//执行任何附加验证(根据需要),然后返回以下响应
var responseData=新的SubscriptionValidationResponseData();
responseData.ValidationResponse=eventData.ValidationCode;
返回请求CreateResponse(HttpStatusCode.OK,responseData);
}            
}
返回请求CreateResponse(HttpStatusCode.OK,response);
}

您是否正在使用requestb.in测试此功能?还是自定义端点?@PacodelaCruz这是自定义端点。我不需要申请B.in来测试。只需创建一个azure函数,将其添加为订阅端点并记录所有传入的请求。产品团队告诉我,我应该只期望requestb.in as上的行为被列入白名单。这可能是因为它是预览版。他们知道目前的方法很麻烦,并正在努力改进。有关于如何工作的文档吗?如果我将事件网格指向另一个订阅中的函数会怎么样?它与另一个订阅(刚刚测试)中的函数一起工作。目前还没有关于这方面的任何文档。我可以在地球上实现DDoS功能吗?没有,因为有节流和重试机制可以避免这种情况。订户(函数)还需要确认来自网格的请求。见: