我在Azure工作,我们的Web应用程序用请求调用APIM,然后APIM调用WebApi来完成请求。
当我们试图调用其中一个API设置时,我们遇到了500个错误,当深入到浏览器中的错误(下面是"错误消息"((Inspect->Network(时,它显示了来自为apim(一个产品public.policy.xml(设置的验证jwt策略的错误消息:
<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中进行了测试,得到了以下消息:{"代码":"401〃;,"类型":"AAD授权";,"消息":"未提供访问资源的令牌&";,"developerMessage":"丢失或格式不正确的访问令牌";,"moreInfo":无效的}
这让我更加相信问题出在颁发者签名密钥上。
我的问题是,从哪里获得颁发者签名密钥在网上和文档中找不到太多帮助。
第二个问题是,假设我得到了密钥,我是否必须将其转换为base64,然后将其粘贴到当前显示"的位置;Base64编码密钥">
您可以从openID端点获取颁发者签名密钥。我相信你不用担心这个。如果您为APIM提供开放id端点(正如您正在做的那样(,APIM将自动执行此操作。下面的AD样本证实了这一点。您应该删除与颁发者相关的块。我仍然会进行实验/验证。
https://learn.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#ValidateJWT