You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求针对Azure API-Management网关的X-CSRF模式实现文档

针对Azure API Management网关本身的X-CSRF实现说明

目前Azure API Management(APIM)本身没有专门针对自身网关的独立X-CSRF令牌生成与验证官方文档,但可通过APIM内置策略组合实现X-CSRF保护机制,核心实现思路如下:

  • 生成并返回CSRF令牌:
    客户端首次发起GET/HEAD等安全请求时,结合<generate-random-string>或Guid生成随机令牌,将令牌存入APIM缓存或客户端Cookie,同时在响应头返回该令牌。

  • 验证CSRF令牌:
    针对POST/PUT/DELETE等修改类请求,通过<choose>条件判断配合变量取值,检查请求头中的CSRF令牌是否与缓存或Cookie中的令牌一致,不一致则直接返回403拒绝请求。

  • 核心策略示例:
    生成令牌的策略片段:

    <choose>
        <when condition="@(context.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase))">
            <set-variable name="csrfToken" value="@(Guid.NewGuid().ToString())" />
            <set-header name="X-CSRF-Token" exists-action="override">
                <value>@((string)context.Variables["csrfToken"])</value>
            </set-header>
            <set-cookie name="X-CSRF-Token" exists-action="override">
                <value>@((string)context.Variables["csrfToken"])</value>
                <path>/</path>
                <secure>true</secure>
                <http-only>false</http-only>
            </set-cookie>
        </when>
    </choose>
    

    验证令牌的策略片段:

    <choose>
        <when condition="@(!context.Request.Method.Equals("GET", StringComparison.OrdinalIgnoreCase) && !context.Request.Method.Equals("HEAD", StringComparison.OrdinalIgnoreCase))">
            <set-variable name="requestCsrfToken" value="@(context.Request.Headers.GetValueOrDefault("X-CSRF-Token", ""))" />
            <set-variable name="cookieCsrfToken" value="@(context.Request.Cookies.GetValueOrDefault("X-CSRF-Token", ""))" />
            <choose>
                <when condition="@(!string.Equals((string)context.Variables["requestCsrfToken"], (string)context.Variables["cookieCsrfToken"], StringComparison.OrdinalIgnoreCase))">
                    <return-response>
                        <set-status code="403" reason="Forbidden" />
                        <set-body>Invalid CSRF token</set-body>
                    </return-response>
                </when>
            </choose>
        </when>
    </choose>
    

实际落地时需根据业务场景调整,比如令牌存储方式(可改用APIM外部缓存)、过期时间设置等。

内容的提问来源于stack exchange,提问作者chaitanya kumar Dondapati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:30:55