我们在 APIM 中有一个验证 jwt 策略来验证 jwt 令牌。我们正在使用 azure.identity 库从我们的函数应用生成令牌。到目前为止,我们使用系统分配的身份使用以下方法生成令牌。
var tokenCredential = new DefaultAzureCredential();
var accessToken = await tokenCredential.GetTokenAsync(
new TokenRequestContext(scopes: new string[] { "https://management.azure.com" + "/.default" }) { });
令牌生成成功。我们能够成功验证策略中的令牌。下面是 APIM xml 策略。
<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">
<openid-config url="https://login.microsoftonline.com/tenantid/v2.0/.well-known/openid-configuration" />
<audiences>
<audience>https://management.azure.com</audience>
</audiences>
<issuers>
<issuer>https://sts.windows.net/tenantid/</issuer>
</issuers>
<required-claims>
<claim name="oid" match="any">
<value>objectid of the managed identity/system assigned</value>
</claim>
</required-claims>
</validate-jwt>
现在我们已经分配了用户管理的身份,并使用下面的代码将身份分配给了函数应用程序,我能够生成令牌,但在 APIM 中它抛出了奇怪的错误。
var azureServiceTokenProvider = new ManagedIdentityCredential(clientId: "client-id-of-managed-identity-id");
accessToken = await azureServiceTokenProvider.GetTokenAsync(new Azure.Core.TokenRequestContext(new[] { "https://management.azure.com" + "/.default" }));
APIM 告诉
“JWT 验证失败:IDX10501:签名验证失败。无法匹配密钥:\nkid:''。\n捕获的异常:\n ''。
关于如何克服这个问题的任何想法?