SharePoint Framework 1.8版本正式支持域隔离web part。
1,什么是域隔离webpart(isolated webpart)?
与我们通常说的SPFx客户端web part不同,域隔离的webpart运行在嵌入页面的一个iframe中。如果当前站点是https://contoso.sharepoint.com,则域隔离的webpart会运行在https://contoso-app{guid}.sharepoint.com这个随机生产的域中:
2. 为什么要支持域隔离的webpart?
域隔离的主要意义在于权限隔离。
域隔离的webpart支持webpart独立的权限,这些权限仅为这个域隔离的webpart所使用。所以使用域隔离的webpart调用Azure AD中注册的的application(可以是Graph或者任何其他Azure AD中注册的API)时会更加安全。
下图来自微软官方文档(官方翻译为域独立的webpart):
3,创建域隔离的web part:
使用Yeoman模板创建webpart如下,注意在”Will the components in the solution require permissions to access web APIs that are unique and not shared with other components in the tenant"问题后选择”Yes":
创建完成后,在package-solution.json文件中可以看到“isDomainIsolated”属性设置为true。以调用Graph API为例,添加"webApiPermissionRequests"属性并且配置需要的权限如下:
"isDomainIsolated": true,
"webApiPermissionRequests": [
{
"resource": "Microsoft Graph",
"scope": "User.ReadBasic.All"
},
{
"resource": "Microsoft Graph",
"scope": "Calendars.ReadWrite"
}
],
其中“webApiPermissionRequests"的作用是申请调用第三方API的权限,这里是申请调用Microsoft Graph API 读写日历的权限和读取用户基本信息的权限。一旦在这里申请权限,在部署时,管理中心的API Management页面中就会出现权限申请,管理员需要批准这些权限申请,我们的webpart才可以使用这些权限。关于在SPFx中调用Graph API,请参见博客:在SharePoint Framework中调用Graph API
4,部署web part到App Catalog(域隔离的webpart仅支持部署到tenant的App Catalog,不支持部署到site collection级别的App Catalog)
部署之后,因为我们之前在”webApiPermissionRequests"属性中配置了Graph API权限申请,所以在管理中心的API Management页面会出现如下需要管理员批准的权限:
为什么说域隔离的webpart会更安全,这里是一个例子,如果普通的SPFx客户端webpart申请Graph权限,需要管理员在API Management中批准的,如下所示:
可以看到这个调用Graph API权限的范围是“Organization-wide”,也就是说如果管理员批准了这个权限申请,那么整个租户中的任何app都可以调用Graph的这个API,这增加了Graph API被滥用的风险。
如果是域隔离的webpart申请Graph的权限,Graph权限的范围则仅仅是当前webpart,即只有这个域隔离的webpart才可以调用这两个Graph API。
5,部署完成后,会自动在Azure中注册一个application: