问题描述
我已经创建了Azure AD Mobile和桌面应用程序。现在,我使用以下API获取了access_token,
POST https://login.microsoftonline.com/{Directory(租户)ID } / oauth2 / token 密码:pass client_id:id 资源:https://graph.microsoft.com grant_type:密码 client_secret:秘密 用户名:userName 范围:openid
响应看起来像 “ access_token”:“ acessToken”, “ refresh_token”:“ refereshToken”, “ id_token”:“ id_token”。
现在,我将access_token传递给配置了相同Azure AD客户端的第三方应用程序。当该第三方应用程序尝试验证签名时,该操作将失败。 然后由于 nonce (仅适用于Microsoft图形API)而了解了它。现在如何删除它们或使我的access_token签名验证兼容?
解决方法
您需要创建另一个代表Web api的Azure AD应用程序,然后使用您的客户端应用程序调用 web api应用程序。
首先,您需要公开代表Web api的应用程序的api,可以按照以下过程进行配置:
Azure门户 应用程序注册> 公开API > 添加范围> 添加客户应用程序
接下来,您需要定义api应用程序的清单,并向客户端应用程序授予应用程序权限(这是您自己定义的角色权限,您可以在我的API 添加权限时
This是定义清单的过程。
这是授予客户端应用程序权限:
最后,您可以为您的api应用程序请求令牌(请注意, resource 参数不再是Microsoft Graph API,它是您的API应用程序的客户端ID和您在其中的自定义角色权限清单)。
更新:
仅对于应用程序许可,通常不建议使用ROPC流。建议您基于 v2.0 端点使用client credential flow。使用v2.0端点时,资源将不再用作参数,但作用域将用作参数,但是它们的功能相同。 (请注意,范围参数是这样的:api://a13b414b-93b3-4aae-bb-xxxxxxxxx/.default)。
解析令牌,您将看到自定义的应用角色。