Azure:如何为validate-jwt策略检索颁发者签名密钥?

问题描述

我在Azure中工作,我们的Web应用程序通过请求调用APIM,然后APIM调用WebApi来满足请求。

当我们尝试调用一个设置的API时,我们遇到500错误,并且当在浏览器中向下钻取错误时(下面是“错误消息”)(检查->网络),它显示错误消息来自为API设置的validate-jwt策略(product-public.policy.xml):

<policies>
  <inbound>
    <base />
    <validate-jwt header-name="Authorization" Failed-validation-httpcode="401" Failed-validation-error-message="Error message" require-expiration-time="true" require-scheme="Bearer" require-signed-tokens="true">
      <openid-config url="{{validauthorityissuer}}/.well-kNown/openid-configuration" />
      <issuer-signing-keys>
        <key>Base64 Encoded Key</key>
      </issuer-signing-keys>
      <audiences>
        <audience>{{WebAppId}}</audience>
      </audiences>
      <issuers>
        <issuer>{{validauthorityissuer}}</issuer>
      </issuers>
    </validate-jwt>
  </inbound>

乍一看,似乎是问题的颁发者签名密钥,因为它看起来只是一个占位符字符串。

为确认这可能是导致问题的原因,我在APIM中进行了测试,并收到以下消息: { “ code”:“ 401”, “ type”:“ AAD授权”, “ message”:“未提供访问资源的令牌。”, “ developerMessage”:“缺少或格式错误的访问令牌”, “ moreInfo”:null }

这使我更加相信问题出在发行人签名密钥上。

我的问题是,我从哪里获得发行人的签名密钥?尚未在线或通过文档找到太多帮助。

第二个问题是,假设我得到了密钥,是否必须将其转换为base64,然后将其粘贴到当前显示“ Base64 Encoded Key”的位置?

解决方法

您可以从openID端点获取发行者签名密钥。我相信您不必为此担心。如果您为APIM提供开放ID端点(如您所做的那样),APIM将自动执行此操作。下面的AD示例证实了这一点。您应该删除与发行人相关的块。我仍然会进行实验/验证。

https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#ValidateJWT