APIM使用validate-jwt校验用户托管标识JWT报IDX10501如何解决
问题解决步骤
根因说明
该报错是APIM的JWT校验配置和用户托管标识生成的令牌属性不匹配导致,核心问题集中在颁发者配置不一致、签名密钥拉取端点不匹配、声明校验值未更新三类。
修复步骤
1. 先确认令牌实际属性
把用户托管标识生成的JWT令牌拷贝到本地解析,确认以下字段值:
iss(颁发者):判断是v1版本https://sts.windows.net/{你的租户ID}/还是v2版本https://login.microsoftonline.com/{你的租户ID}/v2.0aud(受众):确认值为https://management.azure.comoid(对象ID):确认是用户托管标识的对象ID(注意不是客户端ID)- 头部的
kid字段:确认是否有有效值
2. 修正APIM validate-jwt策略
你当前策略存在OpenID配置端点和颁发者不匹配的问题,请按解析出来的令牌属性对齐配置:
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Invalid or Expired token" require-expiration-time="true" require-signed-tokens="true"> <!-- 若令牌iss是v1版本,就用v1的OpenID配置地址,否则保持v2地址 --> <openid-config url="https://login.microsoftonline.com/{你的租户ID}/.well-known/openid-configuration" /> <audiences> <audience>https://management.azure.com</audience> </audiences> <issuers> <!-- 此处填你解析出来的iss字段的完整值,和令牌完全一致 --> <issuer>https://sts.windows.net/{你的租户ID}/</issuer> </issuers> <required-claims> <claim name="oid" match="any"> <!-- 替换为你用户托管标识的对象ID,不是原来的系统托管标识ID --> <value>{用户托管标识的对象ID}</value> </claim> </required-claims> </validate-jwt>
3. 修复令牌生成逻辑异常
如果修正策略后仍报kid为空的错误,升级你函数应用引用的Azure.Identity NuGet包到最新稳定版,旧版本包存在用户托管标识生成令牌头部信息缺失的已知问题。
验证
修改完成后重新请求,令牌即可正常通过APIM校验。
内容的提问来源于stack exchange,提问作者prakashrajansakthivel
相关产品推荐
相关产品推荐

