如何使 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 角色。
我已经创建了 Azure AD 移动和桌面应用程序。现在我正在使用以下 API、
获取我的 access_tokenPOST 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中找到)
这是为客户端应用程序授予权限:
最后,您可以为您的 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 角色。