【问题标题】:How to invoke Microsoft GRAPH API from within SharePoint Online page如何从 SharePoint Online 页面中调用 Microsoft GRAPH API
【发布时间】:2017-01-18 20:44:04
【问题描述】:

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

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

【问题讨论】:

    标签: office365 sharepoint-online microsoft-graph-api


    【解决方案1】:

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

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

    共享点:

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

    微软图形:

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

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

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

    【讨论】:

      【解决方案2】:

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

      这是一个指南:https://docs.microsoft.com/en-us/sharepoint/dev/spfx/use-msgraph

      这是 Microsoft 在 Web 部件中使用它的示例:

      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】:

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

        【讨论】:

        【解决方案4】:

        你是对的。如果您已登录 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

        【讨论】:

        • SharePoint Search API 只允许访问 Office Graph(显示用户和对象之间的节点和连接),而不是新的统一 Microsoft Graph API(Microsoft 的可怕命名)。
        • 这会返回一个错误代码,API 的当前 O365 已被弃用
        • @nmishr 添加了链接
        猜你喜欢
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 2019-08-09
        • 2018-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多