MS Graph API身份验证令牌不返回范围

时间:2017-02-27 08:47:55

标签: oauth-2.0 microsoft-graph

我对如何使用MS Graph API非常困惑。

我尝试将服务器端守护程序(webapp)记录到Azure中,然后在Office 365实例中访问OneDrive。

(1)我创建了一个具有Web app / API类型的应用Azure门户。然后我在Azure门户内部访问了它可以访问的所有权限。 (2)然后我进入MS应用程序控制台(apps.dev.microsoft.com)并在那里也访问它。为什么有两组权限? (3)还创建了密钥和密码。 (4)这就是我所做的事情(a)发送使用密钥/密码获取令牌的请求,(b)使用令牌与图终端进行通信。

首先它不起作用,但后来我给了应用程序一个管理员同意'它似乎有效。

问题是,如下所示,令牌上根本没有范围。在任何地方添加的所有权限似乎都没有提供范围?

Missing scope in token

Weirder是什么,我试图在O365中获得/驱动器,下面的resposne回来了。显然有一些驱动器,但据我所知,驱动器似乎没有所有者,据我所知,它们不是个人驱动器或共享驱动器。

mystery drives

注意: (a)我认为问题类似于one (b)为什么我需要同意'事情?我不希望用户被重定向,我只是希望我的服务器端应用程序能够将文件/文件夹保存到OneDrive。

有什么想法吗?这看起来像一个非常简单的用例,但ms图表的行为很奇怪。

有人可以告诉我这个过程是否正确,即(a)获得令牌,(b)使用令牌。这是否有另一个神奇的步骤,同意',如果是这样,它在哪里记录?

1 个答案:

答案 0 :(得分:2)

这里有一些不同的东西会增加混乱,但实际答案很简单。

(1)范围标记:如Shawn Tabrizi所述,access_token本身包含范围信息。来自MS的许多文档站点在返回的令牌中显示了一个distict范围字段。这(显然 - 找不到官方文件)不再是这种情况。 (2)要确定您是否为令牌提供了正确的范围,只需将access_token复制到JWT转换器中,例如calebb.net。也来自Shawn

(3)很多困惑是关于在何处以及如何提供正确的权限。 (a)在Azure门户中,转到Azure Active Directory并添加新的Web应用程序。我的用例特别是服务器端JS应用程序。应用注册面板中的第一行是在添加'添加'和' Endpoint'按钮说'要查看和管理融合应用程序的注册,请访问Microsoft应用程序控制台。'忽略这个。 (b)如果你点击它,它将带你进入MS的应用程序注册服务,这会增加一大堆混乱。只需坚持正常的Azure门户(新的花式门户),它将为您节省悲伤。 (c)有几个id,并且关于你应该使用什么的信息很少。假设您的用例与MS Graph API一起使用,则需要3件事。

  • tenantID:通过单击端点按钮并使用与OAuth令牌相关的端点来找到它。对我来说,它看起来像8alphanumric-4aphanumeric-4aphanumeric-4aphanumeric-12alphanumric。
  • 客户端ID:这是您的应用程序ID。所以你有一个显示名称(应用程序名称),应用程序ID(8-4-4-4-12 alphanumric)[这是你需要的客户端ID],应用程序类型(我的Web应用程序/ API)和对象ID(8) -4-4-4-12 alphanumric)[忽略这个]
  • 客户秘密:这是不明显的。单击所有设置。然后去钥匙。在这里,你将构成一把钥匙。给它任何名字(无关紧要),将持续时间设置为你需要的。单击“保存”时,它会为您提供一个键。这是您的客户秘密。不知道如果你创建超过1会发生什么。欣赏你可以有多个键的情绪,但我的用例不需要我调查。

(d)权限:文档显示了一些关于将权限放入应用程序中心的内容以及其他内容。堆栈溢出谈及同意'和管理员权限'。忽略大部分内容。

(e)您的应用已拥有Windows Azure Active Directory的权限。有两种权限,委托和应用程序。委托意味着(我认为)一个工作流程,用户在其<whatever>帐户中单独登录,恰好使用AD身份验证。

(f)对于作为我的用例的服务器端应用程序,您只需要应用程序权限。添加你需要的任何东西。

(g)现在在权限中添加API,在这种情况下为MS Graph。同样,我的用例意味着我只需要应用程序权限。

(h)同意怎么样?添加权限并点击保存后,点击“授予权限”#39;按钮旁边的按钮添加&#39;。您只需在更改后执行此操作。这是管理员授权应用程序同意其所需的所有权限的明确步骤。

(i)完成必需的权限后,转到属性。它组成了一个App Id URI,您需要单击“保存”。

在所有这些东西(仅一次)之后,应用程序应该可以正常工作。解析access_token,看看你是否拥有所有正确的权限。基本流程是获取令牌,并使用令牌执行任何操作。

请注意,图表中应用程序流的一半是狡猾的(目前)。功能非常好,但许多路由不适用于仅限app的访问,但适用于用户(委派)访问。阅读已知问题,了解在哪里。我对应用程序访问的用户和共享邮箱感到满意。目前(2017年3月1日),群组对webapp访问的支持非常糟糕。