当使用Http触发器创建Azure函数以侦听Webhook时,我应该使用哪个授权级别?

q35jwt9p  于 2023-04-07  发布在  其他
关注(0)|答案(3)|浏览(93)

对于侦听Webhook的Azure函数,我需要什么授权级别?
在阅读MS文档时,我对是否需要定义匿名之外的授权级别感到有点困惑?
我看到有(管理员,匿名,功能,系统,用户)。
我的Http触发器将读取来自Stripe.com的webhook。
这是我的触发器:

public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
     var json = await new StreamReader(req.Body).ReadToEndAsync();
     var platformWebhookSecret = Environment.GetEnvironmentVariable("PlatformWebhookSecret");
     Event stripeEvent = EventUtility.ConstructEvent(json, req.Headers["Stripe-Signature"], platformWebhookSecret);
     // perform work...
}
whhtz7ly

whhtz7ly1#

正如你所看到的,你可以在创建Azure函数时使用以下3个授权级别:

我关注了Microsoft_document,它说:

函数用于只给予访问特定函数而不是整个应用程序,并且需要函数API密钥匿名不需要访问密钥
System由Azure Functions内部(后端)使用,它不是用于编写/开发Azure函数。而User用于当您想要为特定用户给予特定应用程序的特定访问权限时。我们需要提供User Specific API密钥。

我有点困惑,我是否需要定义一个授权级别,而不是匿名?
我建议你使用匿名,因为你正在使用webhooks(请求也可能来自第三方),否则你也可以使用函数,如果你正在使用,你需要给予函数API密钥。

7xzttuei

7xzttuei2#

根据Stripe文档,您需要为webhook提供一个匿名端点:
Webhook是您服务器上的一个端点,它接收来自Stripe的请求,通知您您帐户上发生的事件,例如客户对费用提出异议或成功的定期付款。在您的服务器上添加一个新端点,并确保它可以公开访问,以便我们可以发送未经身份验证的POST请求
这意味着你只需要为你的函数使用AuthorizationLevel.Anonymous
请注意,这允许其他人向您的函数发送请求,他们甚至可能模仿真实的Stripe事件,因此请确保通过validating the request data against Stripe进行防御:
Stripe可以通过在每个事件的Stripe-Signature标头中包含签名来对它发送到您的端点的webhook事件进行签名。这允许您验证事件是由Stripe发送的,而不是由第三方发送的。

sr4lhrrt

sr4lhrrt3#

使用Anonymous级别将允许任何知道你的函数的url的人使用他们喜欢的任何数据来调用它。现在,你可以通过要求Stripe签署其请求来防止这种情况,你可以验证其完整性。
拥有函数级身份验证级别将增加一层额外的安全性,并且只允许Stripe调用您的函数。一个缺点是,每当您重新生成函数密钥时,您也需要在Stripe配置中更新它。

相关问题