我正在尝试做一些感觉应该“开箱即用”的事情。我的 SharePoint 网站上的用户已经通过 SSO 进行了身份验证,我正在启动客户端调用以代表他们获取图形 api 的访问令牌。该令牌将包含在对具有
validate-jwt
入站策略的 API 管理端点的调用中。
我想要做的就是确保令牌存在、有效并且是由我的 AAD 实例颁发的。其唯一目的是通过提供已通过身份验证的证据,将我的端点的呼叫者限制为我组织内的人员。当我调用后端并使用 APIM 托管身份进行身份验证时,我将放弃它。
我希望这是一个低摩擦的实现,因此我没有创建新的应用程序注册供用户进行身份验证以获取令牌。我的想法是 Graph API 令牌就足够了,人们已经可以访问它了。这是该政策的精简版本,感觉应该有效。
<validate-jwt header-name="Authorization" failed-validation-httpcode="403" failed-validation-error-message="Bad JWT" require-scheme="Bearer">
<openid-config url="https://login.microsoftonline.com/TENANT-ID-HERE/v2.0/.well-known/openid-configuration" />
<openid-config url="https://login.microsoftonline.com/TENANT-ID-HERE/.well-known/openid-configuration" />
</validate-jwt>
我在这里发帖,所以显然这是行不通的。我收到了
JWT Validation Failed: IDX10511
错误,该错误感觉具有误导性,因为只有当我的令牌用于图表时它才会失败。
例如,我可以使用 Azure CLI 获取默认资源 (management.core.windows.net) 的令牌,如下所示:
az account get-access-token
该令牌包含在 Postman 中的请求中时,会成功验证。
如果我将其更改为图表:
az account get-access-token --resource https://graph.microsoft.com/
突然 APIM
validate-jwt
策略开始失败,如上所述抱怨错误 IDX10511
这感觉像是一个特定于为图 api 生成的不记名令牌的问题。进行 jwt 验证的网站
jwt.io
在定位图表时也会抱怨令牌签名,但在定位 management.core.windows.net 时则不会抱怨。
关于为什么这不起作用或者我可能需要做什么来解决它有什么指导吗?
validate-jwt
用于
graph.microsoft.com
基于资源的令牌。
我使用的政策-
<policies>
<inbound>
<base />
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized" require-expiration-time="true" require-scheme="Bearer" require-signed-tokens="true">
<openid-config url="https://login.microsoftonline.com/{tenant_id}/v2.0/.well-known/openid-configuration" />
<audiences>
<audience>https://graph.microsoft.com/</audience>
</audiences>
<issuers>
<issuer>https://sts.windows.net/{tenant_id}/</issuer>
</issuers>
<required-claims>
<claim name="aud">
<value>https://graph.microsoft.com/</value>
</claim>
</required-claims>
</validate-jwt>
</inbound>
</policies>
我收到签名验证失败错误。
graph.microsoft.com
对其进行解码时,使用资源
jwt.io
生成的令牌在其标头中包含 nonce。因此,我们收到签名无效错误。
参考文献-