如何从SharePoint Online页面中调用Microsoft GRAPH API

时间:2016-09-11 04:39:14

标签: office365 sharepoint-online microsoft-graph

我需要从SharePoint Online页面调用GRAPH API。有人可以共享一个JavaScript示例吗? GRAPH站点中提供的示例用于从SharePoint Online外部调用GRAPH API。

我知道每个请求都需要一个令牌,您必须登录才能获得该令牌。但是,如果我从SharePoint Online中调用GRAPH API,则表示我已经过身份验证,因此再次登录没有意义。令牌应该在某个地方可用,我不知道如何获取它(它在SharePoint Online URL中不可用)。

6 个答案:

答案 0 :(得分:2)

Microsoft Graph受Azure AD保护,它支持使用OAuth检索用于调用它的访问令牌。

据我所知,SharePoint的令牌发行者与Microsoft Graph不同。

的SharePoint:

在低信任授权系统中,颁发者是Azure ACS,它的GUID是00000001-0000-0000-c000-000000000000。其格式为GUID @ SharePoint领域GUID。

Microsoft Graph:

发行人是来自用户租户的安全令牌服务。其格式类似于https://sts.windows.net/049bef5f-8841-4000-984b-c3f36bdb2d8c/

根据我的理解,它无法直接在SharePoint在线页面中请求Microsoft Graph。作为解决方法,您可以使用客户端凭据流来构建Web服务,该流不需要用户参与身份验证作为Microsoft Graph的服务代理。

或者,如果您希望Microsoft Graph支持此功能,您可以提交here的反馈。

答案 1 :(得分:1)

当您注册托管SharePoint应用程序/加载项的提供程序时,此应用程序使用ACS作为令牌服务器。 Microsoft Graph使用较新的AAD STS服务器。 要从SharePoint页面调用Microsoft Graph,您需要注册一个可以调用Microsoft Graph的应用程序。 Microsoft Graph支持CORS,您可以从SharePoint页面执行XHR。 在运行时,由于SSO,用户不需要再次登录。但是在代码中,您需要处理获取两个访问令牌,一个来自ACS以调用CSOM API,另一个来自较新的STS来获取Microsoft Graph的令牌。

答案 2 :(得分:1)

自2018年起,Microsoft建议使用名为MSGraphClient的类连接到Microsoft Graph。 GraphHttpClient已被弃用。

以下是指南:https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-msgraph

以下是Microsoft在webpart中使用它的示例:

export default class HelloWorldWebPart extends BaseClientSideWebPart<IHelloWorldWebPartProps> {
 public render(): void {
   // ...

   const client: MSGraphClient = this.context.serviceScope.consume(MSGraphClient.serviceKey);
   // get information about the current user from the Microsoft Graph
   client
     .api('/me')
     .get((error, response: any, rawResponse?: any) => {
       // handle the response
   });
 }

 // ...
}

答案 3 :(得分:0)

你是对的。如果您已登录SharePoint,则无需再次传递安全性。您可以调用Search API并向查询添加一些属性,以便访问Office Graph数据。

https://msdn.microsoft.com/en-us/office/office365/howto/query-office-graph-using-gql-with-search-rest-api

这是我今天使用的一个例子(没有空格 - 需要传入反斜杠,所以转义字符很重要):

/_api/search/query?QueryText='*'
&Properties='GraphQuery:ACTOR(ME\,action\:1021)'
&RowLimit=5
&SelectProperties='URL,Title,ModifiedOWSDate,ModifiedBy,ContentType'
&sortlist='created:1'

这将返回登录用户的个人订阅源中的项目(与Delve相同)。

希望有所帮助!

更新:

这已被弃用。 https://msdn.microsoft.com/en-us/office/office365/howto/query-office-graph-using-gql-with-search-rest-api

答案 4 :(得分:0)

有一个新的类GraphHttpClient,它正在预览中,允许从SharePoint Framework Web部件访问Microsoft Graph。

Mikael Svenson有a great explanation of the new class,包括网络部分的示例代码。

答案 5 :(得分:-3)

您需要使用adaljs来获取天蓝色广告代币。它在这里解释得很好https://dev.office.com/sharepoint/docs/spfx/web-parts/guidance/call-microsoft-graph-from-your-web-part