我正在使用 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 是否支持此操作,如果支持,如何查询该字段。如果我可以在查询用户组时获得此扩展的值而不必运行单独的查询,那将是一个奖励。
我已将文件上传到 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) 微软在 OneDrive 中引入了一个特殊的文件夹(我只在个人 OneDrive 帐户中看到它,在 OneDrive for Business 中没有看到),称为“Personal Vault”。我搜索了MS Graph API的文档,但找不到提到的。
所以我的问题是:有没有什么办法可以作为第三方应用程序访问这个个人保险库?
我无法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 的适当格式?
我于 2017 年 11 月 11 日在 Microsoft 的 Graph Github 上发布了同样的问题,但他们尚未提供答案。我非正式地听说,目前不支持对具有嵌套结构(例如超链接、用户、分类法)的列表项进行 REST 操作。这是该问题的链接,以防他们稍后回答:https : //github.com/microsoftgraph/microsoft-graph-docs/issues/1965
我确实有我正在使用的超链接字段的解决方法。我更改了 SharePoint 列表上的列,该列以前是指向“单行文本”字段的超链接。在单行文本字段中输入超链接时,当您在浏览器中查看事件时,它会显示为带下划线的可点击链接。如果您有一个像超链接字段类型那样又长又丑的 URL,则不能使用替代文本,但它确实有效!
我正在使用 Microsoft Graph 并创建了一个应用程序来读取来自特定用户的邮件。
但是,在获得访问令牌并尝试读取邮件文件夹后,我收到了 401 未经授权的答复。详细信息是:
令牌不包含权限,或权限无法理解。
这似乎是一个非常明确的信息,但不幸的是我无法找到解决方案。这是我到目前为止所做的:
为其授予应用程序权限 Mail.Read、Mail.ReadWrite ( https://docs.microsoft.com/en-us/graph/api/user-list-mailfolders?view=graph-rest-1.0 )
Run Code Online (Sandbox Code Playgroud)// 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());
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)
到现在为止还挺好。我确实得到了一个令牌。 …
我正在尝试更新列表项上的值(类型为超链接或图片)。执行 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) 这个问题是关于JSON批处理的两个问题
我尝试批处理的请求是这些请求的组合:
似乎有些租户(这是一个多租户应用程序)的限制为 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 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 中看到过这个错误?
使用
`https://graph.microsoft.com/beta/users/${email}/photo/$value`
Run Code Online (Sandbox Code Playgroud)
上周一直在为我工作,但现在它抛出 400 错误 错误输出
“邮箱由内部部署或非 Exchange 服务器托管,但不受支持。”
据我所知,我们的结局没有任何改变。使用 v1.0 似乎没有任何区别。我认为用户照片存储在内部交换中,但随后在 AAD 同步。像这样至少一年以来一直运行良好。
有谁知道这几天有什么变化吗?任何记录在案的解决方案?
我们在 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