【问题标题】:403 error when trying to GET https://graph.microsoft.com/v1.0/me in Power Automate Flow尝试在 Power Automate Flow 中获取 https://graph.microsoft.com/v1.0/me 时出现 403 错误
【发布时间】:2021-09-14 22:58:32
【问题描述】:

我正在尝试通过 Power Automate Flow 访问 Microsoft Graph API。

我在 Azure AD 中创建了一个“应用注册”,并设置了我认为应该是我正在尝试的 GET 请求所需的 API 权限。

在 Power Automate 中,我使用的方法是生成访问令牌,然后将其传递到后续请求的标头中。

它可以正常生成访问令牌,但在尝试 GET 时会产生 403 错误:

 https://graph.microsoft.com/v1.0/me

我已经研究了几个小时,遇到了一些建议去https://jwt.ms 并粘贴访问令牌,但是当我这样做时,我不知道我应该寻找什么。

运行手动触发流时出错:

操作“HTTP”失败

权限不足,无法完成操作。

状态码:403

Azure AD 中的 API 权限

Here are the docs 指定相关GET请求需要哪些权限,即:

Delegated (work or school account)  User.Read, User.ReadWrite, User.ReadBasic.All, User.Read.All, User.ReadWrite.All, Directory.Read.All, Directory.ReadWrite.All, Directory.AccessAsUser.All

Power Automate Flow 中的身份验证

Power Automate Flow 中的请求

以上屏幕截图中的文本值如下,以防有人想尝试和复制:

HTTP 身份验证请求:

https://login.microsoftonline.com/@{variables('tenant_id')}/oauth2/token

Content-Type   application/x-www-form-urlencoded

client_id=@{variables('application_id')}&client_secret=@{variables('secret_value')}&resource=https://graph.microsoft.com&grant_type=client_credentials

HTTP GET 请求:

URI:  https://graph.microsoft.com/v1.0/me

Authorization     Bearer @{body('Parse_JSON')?['access_token']} 

更新:

我不知道这是否是正确答案,但我认为 Power Automate 可能需要 Application 权限,而不是 Azure 应用注册区域中的 Delegate 权限。

以下研究使我得出这个结论:

01) https://www.youtube.com/watch?v=VJWFzdy2c4E&t=242s
他添加了Application 权限而不是Delegate 权限

02)

您正在通过机密客户端流程获取令牌,这意味着您没有在用户的上下文中运行。因此,您不应该使用 /me 端点,而是 /users/objectID one...或者通过一些委托权限流获取令牌。 Source

因此我更改为Application 权限,调用了这个端点,它工作正常:

https://graph.microsoft.com/v1.0/users   

Application 权限是否是从 Power Automate 访问 Microsoft Graph 时最好的(或唯一的?)方法,我不知道(可能是我用来验证的方法强制使用 @ 987654342@ 权限?)。我有点喜欢确保 Flow 只执行允许触发 Flow 的用户执行的操作的想法。但是,嗯,至少在一天结束时有些东西在起作用。

【问题讨论】:

  • 当您调用/me 端点时,您是在询问登录用户的详细信息。您是否在任何时候看到过 AAD 登录屏幕?如果没有,那意味着你没有登录

标签: microsoft-graph-api power-automate


【解决方案1】:

您正在使用Client Credential Flow,这需要应用程序权限 aka 没有登录用户。客户端凭据流用于不需要用户交互的任务,如服务器端应用程序、恶魔、后台任务(如电源自动化)。

使用从客户端凭据流获取的令牌,您不能调用 /me/.. 因为这些端点需要登录用户,正如 @hong-ooi 指出的那样 - 解释了 403

在您的情况下,您需要添加应用程序权限而不是委派,然后调用 GET https://graph.microsoft.com/v1.0/{userId | unpn} 而不是 GET https://graph.microsoft.com/v1.0/me。注意 /me 转换为 /user/{userId | unpn} 为您服务。

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2016-04-19
    • 2021-09-22
    相关资源
    最近更新 更多