【发布时间】: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