使用 Webhook 集成验证来自 Google 广告潜在客户表单扩展的请求 Body 中收到的 API 订阅密钥的政策
Policy to validate API Subscription Key received in Request Body from Google Ads Lead Form Extension using Webhook integration
Azure API 管理在 Header 或查询中检查订阅密钥,但 Google Ads Lead Form 扩展在请求中发送密钥 body google_key
样本body:
{
"lead_id": "TeSter-123-ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-0123456789-AaBbCcDdEeFfGgHhIiJjKkLl",
"api_version": "1.0",
"form_id": 2,
"campaign_id": 281492028602095,
"google_key": "HERE IS THE KEY",
"is_test": true,
"gcl_id": "TeSter-123-ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-0123456789-AaBbCcDdEeFfGgHhIiJjKkLl",
"adgroup_id": 20000000000,
"creative_id": 30000000000
}
我们如何在 Azure API 管理中配置自定义策略以验证请求中的密钥 body?
Azure 中有 built-in 架构 API 管理来验证无法在 built-in 订阅验证之外访问的订阅密钥。
为了验证订阅,我在 Azure API 管理中创建了两个 API。 1 没有安全性,2 由订阅密钥保护并且有速率限制。
通过将密钥附加到请求 Header 并将其从请求中删除来重构请求 Body
<inbound>
<base />
<set-header name="google_key" exists-action="append">
<value>@{
var reqBody = context.Request.Body.As<JObject>(preserveContent: true);
if(reqBody.ContainsKey("google_key"))
{
return reqBody.GetValue("google_key").ToString();
}
else
{
return "";
}
}</value>
</set-header>
<set-body template="none">@{
var reqBody = context.Request.Body.As<JObject>(preserveContent: true);
if(reqBody.ContainsKey("google_key"))
{
reqBody.Remove("google_key");
}
return JsonConvert.SerializeObject(reqBody);
}</set-body>
-
Azure API 管理在 Header 或查询中检查订阅密钥,但 Google Ads Lead Form 扩展在请求中发送密钥 body google_key
样本body:
{
"lead_id": "TeSter-123-ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-0123456789-AaBbCcDdEeFfGgHhIiJjKkLl",
"api_version": "1.0",
"form_id": 2,
"campaign_id": 281492028602095,
"google_key": "HERE IS THE KEY",
"is_test": true,
"gcl_id": "TeSter-123-ABCDEFGHIJKLMNOPQRSTUVWXYZ-abcdefghijklmnopqrstuvwxyz-0123456789-AaBbCcDdEeFfGgHhIiJjKkLl",
"adgroup_id": 20000000000,
"creative_id": 30000000000
}
我们如何在 Azure API 管理中配置自定义策略以验证请求中的密钥 body?
Azure 中有 built-in 架构 API 管理来验证无法在 built-in 订阅验证之外访问的订阅密钥。
为了验证订阅,我在 Azure API 管理中创建了两个 API。 1 没有安全性,2 由订阅密钥保护并且有速率限制。
通过将密钥附加到请求 Header 并将其从请求中删除来重构请求 Body
<inbound> <base /> <set-header name="google_key" exists-action="append"> <value>@{ var reqBody = context.Request.Body.As<JObject>(preserveContent: true); if(reqBody.ContainsKey("google_key")) { return reqBody.GetValue("google_key").ToString(); } else { return ""; } }</value> </set-header> <set-body template="none">@{ var reqBody = context.Request.Body.As<JObject>(preserveContent: true); if(reqBody.ContainsKey("google_key")) { reqBody.Remove("google_key"); } return JsonConvert.SerializeObject(reqBody); }</set-body>