标签: microsoft-graph

conversationThread和conversation之间有什么区别?

我正在调查文档,我不清楚在Microsoft Graph(v1.0参考)上的conversationThread对话之间究竟有什么区别?

会话文档说明:会话是一组线程,一个线程包含该线程的帖子.对话中的所有主题和帖子都共享相同的主题.关系是线程.在这里,我假设同一主题意味着在那次谈话的保护伞下?

另一方面,conversationThread的文档声明:conversationThread是一组帖子.最后一个帖子的收件人集合是整个帖子的聚合收件人.线程可以拥有越来越多的收件人.从线程中删除收件人时会创建一个新线程.关系是帖子.这里不是一个线索,如果conversationThread是一个帖子的集合,那几乎与会话提供的一样?

我一直想做什么?我正在使用Fiddler来处理HTTP请求groups/<id>/conversations,groups/<id>/threads而且我注意到最明显的区别是threads有一个isLocked属性conversations没有.然后问题出现在我的脑海里:"为什么以及在什么情况下我还会使用group/<id>/threadsgroup/<id>/conversations?".也许是因为我不理解conversationThread会话之间的区别.

请记住,我是Microsoft Graph的新手,如果社区可以帮助我澄清这个问题,我真的很感激.

提前谢谢了!

编辑 使用Fiddler,我们设法创建了一个新线程.但是,不是按预期在指定的对话中创建新线程,而是创建一个新的对话以与新线程一起使用.A还尝试在新创建的线程中创建新帖子,但我面临以下错误:使用请求正文"不支持OData请求":" { "body": { "contentType": "application/json", "content": "This is a test" } }"

microsoft-graph

2
推荐指数
1
解决办法
219
查看次数

由于401 Unauthorized,使用Graph API(按应用程序)访问Office 365计划程序数据时出现问题

我一直在努力使用我在Azure中设置的应用程序从Office 365访问计划数据.我已经能够成功检索许可和用户信息,但无法获得用户任务列表(来自Planner).

进一步澄清:

  • 我试图访问其他用户计划程序数据任务,而不是我自己的.
  • 这不是面向用户的应用程序,用户从不登录.我使用我的注册应用程序客户端/密钥来使用REST接口,以获取用于后续请求的令牌.我没有以用户身份登录,我作为应用程序登录,使用"我"不会像在图形api资源管理器中那样工作.
  • 通信正在成功,我能够毫无问题地读取和写入任何其他用户数据.问题似乎清楚地表明正在使用的应用程序没有查看计划程序数据的权限,但我已经为此应用程序提供了所有权限,并且在尝试读取计划程序数据时仍然获得401.
  • 我不确定所使用的技术是否相关,但为了提供尽可能详细的信息,我使用的是nodejs和adal-node(https://github.com/AzureAD/azure-activedirectory-library-for -nodejs)

图文档:https://graph.microsoft.io/en-us/docs/api-reference/beta/api/user_list_tasks

该文档明确指出执行此操作所需的范围是Group.ReadWrite.All AND Tasks.ReadWrite,我已经提供给应用程序(以及大量其他权限,因为我变得绝望和恼火).对于下面列出的每个应用程序,将检查所有应用程序权限和所有委托权限.在我开始工作之后,我将删除必要的,但我认为这将有助于缓解"你有没有尝试过检查这个...或那个......回复"

我绝望地检查了以下所有应用程序中的每个复选框

我意识到这是测试版,但希望能够利用它,并认为也许别人有更好的运气.

我尝试通过以下两种方式形成请求: https : //graph.microsoft.com/beta/users/[username]/plans https://graph.microsoft.com/beta/tasks?$ filter = createdBy eq '[用户名]'

两者都产生以下结果(大部分消息由于长度而被删除):

{ error: 
   { code: 'UnknownError',
     message: '...<h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>\r\n  <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>...',
     innerError: 
      { 'request-id': '09ef3a04-7fc2-48a0-9570-7f04171e45ed',
        date: '2016-05-11T14:18:12' } } }
Run Code Online (Sandbox Code Playgroud)

office365 office365api microsoft-graph

2
推荐指数
1
解决办法
3190
查看次数

来自不受管理的Azure AD目录的用户可以登录到位于其他目录中的Azure AD多租户应用程序吗?

我正在为公司试用Azure AD B2B功能。我试图通过门户并使用https://graph.microsoft.com/beta/invitations邀请外部用户。在两种情况下,都成功地邀请了用户并将其添加到我们的目录中。登录适用于社交帐户(然后使用Microsoft帐户)。如果它是一个非社交帐户(又名contoso.com),并且以前没有Azure AD,则当我们的应用程序尝试登录用户时,我会得到一个access_denied。如果我尝试强制达成同意流程,则会收到以下消息:

AADSTS65005:您的公司aaa.no当前不支持应用程序zzz。您的公司目前处于不受管理的状态,需要管理员通过aaa.no的DNS验证来声明对公司的所有权,然后才能配置应用程序zzz。

我们有许多小型公司作为客户,似乎它们在用户使用我们的应用程序之前都必须对Azure AD目录进行管理似乎是不合理的。根据微软的说法,它应该是无缝的:

无缝:需要访问您的公司应用程序的合作伙伴公司不需要Azure AD。Azure AD B2B协作提供了简单的用户注册体验,使这些合作伙伴可以立即访问您的应用程序。

如果他们可以注册并创建他们的用户和目录,为什么他们不能让他们被邀请的应用程序同意登录(该应用程序需要登录并读取用户配置文件委托权限)?

我们已经允许拥有自己的托管Azure AD的公司在我们的应用程序中使用其用户。我们获得了全球管理员的同意,以便管理员同意我们的应用程序,以便他们可以登录用户并读取目录数据。这些用户未添加到我们的目录中,并且可以正常工作。

另外,如果我以受邀用户的身份转到新门户,则可以看到域aaa.no已验证,但是无法将其设置为主域。

我尝试过的其他方法不起作用:升级到最新的ADAL版本,尝试在https://apps.dev.microsoft.com中创建应用程序并使用它,尝试在旧的Azure门户中设置权限(似乎是一个错误在清单中未显示权限的新门户中),并尝试使该应用程序成为单租户。没用。

azure-active-directory adal microsoft-graph

2
推荐指数
1
解决办法
2293
查看次数

在MS Graph API中进行分页

图谱API分页说明响应将包含一个字段@odata.nextLink,该字段将包含skiptoken指向下一页内容的字段.

当我测试API时,我得到一个完全限定的MS Graph URL,其中包含skiptoken作为查询参数.例如,下面是我@odata.nextLink在响应JSON中为该字段获得的值. https://graph.microsoft.com/v1.0/users?$top=25&$skiptoken=X%27445370740200001E3A757365723134406F33363561702E6F6E6D6963726F736F66742E636F6D29557365725F31363064343831382D343162382D343961372D383063642D653136636561303437343437001E3A7573657235407368616C696E692D746573742E31626F74322E696E666F29557365725F62666639356437612D333764632D343266652D386335632D373639616534303233396166B900000000000000000000%27

假设我们总是得到完整的URL而不仅仅是skiptoken?因为如果它是真的,它有助于避免解析skiptoken然后将其连接到现有URL以自己形成完整的URL.

编辑 - 与MS Graph API相比,从Azure AD Graph API获得的响应的不同之处在于JSON字段@odata.nextLink仅包含skipToken而不包含完全限定的URL.

pagination azure-ad-graph-api microsoft-graph

2
推荐指数
3
解决办法
3340
查看次数

等待杀死进程

我正在尝试连接到Azure AD,我正在使用此代码.

try
{
    var clientCredential = new ClientCredential(_clientId, _clientSecret);
    var authContext = new AuthenticationContext(AuthUri + _tenant);
    var authResult = await authContext.AcquireTokenAsync(GraphUri,clientCredential);
    var authString = authResult.CreateAuthorizationHeader();
    var client = new HttpClient();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var request = new HttpRequestMessage
    {
        Method = HttpMethod.Get,
        RequestUri = _requestUri,
    };
    request.Headers.Add("Authorization", authString);
    HttpResponseMessage response = null;
    await client.SendAsync(request).ContinueWith(taskWithMessage =>
    {
        response = taskWithMessage.Result;
    });
    return await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
   Console.WriteLine(ex);
}
Run Code Online (Sandbox Code Playgroud)

我不明白的一个大问题是,当执行到达第一个await(var authResult = await authContext.AcquireTokenAsync(GraphUri,clientCredential);)时,该进程被简单地杀死.没有例外,没有.

如果我替换该行

var authResult …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await azure-active-directory microsoft-graph

2
推荐指数
1
解决办法
604
查看次数

获取具有外接程序设置的自定义属性的事件

此问题是通过Microsoft Graph在Outlook加载项中获取自定义属性集的后续操作。

我的Outlook Office.js加载项正在向事件添加一些自定义属性。它可以按预期工作,我可以使用Microsoft Graph并按照以下GET请求访问这些属性:

/v1.0/me/events/{event-id}?$expand=SingleValueExtendedProperties($filter=id%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')
Run Code Online (Sandbox Code Playgroud)

但现在,我尝试通过将这样的正文发布到推送通知端点(/v1.0/subscriptions)来订阅推送通知:

  {
    changeType: "created,updated,deleted",
    notificationUrl: `[...my url...]`,
    resource: `/users/${userData.id}/events?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')`,
    expirationDateTime: tomorrow,
    clientState: "SecretClientState"
  }
Run Code Online (Sandbox Code Playgroud)

但我得到:

{
  "error": {
    "code": "ExtensionError",
    "message": "Operation: Create; Exception: [Status Code: BadRequest; Reason: Bad Request]",
    "innerError": {
      "request-id": "01dcece6-0103-4bef-8231-e9ab9480402a",
      "date": "2017-04-04T20:20:58"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

试图设置请求中的资源为不转义,但结果相同,接下来我尝试的是$filter功能,因此使用MS Graph资源管理器以以下格式获取了get请求:

/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')
Run Code Online (Sandbox Code Playgroud)

但出现以下错误:

{
    "error": {
        "code": "ErrorInvalidUrlQueryFilter",
        "message": "The filter expression for $filter does not match to a single extended property and a value restriction.", …
Run Code Online (Sandbox Code Playgroud)

outlook-restapi office-js outlook-web-addins microsoft-graph

2
推荐指数
1
解决办法
699
查看次数

使用图形api beta获取共享点管理中心中列出的所有根网站

我需要在图像中显示的共享点管理中心中列出的所有根网站 在此输入图像描述

为此,我使用Graph api如下,

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://graph.microsoft.com/beta/sharepoint/sites",
  "method": "GET",
  "headers": {
    "authorization": "Bearer token",
    "cache-control": "no-cache",
    "postman-token": "3116b007-e574-5ad4-aedd-3b35fbf76b61"
  }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});
Run Code Online (Sandbox Code Playgroud)

但它输出如下,

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#sharePoint/sites",
  "value": [
    {
      "createdDateTime": "2017-02-18T13:03:01.263Z",
      "description": "",
      "id": "2422c3a2-3c51-40f1-8483-5454aead43c4,412bb897-c754-460a-962d-db22893a1649",
      "lastModifiedDateTime": "2017-04-24T02:16:43Z",
      "name": "",
      "webUrl": "https://mps330124.sharepoint.com",
      "root": {},
      "siteCollection": {
        "hostname": "mps330124.sharepoint.com"
      },
      "siteCollectionId": "2422c3a2-3c51-40f1-8483-5454aead43c4",
      "siteId": "412bb897-c754-460a-962d-db22893a1649"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现它使用graph api beta

sharepoint outlook graph office365 microsoft-graph

2
推荐指数
1
解决办法
2428
查看次数

MicrosoftGraph API无法将消息标记为已读

我正在使用Microsoft.Graphnuget软件包(版本1.6.2),并且尝试将电子邮件标记为已读。这是代码:

        msg.IsRead = true;
        await MainPage.GraphServiceClient.Me.Messages[msg.Id].Request().Select("IsRead").UpdateAsync(msg);
Run Code Online (Sandbox Code Playgroud)

据我了解,以上代码仅应将该IsRead属性发送到服务器以进行更新。但是,执行此操作后,将发送整个消息对象(我已经使用Fiddler进行了验证),您将收到以下响应:

{
  "error": {
    "code": "ErrorInvalidPropertyUpdateSentMessage",
    "message": "Update operation is invalid for property of a sent message.",
    "innerError": {
      "request-id": "<A guid here that I wont share>",
      "date": "2017-07-29T21:10:18"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

代码正确吗,这是一个错误,我是否缺少某些内容或内容?有没有解决的办法?

.net email outlook microsoft-graph

2
推荐指数
1
解决办法
807
查看次数

使用Microsoft Graph Client创建日历事件

我试图弄清楚如何使用Microsoft Graph JavaScript Client创建日历事件。

我已经设法检索了必要的内容,accessToken并且可以与API进行交互(即检索事件,日历,前10名电子邮件),但是我不确定如何使用API​​创建事件。

    client
      .api('/me/events')
      .header('X-AnchorMailbox', emailAddress)
Run Code Online (Sandbox Code Playgroud)

我是否使用post发送事件json对象?

outlook-restapi microsoft-graph

2
推荐指数
1
解决办法
2291
查看次数

通过Microsoft Graph API在Azure AD中邀请用户无效

以下是我在Azure AD中邀请用户使用的代码。

我收到“未经授权”的回复。我不确定缺少哪些权限/设置。有谁有主意。

string accessToken = await AuthenticationHelper.GetTokenForApplication ();
InvitationModel invite = new InvitationModel ();
invite.invitedUserEmailAddress = user.Email;
invite.inviteRedirectUrl = ConfigurationManager.AppSettings["InviteRedirectUrl"];
invite.sendInvitationMessage = true;
using (HttpClient client = new HttpClient ()) {
    client.BaseAddress = new Uri ("https://graph.microsoft.com");

    client.DefaultRequestHeaders.Accept.Add (
        new MediaTypeWithQualityHeaderValue ("application/json"));

    client.DefaultRequestHeaders.Authorization =
        new AuthenticationHeaderValue ("Bearer", accessToken);

    HttpResponseMessage response =
        client.PostAsJsonAsync<InvitationModel> ("v1.6/invitations", invite).Result;

    dynamic inviteResult =
        response.Content.ReadAsAsync<dynamic> ().Result;

    if (inviteResult.status != "Error") { }
}
Run Code Online (Sandbox Code Playgroud)

azure-active-directory microsoft-graph

2
推荐指数
1
解决办法
731
查看次数