标签: microsoft-graph-api

使用 Microsoft Graph 获取用户的扩展属性

我正在使用 Microsoft Graph 来管理 Azure AD 用户,但在访问用户对象上的扩展属性时遇到了一些问题。该属性是在使用 Azure AD Graph API 创建用户时添加的,如果您使用 Azure AD API 查询用户,扩展属性将自动返回名称为“extension_{appId}_{propertyName}”。我想使用 Microsoft Graph 访问此属性的值,但没有找到正确的调用方法。

我尝试使用 $select 直接选择属性(通过上面列出的全名)和较短的名称。
https://graph.microsoft.com/beta/Users/{id}?$select=extension_{appId}_{propertyName}

我还尝试使用 $expand 查询 singleValueExtendedProperty(和 multiValue),但被告知用户对象上不存在该属性。
https://graph.microsoft.com/beta/Users/{id}?$expand=singleValueExtendedProperty

我还尝试了 User 对象上的“扩展”字段,但它始终为空。

只是好奇 Graph 是否支持此操作,如果支持,如何查询该字段。如果我可以在查询用户组时获得此扩展的值而不必运行单独的查询,那将是一个奖励。

azure-ad-graph-api microsoft-graph-api

9
推荐指数
1
解决办法
1万
查看次数

如何使用 System.Net.Http 修补数据

我已将文件上传到 SharePoint 并找出了它的 ID。现在我需要更新该列表项上的一些其他列。问题是 System.Net.Http.HttpMethod.Patch 不存在。

public static async Task<string> UpdateFileData()
{
    var (authResult, message) = await Authentication.AquireTokenAsync();

    string updateurl = MainPage.rooturl + "lists/edd49389-7edb-41db-80bd-c8493234eafa/items/" + fileID + "/";
    var httpClient = new HttpClient();
    HttpResponseMessage response;
    try
    {
        var root = new
        {
            fields = new Dictionary<string, string>
            {
                { "IBX", App.IBX },  //column to update
                { "Year", App.Year}, //column to update
                { "Month", App.Month} //column to update
            }
        };

        var s = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat };
        var …
Run Code Online (Sandbox Code Playgroud)

c# sharepoint microsoft-graph-api

9
推荐指数
3
解决办法
8879
查看次数

通过 API 访问 OneDrive 个人保管库

微软在 OneDrive 中引入了一个特殊的文件夹(我只在个人 OneDrive 帐户中看到它,在 OneDrive for Business 中没有看到),称为“Personal Vault”。我搜索了MS Graph API文档,但找不到提到的。

所以我的问题是:有没有什么办法可以作为第三方应用程序访问这个个人保险库?

microsoft-graph-api

9
推荐指数
1
解决办法
567
查看次数

使用超链接字段创建或更新 SharePoint ListItem

我无法listitem使用 Microsoft Graph创建或更新包含超链接字段的 SharePoint Online 。如果我从 API 调用的主体中删除超链接字段,我可以创建或更新相同列表的项目。

对于更新,我将 PATCH 请求发送到:

/v1.0/sites/<site>/list/<listid>/items/<item>/fields
Run Code Online (Sandbox Code Playgroud)

带有以下标题:

"Authorization" : "Bearer <token>"
"accept" :"application/json;odata.metadata=full;odata.streaming=true"
Run Code Online (Sandbox Code Playgroud)

这是身体:

/v1.0/sites/<site>/list/<listid>/items/<item>/fields
Run Code Online (Sandbox Code Playgroud)

我将收到以下错误消息作为响应:

"Authorization" : "Bearer <token>"
"accept" :"application/json;odata.metadata=full;odata.streaming=true"
Run Code Online (Sandbox Code Playgroud)

值得注意的是,我可以使用确切的标题和目标 URL 更新列表项中的其他字段,只要 json 正文中没有超链接字段。

我发送的格式是我在执行GET. 有谁知道将 URL 字段发送回 SharePoint 的适当格式?

2018 年 1 月 8 日更新

我于 2017 年 11 月 11 日在 Microsoft 的 Graph Github 上发布了同样的问题,但他们尚未提供答案。我非正式地听说,目前不支持对具有嵌套结构(例如超链接、用户、分类法)的列表项进行 REST 操作。这是该问题的链接,以防他们稍后回答:https : //github.com/microsoftgraph/microsoft-graph-docs/issues/1965

我确实有我正在使用的超链接字段的解决方法。我更改了 SharePoint 列表上的列,该列以前是指向“单行文本”字段的超链接。在单行文本字段中输入超链接时,当您在浏览器中查看事件时,它会显示为带下划线的可点击链接。如果您有一个像超链接字段类型那样又长又丑的 URL,则不能使用替代文本,但它确实有效!

sharepoint-online microsoft-graph-api

8
推荐指数
1
解决办法
2204
查看次数

Microsoft Graph 令牌不包含权限,或权限无法理解

我正在使用 Microsoft Graph 并创建了一个应用程序来读取来自特定用户的邮件。

但是,在获得访问令牌并尝试读取邮件文件夹后,我收到了 401 未经授权的答复。详细信息是:

令牌不包含权限,或权限无法理解

这似乎是一个非常明确的信息,但不幸的是我无法找到解决方案。这是我到目前为止所做的:

权限是: 在此处输入图片说明 在此处输入图片说明 - 编写以下代码以获取访问令牌:

 // client_secret retrieved from secure storage (e.g. Key Vault)
 string tenant_id = "xxxx.onmicrosoft.com";
 ConfidentialClientApplication client = new ConfidentialClientApplication(
 "..",
 $"https://login.microsoftonline.com/{tenant_id}/",
 "https://dummy.example.com", // Not used, can be any valid URI 
 new ClientCredential(".."),
 null, // Not used for pure client credentials
 new TokenCache());
Run Code Online (Sandbox Code Playgroud)
   string[] scopes = new string[] { "https://graph.microsoft.com/.default" };
   AuthenticationResult result = client.AcquireTokenForClientAsync(scopes).Result;
   string token = result.AccessToken;
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。我确实得到了一个令牌。 …

c# oauth-2.0 office365 microsoft-graph-api

8
推荐指数
1
解决办法
9177
查看次数

无法通过 Microsoft Graph 更新 SharePoint 中的超链接或图片

我正在尝试更新列表项上的值(类型为超链接或图片)。执行 GET 请求时,数据返回正常,但是当我尝试创建一个项目或使用值更新它时,我最终得到以下结果:

{
    "error": {
        "code": "-1, Microsoft.SharePoint.Client.InvalidClientQueryException",
        "message": "A value without a type name was found and no expected type is available. When the model is specified, each value in the payload must have a type which can be either specified in the payload, explicitly by the caller or implicitly inferred from the parent value.",
        "innerError": {
            "request-id": "d12dfb12-a068-4621-9f27-d284e4635060",
            "date": "2019-05-28T08:52:51"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

POST/PATCH 请求转到:

https://graph.microsoft.com/v1.0/sites/<siteid>/lists/<listid>/items/
Run Code Online (Sandbox Code Playgroud)

并包含一个简单的 JSON(在 PATCH 的情况下):

{
  "WebPage":
  {
    "Description": "Microsoft Graph",
    "Url": …
Run Code Online (Sandbox Code Playgroud)

microsoft-graph-sdks microsoft-graph-api

8
推荐指数
1
解决办法
152
查看次数

Microsoft Graph API 批量限制

这个问题是关于JSON批处理的两个问题

  1. 我发现批处理限制是 15 而不是提到的 20,为什么JSON Batching页面上没有提到限制对我来说是一个问题。如果我合并 15 个请求,它们都会成功,没问题。如果我执行 16 到 20 个请求,它们会随机开始失败。我是不是做错了什么?我没有使用图形客户端,因为它很长时间不支持批处理。我还创建了一个关于它的github 问题,但由于某种原因它被关闭了.....
  2. 我如何建议提高限额?如果可以将限制提高到 50,这将非常有用(限制它们应该在相同的上下文中,就像您可以从单个用户日历中添加/删除 50 个项目一样。)

我尝试批处理的请求是这些请求的组合:

  • 从用户日历中删除项目
  • 将项目添加到用户日历

似乎有些租户(这是一个多租户应用程序)的限制为 4,我们的租户限制为 15,这似乎是平均值。

如果我检查提到的 20,我会收到 HTTP 400 错误请求异常。但是具有 15 到 20 个“子请求”组合的批处理请求会产生 HTTP 200 Ok 响应,其中一些 json 描述子请求的状态。那里显示429状态。

{
    "id": "04",
    "status": 204,
    "headers": {
        "Cache-Control": "private"
    },
    "body": null
}
Run Code Online (Sandbox Code Playgroud)

对比

{
    "id": "12",
    "status": 429,
    "headers": {
        "Retry-After": "1",
        "Cache-Control": "private"
    },
    "body": {
        "error": {
            "code": "ApplicationThrottled", …
Run Code Online (Sandbox Code Playgroud)

microsoft-graph-api

8
推荐指数
1
解决办法
2051
查看次数

Microsoft Graph API 间歇性错误“未找到令牌:令牌无效或已过期”在重试后自行解决

我正在向 Microsoft Graph REST api(测试版)发出请求,特别是向登录事件端点:https : //graph.microsoft.com/beta/auditLogs/signIns

我正在发出批处理请求,以 1000 个批次检索特定用户的登录信息。从 9 月 25 日左右开始,这些请求将在大约 10-50 个批次后失败,响应如下,HTTP 为 400(无效请求)错误代码:

"error": {
  "code": "",
  "message": "Token not found: token is either invalid or expired",
  "innerError": {
    "request-id": "[request-id-redacted]",
    "date": "2019-09-30T22:27:36"
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在等待 ~1 秒后重试请求,使用完全相同的 JWT Web 令牌,请求会成功,并且我能够完成我正在运行的作业的所有批处理请求。我在最初进行身份验证时收到的访问令牌在 1 小时后到期,但是在我收到令牌后约 1-15 分钟出现此错误(我已确认使用令牌获得的 unix 时间戳到期日期)。

我想知道这个错误的原因可能是什么,以及我如何避免它,除了硬编码特定的响应消息并重试。我也无法在 google 上找到任何匹配的错误消息。有没有人以前从 Microsoft Graph API 中看到过这个错误?

azure-active-directory microsoft-graph-api

8
推荐指数
1
解决办法
415
查看次数

尝试从 MS Graph 获取用户照片时出现“MailboxNotHostedInExchangeOnline”

使用

`https://graph.microsoft.com/beta/users/${email}/photo/$value`
Run Code Online (Sandbox Code Playgroud)

上周一直在为我工作,但现在它抛出 400 错误 错误输出

“邮箱由内部部署或非 Exchange 服务器托管,但不受支持。”

据我所知,我们的结局没有任何改变。使用 v1.0 似乎没有任何区别。我认为用户照片存储在内部交换中,但随后在 AAD 同步。像这样至少一年以来一直运行良好。

有谁知道这几天有什么变化吗?任何记录在案的解决方案?

microsoft-graph-api

8
推荐指数
1
解决办法
525
查看次数

如何获取使用 MS Teams 的 Microsoft 个人帐户的 aadObjectId

我们在 MS Teams 机器人上工作。每个机器人通知都包含aadObjectId在我们识别用户的请求正文中。

示例机器人请求

{"name":"composeExtension/query","type":"invoke","timestamp":"2021-04-28T06:41:18.718Z","localTimestamp":"2021-04-28T12:11:18.718+05:30","id":"f:c3c988ef-b14b-b996-b3ec-cee22dbeb5ca","channelId":"msteams","serviceUrl":"https://smba.trafficmanager.net/in/","from":{"id":"29:1FKDpJ_2YcIMpBd94h8BABBpkrv_RVSSeeJ3qh8U3djsypgk2lnJxbq_Sd4eUVFE2lHXBuUBMQ_se7QEvYzTbtQ","name":"Test Account","aadObjectId":"7812b15f-6462-44ef-a772-d9012c55bf1c"},"conversation":{"conversationType":"personal","tenantId":"4d4f9f3f-2553-430b-b86b-442be9306e29","id":"a:1W4nBEGebG_h5wTFEGuyFYXr0_vCYTvg3-lIZ9uKaPFiDZmtU5FIA2PH880C09mrtxbqEeIJ-sPQvwy0qfDhmTOPuEGRtkoT7NGS1eTBHBfjWXWFMRgOK5yzsNMlL6i0d"},"recipient":{"id":"28:97f33763-604f-89ae-40b3-719c55e66177","name":"Test Bot"},"entities":[{"locale":"en-GB","country":"GB","platform":"Web","timezone":"Asia/Calcutta","type":"clientInfo"}],"channelData":{"tenant":{"id":"4d4f9f3f-2553-430b-b86b-442be9306e29"},"source":{"name":"compose"}},"value":{"commandId":"Contacts","parameters":[{"name":"initialRun","value":"true"}],"queryOptions":{"skip":0,"count":25}},"locale":"en-GB","localTimezone":"Asia/Calcutta"}
Run Code Online (Sandbox Code Playgroud)

在初始身份验证期间,我们存储用户 ID。我们使用 OAuth2.0 和以下 Microsoft Graph API 来获取用户 ID。

https://docs.microsoft.com/en-us/graph/api/user-get?view=graph-rest-1.0&tabs=http

我们注意到id图形 api 和机器人框架中返回的业务(或工作)帐户是相同的。

但是对于个人账户就不同了

样本 ID 供参考

Work Account
From Graph API - id : 7812b15f-6462-44ef-a772-d9012c55bf1c
From Bot - aadObjectId : 7812b15f-6462-44ef-a772-d9012c55bf1c
Run Code Online (Sandbox Code Playgroud)
Personal Account
From Graph API - id : 47268d7805746036
From Bot - aadObjectId : 6542b15f-7632-a772-44ef-d9012c55bf1c
Run Code Online (Sandbox Code Playgroud)

那么如何获取个人用户的aadObjectId呢?

azure-active-directory microsoft-teams microsoft-graph-teams microsoft-graph-api

8
推荐指数
0
解决办法
150
查看次数