Azure API管理-动态删除所有响应标头

zmeyuzjn  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(116)

在Azure API管理策略中,我希望清理后端系统发送的响应标头(以防止数据泄漏)。我不想硬编码正在由后端系统发送的每个当前标头名称,因为这不会考虑将来可能由新版本的软件添加的新标头,并且我们还必须为所有操作执行此操作,测试每个操作,捕获标头,然后更新策略。
理想情况下,我想设置一个允许的头部列表(每个API操作),并删除其余部分。
我已经尝试了很多方法,但是set-header策略不允许传递多个名称(我一度认为它可能需要一个逗号分隔的列表),并且似乎没有像for-each这样的循环策略来支持多次运行set-header。
我是不是缺少了什么让我能够做到这一点?是否可以通过政策表述等方式做到这一点?
谢了,杰森

cnh2zyt3

cnh2zyt31#

目前还没有好的方法来实现这一点,但有一个黑客:

<retry condition="@(context.Response.Headers.Keys.Any(k => !(new[] {"allowed-header-1", "allowed-header-2"}.Contains(k, StringComparer.InvariantCultureIgnoreCase))))" count="50" interval="0">
    <set-variable name="headerName" value="@(context.Response.Headers.Keys.First(k => !(new[] {"allow-header-1", "allow-header-2"}.Contains(k, StringComparer.InvariantCultureIgnoreCase))))" />
    <set-header name="@((string)context.Variables["headerName"])" exists-action="delete" />
</retry>

字符串
简而言之,只要有不允许的头,重试策略就会保持重试。在它里面,你将第一个不允许的头放入一个变量中,并通过set-header策略删除它。

相关问题