如何使 Azure AD access_token 符合其在 Microsoft Graph API 之外的签名验证?

How to make Azure AD access_token compliant for its signature validation outside Microsoft Graph APIs?

我已经创建了 Azure AD 移动和桌面应用程序。现在我正在使用以下 API、

获取我的 access_token

POST https://login.microsoftonline.com/{Directory(租户)ID }/oauth2/token password:pass client_id:id 资源:https://graph.microsoft.com grant_type:password client_secret:secret username:userName 范围:openid

响应看起来像, "access_token": "acessToken", "refresh_token": "refereshToken", "id_token": "id_token".

现在我将 access_token 传递给配置有相同 Azure AD 客户端的第三方应用程序。当该第三方应用程序尝试验证签名时,操作失败。 然后因为 nonce 才知道它仅适用于 Microsoft graph APIs。现在如何删除相同的或使我的 access_token 签名验证兼容?

您需要创建另一个代表 Web api 的 Azure AD 应用程序,然后使用您的 客户端应用程序 调用 web api申请.

首先需要暴露代表web的应用apiapi,可以按照以下流程进行配置:

Azure 门户>应用注册>公开API>添加范围>添加客户端应用程序

接下来需要定义api个应用的manifest,并为你的客户端应用赋予应用权限(这个是你自己定义的角色权限,你可以添加权限后在我的APIs中找到)

是定义manifest的过程。

这是为客户端应用程序授予权限:

最后,您可以为您的 api 应用程序请求令牌(请注意 resource 参数不再是 Microsoft Graph API,它是API 应用程序的客户端 ID 和清单中的自定义角色权限)。

更新:

仅针对应用权限,一般不推荐ROPC流程。建议您使用基于v2.0端点的client credential flow。使用v2.0端点时,不再使用resources作为参数,而是使用scope作为参数,但它们的功能是一样的. (请注意范围参数类似于 this:api://a13b414b-93b3-4aae-bb-xxxxxxxxx/.default)。

解析令牌,您将看到自定义的 app 角色