我需要从SharePoint Online页面调用GRAPH API。有人可以共享一个JavaScript示例吗? GRAPH站点中提供的示例用于从SharePoint Online外部调用GRAPH API。
我知道每个请求都需要一个令牌,您必须登录才能获得该令牌。但是,如果我从SharePoint Online中调用GRAPH API,则表示我已经过身份验证,因此再次登录没有意义。令牌应该在某个地方可用,我不知道如何获取它(它在SharePoint Online URL中不可用)。
答案 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数据。
这是我今天使用的一个例子(没有空格 - 需要传入反斜杠,所以转义字符很重要):
/_api/search/query?QueryText='*'
&Properties='GraphQuery:ACTOR(ME\,action\:1021)'
&RowLimit=5
&SelectProperties='URL,Title,ModifiedOWSDate,ModifiedBy,ContentType'
&sortlist='created:1'
这将返回登录用户的个人订阅源中的项目(与Delve相同)。
希望有所帮助!
更新:
答案 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