graph.microsoft.com 的 API 管理 validate-jwt

问题描述 投票:0回答:1

我正在尝试做一些感觉应该“开箱即用”的事情。我的 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 时则不会抱怨。

关于为什么这不起作用或者我可能需要做什么来解决它有什么指导吗?

azure azure-active-directory jwt microsoft-graph-api azure-api-management
1个回答
0
投票
我已将

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>
我收到签名验证失败错误。

enter image description here

    我注意到,当您使用
  • graph.microsoft.com
     对其进行解码时,使用资源 
    jwt.io 生成的令牌在其标头中包含 nonce
    。因此,我们收到签名无效错误。

enter image description here

    但是,如果您使用范围作为 app_id_uri/.default 生成令牌,则其标头将不包含
  • nonce
  • 在我的研究过程中,我遇到了这个
  • Github问题,它说为了验证基于Graph API的令牌,由于nonce,我们需要特殊处理,并且不需要Graph令牌验证。
  • 为了为用户添加额外的安全级别,MsGraph 在 jwt 标头中添加了
  • nonce
我建议您在下面创建一个范围以用于您的应用程序,否则您可以与产品团队联系。

enter image description here

参考文献-

验证 - 验证 Azure 广告访问令牌时签名无效,但 id 令牌有效 - 堆栈内存溢出

© www.soinside.com 2019 - 2024. All rights reserved.