5

我一直在使用这个:

https://github.com/Azure-Samples/active-directory-php-graphapi-web.git

访问有效的图形 api。我的 azure AD 注册应用程序能够查询 API 以获取目录中的用户列表。

但现在我想为目录中的用户列出文件夹。这一页

http://graph.microsoft.io/docs

说网址应该是:

https://graph.microsoft.com/v1.0/me/drive/root/children

当我在 REST 调用中使用该 url 时,我得到

"code": "InvalidAuthenticationToken",
"message": "CompactToken parsing failed with error code: -2147184105"

有道理,它得到了一个令牌

https://graph.windows.net

所以,我迷路了。API 有很多不同的版本,从消费级 onedrive(以前称为 skydrive)、第一个图形 api(我通过https://graph.windows.net访问)、office 365 API(我通过https 访问: //login.microsoftonline.com)和现在的图形 api(以前的通用 api https://graph.microsoft.com)我只是不知道从哪里开始寻找正确的信息。

我目前正在使用 PHP,我确信在微软支持的平台列表中这将是相当低的,但是关于访问令牌生成如何在最新 api 与 o365 api 与其他图表中的工作方式的任何方向api(在graph.windows.net)将不胜感激。

有没有人和我一样迷茫?是否有一些中心参考资料解释了这些 api 之间的所有差异以及如何访问它们?

4

3 回答 3

4

Microsoft Graph 应为您提供一个端点(和令牌获取)来访问 Office 365 和 Azure AD 服务提供的数据。请访问https://graph.microsoft.com了解更多详细信息 - 但请使用 v1.0 版本,因为这是适用于生产服务的 GA 版本。

至于您关于没有用户 UI 的服务应用程序的问题 - 您可以使用 client_credential 流获取仅限应用程序的访问令牌。(这在 Microsoft Graph 文档中目前没有记录,但它在其他地方得到支持和描述- 只需将资源设置为https://graph.microsoft.com/)。在 Azure 管理门户中,您还需要选择您的应用程序也需要的“应用程序权限”。目前支持仅应用程序访问邮件资源,但不支持仅应用程序访问一个驱动器资源(通过 Microsoft graph)。我们将尽快开放它。

希望这可以帮助,

于 2015-11-22T01:53:59.130 回答
3

端点https://login.microsoftonline.com是 Azure AD 授权端点,它为用户登录和验证并获取授权码提供 SSO 页面。

其他类似https://graph.microsoft.com的是基于 REST API 构建并提供来自 Microsoft 的资源和服务的资源端点。

具体来说,对于端点https://graph.windows.net,官方网站上的解释是:

Azure Active Directory Graph API 通过 REST API 端点提供对 Azure Active Directory 的编程访问。应用可以使用 Azure AD Graph API 对目录数据和目录对象(例如用户、组和组织联系人)执行创建、读取、更新和删除 (CRUD) 操作。并且https://graph.mircosoft.com是一个统一的 API,其中还包括来自其他 Microsoft 服务(如 Outlook、OneDrive、OneNote、Planner 和 Office Graph)的 API,所有这些都通过具有单个访问令牌的单个端点进行访问。

有关详细信息,请参阅AD Graph REST

要通过 Azure AD 集成 office 365,您必须检查您是否有 office 365 租户,并且您的 office 365 租户的管理员用户是否具有 Azure AD 的访问权限。您可以参考深入了解 Office 365 统一 API以获取集成 Office 365 统一 API 的分步指南。

此外,您可以参考Microsoft Graph 支持的 Office 365 API 入门以创建 PHP 示例。

于 2015-11-19T06:59:50.617 回答
1

我真的很努力地导入 Live Outlook 联系人。但经过几天的研发,我发现 https://dev.office.com/blogs/outlook-rest-api-v1-0-office-365-discovery-and-live-connect-api-deprecation 这让我切换到 microsoft graph。我也尝试过使用 azure 文档和其他东西,但我发现它非常令人困惑,但我仍然不清楚它。所以我在 php 中实现了以下内容,结果幸运地成功了。只需按照以下步骤操作: 1) 在 https://apps.dev.microsoft.com中创建您的应用程序a) 生成新密码。保存应用程序 ID 和密码。b) 将平台添加为 web 并添加带有 https 的重定向 url,因为只有 https 可以使用,http 不适用。c) 检查高级选项下的实时 SDK 支持并保存。

2) 将 url 中的范围作为 contacts.read 传递,因为我们需要登录用户的联系人。

  $client_id="YOUR_CLIENT_ID";
 $redirect_uri = SiteUrl.'hotmail-contact';
             $url="https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
                    client_id=".$client_id."
                    &response_type=code
                    &redirect_uri=".$redirect_uri."
                    &response_mode=query
                    &scope=offline_access%20user.read%20mail.read%20contacts.read
                    &state=12345";

3) 认证成功后,返回认证码。现在,在获取代码后,我们通过https://login.live.com/oauth20_token.srf的 curl post 请求获取令牌请求,postfields 为

  $fields=array(
      'code'=>  urlencode($auth_code),
      'client_id'=>  urlencode($client_id),
      'client_secret'=>  urlencode($client_secret),
      'redirect_uri'=>  urlencode($redirect_uri),
      'grant_type'=>  urlencode('authorization_code')
    );

4) 获取联系人

$url = ' https://graph.microsoft.com/v1.0/me/contacts ' 我们甚至可以对它们应用过滤器

现在使用参数 url 和 token 请求 curl

  public function curl_use_token($url,$token) {

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
  //  curl_setopt($ch,CURLOPT_HTTPHEADER,array('HeaderName: HeaderValue'));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization:Bearer '.$token));
  //  curl_setopt($ch, CURLOPT_HTTPHEADER, array("Authorization", "Bearer " + $token));
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

    $data = curl_exec($ch);
    curl_close($ch);
    // print(gettype($data));
    // print($data);
    return $data;
  }

5)获取数据后,返回的数据不会是纯json格式,因此我们可以通过应用正则表达式从数据中仅提取json部分,解码后我们可以使用它。谢谢阅读

于 2018-02-08T07:04:37.843 回答