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

Azure APIM:令牌验证失败时不返回错误的实现方法

如何让Validate-JWT策略验证失败时不返回错误并继续执行后续逻辑

问题描述

当前使用Validate-JWT策略验证令牌,配置代码如下:

<validate-jwt token-value="@((string)context.Variables["access_token"])"
          failed-validation-httpcode="401"
          failed-validation-error-message="Access token is invalid"
          output-token-variable-name="jwt-token">
    <openid-config url="{{well-known-url}}" />
</validate-jwt>

希望令牌验证失败时不直接返回401错误,而是继续执行策略的其他分支(例如设置验证状态变量为false,后续通过<choose>分支处理),询问是否可行及实现方式。

可行方案:使用Try-Catch策略包裹Validate-JWT

Validate-JWT默认在验证失败时会终止请求并返回配置的错误响应,要避免这种行为,可以用<try>和<catch>策略块包裹Validate-JWT,捕获验证失败的错误后,自定义后续逻辑而不直接返回错误。

具体配置示例

<!-- 初始化验证状态变量为true -->
<set-variable name="jwt_valid" value="@(true)" />

<try>
    <validate-jwt token-value="@((string)context.Variables["access_token"])"
              failed-validation-httpcode="401"
              failed-validation-error-message="Access token is invalid"
              output-token-variable-name="jwt-token">
        <openid-config url="{{well-known-url}}" />
    </validate-jwt>
</try>
<catch>
    <!-- 验证失败时将状态变量设为false -->
    <set-variable name="jwt_valid" value="@(false)" />
    <!-- 可选:清除默认的错误响应,避免返回给客户端 -->
    <set-header name="Content-Type" exists-action="delete" />
    <set-body>@("")</set-body>
</catch>

<!-- 后续用Choose分支根据验证状态处理逻辑 -->
<choose>
    <when condition="@((bool)context.Variables["jwt_valid"])">
        <!-- 验证通过时执行的逻辑 -->
        <set-variable name="auth_status" value="@("Authenticated")" />
    </when>
    <otherwise>
        <!-- 验证失败时执行的逻辑 -->
        <set-variable name="auth_status" value="@("Unauthenticated")" />
        <!-- 这里可以添加自定义处理,比如放行到特定后端或添加标识头 -->
        <set-header name="X-Auth-Status" exists-action="override">
            <value>Unauthenticated</value>
        </set-header>
    </otherwise>
</choose>

关键说明

  • <try>块中放置原Validate-JWT策略,验证成功时会正常执行后续逻辑,jwt_valid保持为true。
  • <catch>块会捕获Validate-JWT抛出的验证错误,在这里将jwt_valid设为false,同时可以清除默认的错误响应内容,避免将401错误返回给客户端。
  • 后续通过<choose>分支根据jwt_valid变量的值,分别处理验证通过和失败的逻辑,完全自定义后续流程。

内容的提问来源于stack exchange,提问作者tpschmidt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 07:18:20