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

问题描述

我已经创建了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是定义清单的过程。

enter image description here

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

enter image description here

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

enter image description here

更新

仅对于应用程序许可,通常不建议使用ROPC流。建议您基于 v2.0 端点使用client credential flow。使用v2.0端点时,资源将不再用作参数,但作用域将用作参数,但是它们的功能相同。 (请注意,范围参数是这样的:api://a13b414b-93b3-4aae-bb-xxxxxxxxx/.default)。

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

enter image description here

enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...