我一直在用这个:
https://github.com/Azure-Samples/active-directory-php-graphapi-web.git
访问图形api,它有效。我的Azure注册应用程序能够查询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与如何访问它们之间的所有差异?
答案 0 :(得分:4)
Microsoft Graph应为您提供一个端点(和令牌获取),以访问Office 365和Azure AD服务提供的数据。有关详细信息,请访问https://graph.microsoft.com - 但请使用v1.0版本,因为这是适用于生产服务的GA版本。
至于您关于没有用户界面的服务应用程序的问题 - 您可以使用client_credential流获取仅限应用程序访问令牌。 (这在Microsoft Graph文档中目前没有记录,但它受支持和描述elsewhere - 只需将资源设置为https://graph.microsoft.com/)。在Azure管理门户中,您需要选择应用程序所需的“应用程序权限”。目前支持仅限应用程序访问邮件资源,但不支持应用程序仅访问一个驱动器资源(通过Microsoft图形)。我们很快就会打开它。
希望这有帮助,
答案 1 :(得分:3)
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,其中还包含来自Outlook,OneDrive,OneNote,Planner和Office Graph等其他Microsoft服务的API,所有这些API都通过具有单一访问令牌的单个端点进行访问。
有关详细信息,请参阅AD Graph REST。
要通过Azure AD集成Office 365,您必须检查是否有Office 365租户,而Office 365租户的管理员用户是否具有Azure AD的访问权限。您可以参考Deep Dive into the Office 365 Unified API获取有关集成Office 365 Unified API的分步指南。
此外,您可以参考Get started with Office 365 APIs powered by Microsoft Graph来创建PHP示例。
答案 2 :(得分:0)
我真的很努力地导入实时展望联系人。但经过几天的R& DI发现https://dev.office.com/blogs/outlook-rest-api-v1-0-office-365-discovery-and-live-connect-api-deprecation让我转向微软图。我也尝试过使用azure文档和其他东西,但我发现它非常令人困惑,但我仍然不清楚所以我在php中实现了以下内容,结果幸运地成功了。只需按照以下步骤操作:1)在https://apps.dev.microsoft.com中创建应用程序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)成功验证后,它将返回验证码。现在,在获得代码之后,我们通过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' 我们甚至可以对它们应用过滤器
现在请求curl with paramaters url和token
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部分,并且在解码后我们可以使用它。 感谢您的阅读