我一直在用这个:
https://github.com/Azure-Samples/active-directory-php-graphapi-web.git
Run Code Online (Sandbox Code Playgroud)
访问图表api,这是有效的.我的Azure注册应用程序能够查询API以获取目录中的用户列表.
但现在我想在目录中列出用户的文件夹.这一页
http://graph.microsoft.io/docs
Run Code Online (Sandbox Code Playgroud)
说网址应该是:
https://graph.microsoft.com/v1.0/me/drive/root/children
Run Code Online (Sandbox Code Playgroud)
当我在我的REST调用中使用该URL时,我得到了
"code": "InvalidAuthenticationToken",
"message": "CompactToken parsing failed with error code: -2147184105"
Run Code Online (Sandbox Code Playgroud)
有道理,它从中得到一个令牌
https://graph.windows.net
Run Code Online (Sandbox Code Playgroud)
所以,我迷路了.有许多不同版本的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与如何访问它们之间的所有差异?
Microsoft Graph是否在v1.0或beta版中提供任何全文搜索功能?
具体来说,我想搜索电子邮件正文内容.我尝试了以下请求,只是为了测试API的不同部分:
https://graph.microsoft.com/v1.0/me/messages?$filter=body/content eq 'test'
Run Code Online (Sandbox Code Playgroud)
与响应消息
The property 'Body' does not support filtering.
Run Code Online (Sandbox Code Playgroud)
并要求
https://graph.microsoft.com/v1.0/me/messages?$filter=startswith(subject,'test')
Run Code Online (Sandbox Code Playgroud)
与响应消息
'contains' and 'startswith' are not supported for filtering. Use Search instead.
Run Code Online (Sandbox Code Playgroud)
最后一个响应提到了一些搜索功能,但我在文档中找不到这个.
使用Microsoft Graph API,我想创建一个所有Office 365用户的生日列表,但我目前无法获得具有相关属性的用户列表.
要设置此列表,我需要通过Graph API公开以下属性:
使用Graph Explorer,https://graph.microsoft.io/en-us/graph-explorer,我试图请求我自己的属性(graph.microsoft.com/v1.0/Me/?$select=id ,displayName,userPrincipalName,birthday)有效:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,userPrincipalName,birthday)/$entity",
"id": "aaaaaaaa-bbbbb-ccccc-a3c6-63817c4bbbca",
"displayName": "Harold van de Kamp",
"userPrincipalName": "harold@company.com",
"birthday": "2000-08-15T00:00:00Z"
}
Run Code Online (Sandbox Code Playgroud)
当我查询所有用户(graph.microsoft.com/v1.0/Users)时,这也有效,但不包含所有必需的属性
但是,当我查询具有所需属性的所有用户(graph.microsoft.com/v1.0/Users/?$select=id,displayName,userPrincipalName,birthday)时,我收到以下错误:
{
"error": {
"code": "InternalServerError",
"message": "This operation is not yet supported.",
"innerError": {
"request-id": "06a7b9c9-2fcd-4f26-a86c-fe9704a35a1e",
"date": "2016-06-11T11:15:45"
}
}
}
Run Code Online (Sandbox Code Playgroud)
查询所述测试API(graph.microsoft.com/beta/Users/?$select=id,displayName,userPrincipalName,birthday)导致同样的错误.
问题:我知道为什么会出现这个错误,我们怎么能让它工作?
奖金问题:是否可以直接查询即将到来的15个生日列表?
我使用了Graph Explorer来针对我的Office 365配置文件进行测试。一切正常,都可以接受Microsoft Teams(测试版)API。如果我使用GET https://graph.microsoft.com/beta/me/joinedTeams,我会得到
状态码401-您似乎没有此呼叫的权限。请修改您的权限。
{
"error": {
"code": "",
"message": "Authorization has been denied for this request.",
"innerError": {
"request-id": "a1733d8a-5adb-45ad-a0ad-463595d71a89",
"date": "2017-06-09T14:33:11"
}
}
}
Run Code Online (Sandbox Code Playgroud)
似乎没有为Microsoft Teams授予权限的选项。有人知道吗?
MicrosoftGraph API(特别是WebHooks)是否可以用于企业/本地Exchange服务器(而不是Office 365)上的帐户。我看到的有关设置OAuth身份验证所需的应用程序的所有文档都使用Azure。
PUT
请求/beta/groups/<groupId>/team
失败,并出现以下错误:
{
"error": {
"code": "AuthenticationError",
"message": "Error authenticating with resource.",
"innerError": {
"request-id": "e4385864-85e4-4fa6-8878-458988c584e4",
"date": "2017-11-10T10:29:39"
}
}
}
Run Code Online (Sandbox Code Playgroud)
提供了一个Bearer令牌,它是通过使用委托权限生成的Group.ReadWrite.All
.
端点记录在此处.
看起来,它与团队资源有关.以下请求不起作用:
PUT /beta/group/<groupId>/team
GET /beta/me/joinedTeams
两者都失败了AuthenticationError
.
/beta/group/<groupId>/team
现在工作.
我编写了一个能够与Exchange Online帐户通信的应用程序,我正在尝试测试以查看使其与在Hybrid中运行的内部部署帐户一起使用所需的步骤.
我有:
/PrepareAD
跑)/api/v2.0
和/autodiscover/autodiscover.json
不幸的是,我404
在尝试访问日历活动时遇到了问题:
curl -v -H 'Content-Type: application/json' -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFCSGg0a21TX2FLVDVYcmp6eFJBdEh6RE1mbEZNYTYwaktGRHRhUXp0ZGVkM2V6Z0ZfUzlLMjdDRmQxSHlfZGdRcnR6WlJBczRDV095R3E1Vl9OZW9MSFNKTGpzblNCSDNCQU9oQnBzU18wVmlBQSIsImFsZyI6IlJTMjU2IiwieDV0IjoiU1NRZGhJMWNLdmhRRURTSnhFMmdHWXM0MFEwIiwia2lkIjoiU1NRZGhJMWNLdmhRRURTSnhFMmdHWXM0MFEwIn0.eyJhdWQiOiJodHRwczovL2dyYXBoLm1pY3Jvc29mdC5jb20iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8wODY1YjBhYi02ZjYwLTQzNjMtYTEwZi05NWU5ZTc5ZjlmODEvIiwiaWF0IjoxNTE4OTc5NzQ0LCJuYmYiOjE1MTg5Nzk3NDQsImV4cCI6MTUxODk4MzY0NCwiYWlvIjoiWTJOZ1lKRE0reDVXbGhWNUlrajUwbDB4THNacEFBPT0iLCJhcHBfZGlzcGxheW5hbWUiOiJIQy1XZWIiLCJhcHBpZCI6ImVkZjlkY2M0LThjNjAtNDg3ZS1hYmUyLTI4MjcyYTRlZGJlMCIsImFwcGlkYWNyIjoiMiIsImlkcCI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzA4NjViMGFiLTZmNjAtNDM2My1hMTBmLTk1ZTllNzlmOWY4MS8iLCJvaWQiOiJkNTUzMTE2My01MTcxLTRmZjctYTNjMS04NWFlNzUzMjkzNTIiLCJyb2xlcyI6WyJNYWlsLlJlYWRXcml0ZSIsIkNvbnRhY3RzLlJlYWRXcml0ZSIsIkRpcmVjdG9yeS5SZWFkLkFsbCIsIk1haWwuUmVhZCIsIkNhbGVuZGFycy5SZWFkV3JpdGUiXSwic3ViIjoiZDU1MzExNjMtNTE3MS00ZmY3LWEzYzEtODVhZTc1MzI5MzUyIiwidGlkIjoiMDg2NWIwYWItNmY2MC00MzYzLWExMGYtOTVlOWU3OWY5ZjgxIiwidXRpIjoiNkxJT3g1bWQ4ay05ajhBUUtiY2hBQSIsInZlciI6IjEuMCJ9.AWt_ANsH8sk15WeH1AgD6SD0Ki8VILMvzkbSMju_YFGKc5cVkrGp7Skzt64uDM8rI6Py5Y-1c3srXwON2oSihkRskfz5vG4nIlbFnuYd3Ij2Vz1ktpNnCeMAnAK2T8ifk2visRSvchRbuBNZZyamwRjActdDF9BS8NygUgmmygK4mPjOIab17PJPz5PisvRbCA2jBLWLvbu9RYrLH-xGuoLd2PLTbsn2WSVi3er4XztZCcK7XfVWe-0wjrV6qBufd5z0hH_KpQLdzPtLOzSUGUAcXGa0mBPceTWULQvQ-LPcAJO57F0ir5k22fWzlkOfUxQb9eGWREUm1cAPWk3CPw" "https://graph.microsoft.com/v1.0/users/oq@healthcentrified.co.uk/calendar/events"
* Trying 137.116.241.64...
* Connected to graph.microsoft.com (137.116.241.64) port 443 (#0)
* found 148 certificates in /etc/ssl/certs/ca-certificates.crt
* found 592 certificates in /etc/ssl/certs
* ALPN, offering http/1.1
* SSL connection using TLS1.2 / ECDHE_RSA_AES_256_CBC_SHA384
* server certificate verification OK
* server certificate status verification …
Run Code Online (Sandbox Code Playgroud) 尝试将文件上传到尚不存在的onedrive。我设法得到它来更新现有文件。但是似乎无法弄清楚如何创建一个全新的文件。我已经使用Microsoft.Graph
库完成了此操作。
以下是用于更新现有文件的代码:
public async Task<ActionResult> OneDriveUpload()
{
string token = await GetAccessToken();
if (string.IsNullOrEmpty(token))
{
// If there's no token in the session, redirect to Home
return Redirect("/");
}
GraphServiceClient client = new GraphServiceClient(
new DelegateAuthenticationProvider(
(requestMessage) =>
{
requestMessage.Headers.Authorization =
new AuthenticationHeaderValue("Bearer", token);
return Task.FromResult(0);
}));
try
{
string path = @"C:/Users/user/Desktop/testUpload.xlsx";
byte[] data = System.IO.File.ReadAllBytes(path);
Stream stream = new MemoryStream(data);
// Line that updates the existing file
await client.Me.Drive.Items["55BBAC51A4E4017D!104"].Content.Request().PutAsync<DriveItem>(stream);
return View("Index");
}
catch (ServiceException ex)
{ …
Run Code Online (Sandbox Code Playgroud) 我们的应用程序通过对驱动器项执行Get调用来读取组驱动器内容.这曾经适用于内部成员和访客用户.它现在为内部成员工作,但不再为访客用户工作.以下是样本调用.
https://graph.microsoft.com/v1.0/drives/b!uey_5Lpf8Eu0-5HlGvJvFga89s_hTxNAg9kSsTlOBqajRqOF3ec-Rp6uqtbLNt4w/items/016GMDDVB74LSDDYRHHRHJ5KV5HHVXWQTT?$ select = webUrl,name
我们得到的回应是这样的
{
"error": {
"code": "unauthenticated",
"message": "Role Claim does not exist for Service Asserted App V1.",
"innerError": {
"request-id": "5ed31bd5-283c-4ce2-a6d6-a249f94ae9ee",
"date": "2018-06-27T09:39:01"
}
}
Run Code Online (Sandbox Code Playgroud)
以前工作得很好,最近Drive API有什么变化吗?我已检查更改的日志,但在上一版本中没有提到任何相关内容.
从本周开始gateway timeout
,当我的邮件搜索找不到任何结果时,我突然从Graph中获取信息。
我正在使用这样的查询:
https://graph.microsoft.com/v1.0/users/shared@notreal.com/mailFolders/AllItems/messages?$search="participants:some.person@fake.com"&$select=from,subject,HasAttachments,Id,SentDateTime&$top=100
Run Code Online (Sandbox Code Playgroud)
这是一个图查询,它从shared@notreal.com
发送者或接收者包括的Office 365邮箱中请求最多100封电子邮件some.person@fake.com
。shared@notreal.com
是与拨打电话的帐户共享的邮箱。
我的应用已通过oauth2身份验证代码流进行了身份验证,并已获得所有必要的权限。
This has been working for about a year. But starting a few days ago, this query only succeeds if results are found. When no results are found, the query takes 30 seconds, Graph returns UnknownError
and the response is 504
with reasonphrase Gateway Timeout
.
It seems as though something has changed in the Graph API - or perhaps in the Office 365 API, …