【问题标题】:Authorization request to get access on behalf of a user results in a 'cookiesDisabled' page代表用户获取访问权限的授权请求会导致“cookiesDisabled”页面
【发布时间】:2020-03-09 14:36:44
【问题描述】:

我正在尝试按照 Microsoft 上的相关文档进行授权请求(代表用户获取访问权限:https://docs.microsoft.com/en-us/graph/auth-v2-user)。我正在使用 Azure 的逻辑应用程序发出请求。我已经在 Azure AD 中注册了一个应用程序,并为其授予了以下权限(我之前将该应用程序用于几个不同的请求,因此它包含许多不必要的 api 权限)。我已经成功地在没有用户的情况下获得了访问权限 (https://docs.microsoft.com/en-us/graph/auth-v2-service)。现在我真的不知道我做错了什么,所以如果有人知道它是什么,请告诉我。我将尝试使用屏幕截图尽可能仔细地解释,以便你们了解我要做什么。

在下面的第一个屏幕上,您可以看到我添加到我的应用注册中的 api 权限。对于这个请求,我只要求对旁边带有箭头的请求进行授权(稍后您会看到)。

在第二个屏幕上,您可以看到我尝试向授权端点发出的 HTTP 发布请求。出于隐私原因,我模糊了 Tenant 和 Client_id。我只在正文中添加了 Microsoft 描述的所需参数。在 scope 参数中可以看到我请求的 api 权限。

在第三个屏幕截图中,您可以看到请求的输出。我没有按要求获得授权码,而是获得了 HTML 正文。

当我将该 HTML 正文粘贴到浏览器中时,它会给我以下结果:

我不知道我做错了什么。我检查了三倍以确保启用 cookie,确保未禁用第三方 cookie,并将 login.microsoftonline 添加到我信任的网站。

我开始认为我做错了一些非常简单的事情,但我无法弄清楚到底是什么。欢迎任何帮助! :D

【问题讨论】:

    标签: azure-active-directory httprequest microsoft-graph-api azure-logic-apps azure-ad-graph-api


    【解决方案1】:

    抱歉无法添加评论,所以发布为答案

    您尝试实现的是 OAUTH 2.0 的授权码授予流程。在授权代码授予流程中,发生以下步骤 1) 向用户展示应用程序在访问某些资源时所需的范围, 2) 用户授权。并且用户被重定向到重定向 url 3) 应用程序然后交换与重定向 url 一起发送的代码以获取实际令牌,在这种情况下,该令牌将被发送到 Microsoft Graph 进行验证。 4) 用户随后会看到提取的信息。

    授权代码授权流程的主要症结在于“需要用户授权”这基本上意味着当从用户实际交互的浏览器客户端调用调用时使用此流程。此流不应通过 Azure 逻辑应用。如果您希望服务或守护程序在这种情况下访问资源,您应该使用客户端凭据授予流程

    【讨论】:

    • 这是正确的。您不能在逻辑应用中使用交互式流。如果我没记错的话,您可以通过选择对 HTTP 请求块使用 AAD 身份验证来授权逻辑应用代表您执行操作。您还可以使用托管身份在应用程序中调用没有凭据的 API。不过,为托管标识分配权限范围从简单到 PowerShell。
    • 如果我理解正确(并且根据 OAUTH 2.0 授权框架,授权代码授予流程的步骤 4.1 和客户端凭据授予流程的步骤 4.4:link),我必须立即进行访问令牌请求?但这是否允许我使用委托权限?因为我想尝试委托权限(我认为这等于这样做:link)而不是应用程序权限(这样做:link)。
    • 例如,如果我想使用这个 API:https://graph.microsoft.com/v1.0/me/drive/root:/Test1/book.xlsx,它永远无法工作,而我在 Azure 上签名的用户与我在 OneDrive 上登录的用户相同。同时,这样做:https://graph.microsoft.com/v1.0/users/8951924ub-65851-559ce5-585fefef/drive/root:/Test1/book.xlsx/users 后面的 Azure AD 用户 ID 是我登录的用户的用户 ID,因此与 /me 相同,可以正常工作。这是因为/me 需要委托权限吗?
    • 你能在这里分享一下具体的要求吗?也许我们可以分享一个更合适的答案
    • 我的任务是从当前用户(登录用户)的 OneDrive 上的文件夹中的表中读取行,并且我不应该使用 Microsoft 制造的连接器,例如本例中的 OneDrive 连接器。所以我想要这个https://graph.microsoft.com/v1.0/me/drive/root:/Test1/book.xlsx HTTP GET 请求首先向我返回有关 xlsx 文件的元数据。遗憾的是,我不知道如何才能使/me 可用(从逻辑应用程序中)。
    猜你喜欢
    • 2013-10-15
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    相关资源
    最近更新 更多