标签: microsoft-graph

Microsoft Graph API:无法列出会议室的重复事件

我正在构建一个Ruby on Rails应用程序,其中组织内的事件使用Microsoft Graph API对会议室进行分组和显示,并使用以下链接中描述的仅限应用授权流程.

http://graph.microsoft.io/docs/authorization/app_only

我使用以下请求列出会议室的事件

https://graph.microsoft.com/v1.0/users/<meeting room email>/events
Run Code Online (Sandbox Code Playgroud)

但问题是,并非所有事件都会在接下来的几周内列出,我认为这些都是反复出现的事件.

有没有办法将重复发生的事件包含在结果中.

如果有人可以提供帮助,我会很高兴.

提前致谢

outlook-calendar office365 microsoft-graph

6
推荐指数
1
解决办法
2344
查看次数

澄清如何使用Microsoft.Graph客户端更新(修补)对象

以下代码是我到目前为止使用Microsoft Graph Client Library更新对象的唯一方法

场景:

  1. 加载现有对象(组织)
  2. 修改值(在securityComplianceNotificationPhones中添加条目)
  3. 发送更新

var client = new GraphServiceClient(...);

var org = client.Organization["orgid"].Request().GetAsync().Result;
var secPhones = new List<string>(org.SecurityComplianceNotificationPhones);
secPhones.Add("12345");

var patchOrg = new Organization();
patchOrg.SecurityComplianceNotificationPhones = secPhones;

var orgReq = new OrganizationRequest(
     client.Organization[org.Id].Request().RequestUrl,
     client, new Option[] {});
orgReq.UpdateAsync(patchOrg).Wait();
Run Code Online (Sandbox Code Playgroud)

我需要使用patchOrg实例,因为有两件事:

  1. 图形API文档状态

    "在请求正文中,提供应更新的相关字段的值.请求正文中未包含的现有属性将保留其先前的值,或者根据对其他属性值的更改重新计算.为获得最佳性能,您不应该包括尚未改变的现有值."

  2. 如果你真的这样做包括没有改变现有的值(即assginedLicenses)请求失败,如果这些现有值是只读的.

我的问题是:是否有更简单的方法来更新现有对象,例如在Azure ActiveDirectory GraphClient中?仅供比较,Azure Active Directory Graph中的相同方案

var client = new ActiveDirectoryClient(...);
var org = client.TenantDetails.GetByObjectId("orgid").ExecuteAsync().Result;
org.SecurityComplianceNotificationPhones.Add("12345");
org.UpdateAsync().Wait();
Run Code Online (Sandbox Code Playgroud)

c# azure office365 azure-active-directory microsoft-graph

6
推荐指数
1
解决办法
1295
查看次数

如何使用Microsoft Graph API获取当前站点的siteId?

从文档中,我找不到任何方法来获取我放置webpart的网站的siteId.

例如,

我当前的网站是:https://{hostname}/sites/main1< - 不是root网站,但我想获得这个siteId

我在这里测试我的webpart: https://{hostname}/sites/main1/_layouts/15/workbench.aspx

我怎样才能做到这一点?从文档中,

站点是唯一标识符,它是以下值的组合ID:

网站集主机名(contoso.sharepoint.com)

网站集唯一ID(guid)

网站唯一ID(guid)

我可以通过使用location.hostname(是的,我使用JavaScript + React构建我的webpart)轻松获取主机名,但是如何使用Graph API轻松获取site-id?

sharepoint-online microsoft-graph spfx

6
推荐指数
1
解决办法
9413
查看次数

Microsoft Graph API BadRequest当前经过身份验证的上下文无效

我正在尝试开发一个简单的后台应用程序以连接到我的onedrive帐户(工作)并定期下载一些文件。

我遵循了本教程https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols-oauth-client-creds

我已经在这里注册了该应用程序https://apps.dev.microsoft.com/portal/register-app 我写下了client_idclient_secret

要获取访问令牌,我向发出POST请求

https://login.microsoftonline.com/common/oauth2/v2.0/token 与以下表单编码数据

{
    'client_id': 'clientid here',
    'client_secret': 'secret is here',
    'scope': 'https://graph.microsoft.com/.default',
    'grant_type': 'client_credentials',
}
Run Code Online (Sandbox Code Playgroud)

我回来了 access_token

{'ext_expires_in': 0,
 'token_type': 'Bearer',
 'expires_in': 3600,
 'access_token': 'eyJ0eXAiOiJKV1QiLCJhbGciO---SHORTENED FOR BREVITY'}
Run Code Online (Sandbox Code Playgroud)

接下来,我Bearerhttps://graph.microsoft.com/v1.0/me发出一个GET请求(正确设置了标题)

并得到这个错误的响应(对于任何端点,我都会得到)

{
  "error": {
    "code": "BadRequest",
    "message": "Current authenticated context is not valid for this request",
    "innerError": {
      "request-id": "91059f7d-c798-42a1-b3f7-2487f094486b",
      "date": "2017-08-05T12:40:33"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我在应用程序设置中配置了这些权限 权限

任何想法可能有什么问题吗?

microsoft-graph

6
推荐指数
1
解决办法
3277
查看次数

在Microsoft Graph/me/drive/search endpoint中发现结果

我很难弄清楚/me/drive/search端点如何与文档匹配.

当我尝试/v1.0/me/drive/search(q='myQuery')接收名称的文件时myQuery.这是有道理的.没有意义的是,如果尝试/v1.0/me/drive/search(q='.')我收到来自整个组织的巨大结果列表.看来我可以访问这些文档,但是当我尝试按名称搜索其中一个时,它们就不会出现.

  • /v1.0/me/drive/search(q='.') 返回许多文档,其中一个文档名为"我的测试文档"

  • /v1.0/me/drive/search(q='My Test Document') 没有结果.

可以预期第二个查询返回与第一个查询相同的文档.

onedrive microsoft-graph

6
推荐指数
1
解决办法
179
查看次数

Microsoft Azure AD图API:如何检索用户的电子邮件地址?

我能够访问用户的accessToken,并GET https://graph.microsoft.com/v1.0/me使用Authorization: Bearer <token>标头进行调用.

但是,在响应正文中,我得到的是这样的:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users",
    "value": [
        {
            "givenName": "Foo",
            "surname": "Bar",
            "displayName": "Foo Bar",
            "id": "b41efha115adcca29",
            "userPrincipalName": "email.address@outlook.com",
            "businessPhones": [],
            "jobTitle": null,
            "mail": null,
            "mobilePhone": null,
            "officeLocation": null,
            "preferredLanguage": null
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

mail属性是null,并且userPrincipalName在此响应正文中恰好是用户的电子邮件地址.但是,这是来自微软的文档:

虽然UPN和电子邮件共享相同的格式,但用户的UPN值可能与用户的电子邮件地址相同,也可能不同.

在启动用户的登录请求时,我们正在请求"user.read""email"范围.我们使用MSAL.js库来获取访问令牌,我们的代码读取如下内容:

login (): ng.IPromise<IMicrosoftOAuthResponse> {
  const prom = this.userAgentApplication.loginPopup(["user.read", "email"])
    .then((idToken) => {
      return this.userAgentApplication.acquireTokenSilent(["user.read", "email"]);
    })
    .then((accessToken) => {
      // at this …
Run Code Online (Sandbox Code Playgroud)

azure-active-directory azure-ad-graph-api microsoft-graph

6
推荐指数
1
解决办法
3401
查看次数

在获取共享点项目上使用过滤器的Microsoft图形API

我正在尝试使用Microsoft Graph API过滤我的Sharepoint项目结果查询,如此处所述所以我正在尝试这样 https://graph.microsoft.com/beta/sites/{site-id}/lists/{list-id}/items 做,所以我尝试添加

?&filter=od eq 1或从复制expand ?filter=fields(select%3Did) = 1,均无效。请帮忙

odata sharepoint-online microsoft-graph

6
推荐指数
1
解决办法
1949
查看次数

如何为Microsoft Graph刷新令牌

我正在使用以下方法连接到Microsoft Graph:

public GraphServiceClient GetAuthenticatedClient(string token)
{
    GraphServiceClient graphClient = new GraphServiceClient(
        new DelegateAuthenticationProvider(
            async (requestMessage) =>
            {
                // Append the access token to the request.
                requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", token);
            }));
    return graphClient;
}
Run Code Online (Sandbox Code Playgroud)

我正在服务器上运行此代码。我正在使用的令牌是由外部应用发送给我的。

在最初的一个小时内一切正常,然后令牌过期。

我的问题是:由于我也可以访问刷新令牌,因此如何获得新令牌?

c# microsoft-graph

6
推荐指数
2
解决办法
3582
查看次数

Microsoft Graph API尝试更新"mobilePhone"时没有足够的权限

当尝试使用应用程序权限更新(PATCH)用户的mobilePhone属性时,Graph的响应是"没有足够的权限来完成操作"(Authorization_RequestDenied).

无论是User.ReadWrite.AllDirectory.ReadWrite.All授予权限.通过client_credentials授权(oauth2/v2.0/token端点)请求访问令牌,并指定.default范围,并且role访问令牌中的声明中存在两个权限.

更新其他属性工作正常.仅在更新mobilePhone属性且仅具有应用程序权限时才会出错(使用带有管理员用户的图形资源管理器).

此行为突然在10月2日2018年开始.在此之前,更新移动电话属性也适用于应用程序权限(相同的权限).

据我所知,没有新的限制/所需权限添加到用户PATCH请求或mobilePhone属性的Graph文档中.这可能是什么问题?

注意:请求是使用Microsoft.Graph.GraphServiceClient(.NET标准)进行的,但使用Postman发出请求时也是如此.

编辑:

这是Graph API的响应:

{
    "error": {
        "code": "Authorization_RequestDenied",
        "message": "Insufficient privileges to complete the operation.",
        "innerError": {
            "request-id": "e956cb0b-af0a-4bb7-aae3-59d39d007a82",
            "date": "2018-10-11T08:27:19"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

azure-active-directory microsoft-graph

6
推荐指数
1
解决办法
671
查看次数

如何识别OneDrive DriveItem权限标识是组还是用户

我们得到一个的权限driveItem使用Microsoft图形作为记录在这里

每个返回的权限对象通常包含一个grantedTo以为IdentitySet其值的字段。但问题在于,每个Identity始终都是user

"grantedTo": { 
    "user": { 
        "displayName": "data Owners", 
        "email": "data@example.onmicrosoft.com", 
        "id": "94c3e81b-f6fb-43c6-8df5-b98462ccf191" 
    } 
}
Run Code Online (Sandbox Code Playgroud)
"grantedTo": { 
    "user": { 
        "displayName": "Data Members" 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

即使这些是组,也会发生这种情况。因此,无法使用这些数据来确定什么是组,什么是用户。

我们希望避免执行任何其他操作,因为这可能会导致效率低下。

因此,我们问是否有一种无需任何其他API请求即可识别它是组还是用户的方法?例如一些未记录的查询参数或关系?

onedrive microsoft-graph

6
推荐指数
1
解决办法
46
查看次数