Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用新的microsoft graph api创建身份验证令牌?_Php_Azure_Office365_Azure Ad Graph Api_Microsoft Graph Api - Fatal编程技术网

Php 如何使用新的microsoft graph api创建身份验证令牌?

Php 如何使用新的microsoft graph api创建身份验证令牌?,php,azure,office365,azure-ad-graph-api,microsoft-graph-api,Php,Azure,Office365,Azure Ad Graph Api,Microsoft Graph Api,我一直在用这个: https://github.com/Azure-Samples/active-directory-php-graphapi-web.git 访问图形api,它可以正常工作。我的azure AD注册应用程序能够查询API以获取目录中的用户列表 但是现在我想列出目录中某个用户的文件夹。 本页 http://graph.microsoft.io/docs 表示url应为: https://graph.microsoft.com/v1.0/me/drive/root/childr

我一直在用这个:

https://github.com/Azure-Samples/active-directory-php-graphapi-web.git
访问图形api,它可以正常工作。我的azure AD注册应用程序能够查询API以获取目录中的用户列表

但是现在我想列出目录中某个用户的文件夹。 本页

http://graph.microsoft.io/docs
表示url应为:

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)、第一个graph API(我通过它访问)、office 365 API(我通过它访问)到现在的graph API(以前的universal API),我都不知道从哪里开始寻找正确的信息

目前我正在使用PHP,我相信这在微软支持的平台列表中会很低,但是如果您能告诉我访问令牌生成在最新api、o365 api和其他graph api(在graph.windows.net)中的工作方式,我将不胜感激

还有谁像我一样困惑吗?
是否有一些中心参考来解释这些API之间的所有差异以及如何访问它们?

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

其他人喜欢
https://graph.microsoft.com
是一个基于REST API构建的资源端点,提供来自Microsoft的资源和服务

具体来说,到端点
https://graph.windows.net
,官方网站上的解释如下:

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

有关更多信息,请参阅

要通过Azure AD集成office 365,您必须检查是否有office 365租户,并且您的office 365租户管理员用户是否具有Azure AD的访问权限。有关集成office 365统一API的分步指南,请参阅


此外,您可以参考创建一个PHP示例

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

至于您关于没有用户UI的服务应用程序的问题,您可以使用客户端\u凭据流获取仅应用程序访问令牌。(这在Microsoft Graph文档中目前没有文档记录,但它是受支持和描述的-只需将资源设置为)。在Azure管理门户中,您还需要选择应用程序所需的“应用程序权限”。当前支持仅应用程序访问邮件资源,但不支持仅应用程序访问一个驱动器资源(通过Microsoft graph)。我们很快就会把它打开


希望这能有所帮助,

我真的很努力地导入live outlook联系人。但经过几天的研发,我发现这让我转向了microsoft graph。我也尝试了azure文档和其他东西,但我发现它非常混乱,但我仍然不清楚。因此,我用php实现了以下内容,结果幸运地成功了。只需按照以下步骤操作:1)在a)中创建应用程序生成新密码。保存应用程序id和密码。b) 将平台添加为web,并使用https添加重定向url,因为只能使用https,http不适用。 c) 检查“高级选项”下的Live 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) 成功身份验证后,它将返回身份验证代码。现在,在获得代码之后,我们通过curl post request获取令牌请求,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='' 我们甚至可以对它们应用过滤器

现在使用参数url和令牌请求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部分,并在解码后使用它。
感谢阅读

感谢您提供的信息,我忘了提到,我正在编写一个服务器应用程序,没有用户界面交互。我有AD的管理员权限,我可以查询graph API以获得用户列表。现在我想遍历这些用户,阅读他们的邮件并列出他们的onedrive文件。如果我理解正确,onedrive是o365 api,mail是graph api。但如果可能的话,我想使用新的通用API来实现这一切。是吗?要集成Microsoft graph API,您仍然需要为应用程序管理员授权。具体到你的要求,我认为这是积极的。正如我在上找到onedrive API,也在上找到邮件API一样。此外,您现在可以测试这些API,这是我可以投入精力的事情,非常感谢。应用程序是否只支持访问组的日历资源?@Dan Kershaw您能帮我回答这个问题吗?它正在工作。。。非常感谢。