如何使用Sharepoint(应用程序)

注意:对于使用Adobe的Sharepoint的项目,请此处继续。

如果您使用SharePoint作为内容源,AEM将使用注册的Microsoft Azure应用程序来访问您的内容。 此应用程序定义了允许服务代表用户访问SharePoint的​ 委派权限。 需要在使用SharePoint的项目中注册此用户。

或者,这些服务还可以作为应用程序进行身份验证,并使用​ 应用程序权限 ​来访问这些站点。 这需要SharePoint站点管理员进行额外设置,以便授予应用程序权限。

首选设置是使用​ 应用程序权限,因为这将缩小服务对特定SharePoint网站的访问范围,并且无需共享技术用户的任何密钥。 此外,它减少了密码轮换的问题。

以下说明如何为项目设置​ 应用程序权限。 如果要设置技术用户,请继续此处

设置SharePoint的过程涉及以下步骤:

  1. 创建或确定将用作基于文档的创作站点的Sharepoint站点
  2. 在SharePoint中创建一个将作为网站根目录的文件夹。
  3. 使用相应的文件夹配置fstab.yaml
  4. 访问注册门户
  5. 注册应用程序
  6. 对SharePoint网站应用sites.selected权限

1.创建或识别Sharepoint站点

与您的IT部门联系,确定或创建用于基于文档的创作的Sharepoint网站。 一个站点可以“托管”多个网站(项目)。 此网站稍后将接收相应的权限,以便发布服务可以访问该网站。

2.创建网站根文件夹

导航到上面创建或标识的SharePoint站点中所需的位置,并创建一个将用作网站根目录的根文件夹。 最好不要直接使用SharePoint列表根目录,以便您有一个共享空间可供作者放置附属文档,例如草稿文件夹或如何编写文档。

使用website文件夹作为根的示例文件结构可能如下所示:

3.配置fstab.yaml

下一步是将fstab.yaml中的挂载点配置为指向网站根目录。 它通常具有以下形式

https://<tenant>.SharePoint.com/sites/<sp-site>/Shared%20Documents/website

但这可能会因您创建SharePoint网站和列表的方式而异。 要获取url,最简单的方法是从浏览器地址复制并粘贴第一部分,例如:

然后手动添加其余部分(请注意,通过UI复制共享链接会添加不必要的信息,因此最好使用url的规范表示形式)。 撰写url后,可通过在浏览器中再次输入来进行测试。 您最终应会进入网站根目录的文件夹视图。

之后,相应地更新fstab.yaml

例如:

mountpoints:
  /: https://adobeenterprisesupportaem.SharePoint.com/sites/hlx-test-project/Shared%20Documents/website

要完成配置,请将fstab.yaml提交回主分支。

4.访问注册门户

概述

为了使AEM服务能够访问创作的内容,它需要一些信息和设置。 AEM服务(云函数)代表应用程序(或配置的用户)访问MS Graph API。 为此,它需要首先在应用程序的上下文中进行身份验证。 这一点很重要,因为授予应用程序的范围定义了服务对MS Graph API的权限。 例如,应允许读取和写入文档,但不允许更改访问控制。

应用程序在租户的相应Active Directory中表示为“企业应用程序”。 授予该企业应用程序的权限最终定义服务可以在该租户的资源中访问的内容。 某些权限需要由Active Directory管理员批准,用户才能使用该应用程序。 这种所谓的“管理员同意”是一种机制,用于验证和控制应用程序可以拥有的权限。 这是为了防止可疑应用程序诱使用户信任非官方应用程序。 通过额外的管理员同意步骤,IT安全人员可以控制员工可以使用哪些应用程序。

1.登录注册门户

列(包含,全屏图像)

在Azure Portal中查看企业应用程序

假设到目前为止中不存在Franklin Enterprise应用程序 Azure (Microsoft Entra Id)

访问Franklin注册门户

转到https://admin.hlx.page/register,输入项目的github url

以非管理员用户身份登录

没有 管理员权限的用户登录将显示 需要审批的错误,即应用程序需要管理员同意。

问题:如果用户从未登录,则未注册企业应用程序。

以管理员用户身份登录

一种解决方案是以 具有 管理员权限的用户身份登录:

(注意,此时Enterprise应用程序仍未在 azure)

Franklin Registration Service在UI中可见

如果管理员登录(未选中复选框也未授予同意) 每个人),则显示企业应用程序。

使用MSGraph或Powershell创建应用程序

或者,您可以通过MSGraph或Powershell创建Enterprise应用程序。

为了使其在Azure UI中可见,您还需要添加WindowsAzureActiveDirectoryIntegratedApp标记。 这可以在创建应用程序时直接完成。

使用图形资源管理器:

POST https://graph.microsoft.com/v1.0/servicePrincipals
Content-type: application/json
{
    "appId": "e34c45c4-0919-43e1-9436-448ad8e81552",
    "tags": [
        "WindowsAzureActiveDirectoryIntegratedApp"
    ]
}

使用powershell:

PS> connect-MgGraph -Scopes "Application.ReadWrite.All"
PS> New-MgServicePrincipal -AppId e34c45c4-0919-43e1-9436-448ad8e81552 -Tags WindowsAzureActiveDirectoryIntegratedApp
列(包含,全屏图像)

之后,如果您希望非管理员用户登录,则仍需要提供管理员同意。

另请参阅:

审核权限

请注意,仅需要Franklin Registration Service (e34c45c4-0919-43e1-9436-448ad8e81552)应用程序 注册期间,验证用户是否具有对sharepoint的读取权限。 它具有以下 委派权限

  • Openid
    允许用户使用其工作或学校帐户登录应用程序,并允许应用程序查看基本用户配置文件 信息。
  • Profile
    允许应用程序查看用户的基本配置文件(例如,姓名、图片、用户名、电子邮件地址)
  • Files.ReadWrite.All
    允许应用程序读取、创建、更新和删除登录用户可以访问的所有文件。

用户已登录注册门户

完成此初始步骤后,用户将登录到注册门户

添加具有应用程序权限的Franklin服务

列(包含,全屏图像)

添加企业应用程序

登录注册门户时,使用的内容源 项目需要连接到Franklin Service的oauth授权 应用程序。 这是必需的,这样系统才能访问中的文档 sharepoint并将其转换为内部格式(Markdown)并将其存储在Adobe的 存储(S3/R2)以实现快速交付。

使用应用程序sites.selected权限会限制范围,因此更加安全 到单个sharepoint站点。 要连接,请单击Connect Application按钮。

如果您以前从未注册过应用程序或用户,则您可能会看到 以下错误:

code language-none
Unable to validate access: Either scp or roles claim need to be present in the token.

与上述相同,Franklin Service (83ab2922-5f11-4e4d-96f3-d1e0ff152856)的企业应用程序在Azure中尚不存在,

要添加它,请使用图形资源管理器或powershell添加它:

使用图形资源管理器:

POST https://graph.microsoft.com/v1.0/servicePrincipals
Content-type: application/json
{
    "appId": "83ab2922-5f11-4e4d-96f3-d1e0ff152856",
    "tags": [
        "WindowsAzureActiveDirectoryIntegratedApp"
    ]
}

使用powershell:

PS> connect-MgGraph -Scopes "Application.ReadWrite.All"
PS> New-MgServicePrincipal -AppId 83ab2922-5f11-4e4d-96f3-d1e0ff152856 -Tags WindowsAzureActiveDirectoryIntegratedApp

另请参阅:

列(包含,全屏图像)

添加应用程序角色

现在,企业应用程序Franklin Service在Azure中可见。 但它没有任何Sites.Selected应用程序权限。

问题:使用管理员同意UI将授予所有应用程序和委派权限,我们不希望这样做。

一种简单的方法是,同意所有权限,然后再次删除委派的权限。

使用Powershell或Graph Explorer添加应用程序角色

或者,也可以执行以下步骤来添加应用程序角色:

  1. 查找企业应用程序(principalId)的服务主体。 这是您在上面创建的一个。
  2. 查找Microsoft Graph API的服务主体(resourceId)
  3. 查找Sites.Selected 应用程序角色(appRoleId)的ID
  4. 将应用程序角色分配给受管标识(企业应用程序)

使用​ powershell ​可通过以下方式完成此操作:

$ObjectId = "abcdef-1234-49b6-b660-cc85b34fe516"    <<------ replace with your enterprise app id
$AAD_SP = Get-AzureADServicePrincipal -SearchString "Microsoft Graph";
$AAD_SP

$MSI = Get-AzureADServicePrincipal -ObjectId $ObjectId
if($MSI.Count -gt 1)
  {
  Write-Output "More than 1 principal found, please find your principal and copy the right object ID. Now use the syntax $MSI = Get-AzureADServicePrincipal -ObjectId <your_object_id>"
  Exit
  }

$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "Sites.Selected"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId  -PrincipalId $MSI.ObjectId  -ResourceId $AAD_SP.ObjectId[0]  -Id $AAD_AppRole.Id

使用​ 图形资源管理器 ​涉及更多步骤:

  1. 查找Franklin Service的企业应用程序主体:
  GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '83ab2922-5f11-4e4d-96f3-d1e0ff152856'
...
  "value": [
        {
            "id": "6761ada0-733b-4a02-98b2-3db970834fe0",
...

这将是我们的principalId

  1. 查找Microsoft Graph API的服务主体
GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'
...
  "value": [
        {
            "id": "5159db96-7193-414e-9730-b1d1e4448443",
...

这是resourceId。 (定义应用程序角色的资源)

  1. 查找应用程序角色的id。

    GET https://graph.microsoft.com/v1.0/servicePrincipals/${resourceId}/appRoles

resourceId替换为上一步中获取的Microsoft Graph API的服务主体。

GET https://graph.microsoft.com/v1.0/servicePrincipals/5159db96-7193-414e-9730-b1d1e4448443/appRoles
...
        {
            "allowedMemberTypes": [
                "Application"
            ],
            "description": "Allow the application to access a subset of site collections without a signed in user.  The specific site collections and the permissions granted will be configured in SharePoint Online.",
            "displayName": "Access selected site collections",
            "id": "883ea226-0bf2-4a8f-9f9d-92c9162a727d",
            "isEnabled": true,
            "origin": "Application",
            "value": "Sites.Selected"
        },
...

此ID是appRoleId

  1. 将应用程序角色分配给托管身份。 请求的格式为:
POST https://graph.microsoft.com/v1.0/servicePrincipals/${principalId}/appRoleAssignedTo
Content-Type: application/json

{
  "principalId": "${principalId}",
  "resourceId": "${resourceId}",
  "appRoleId": "${appRoleId}"
}
https://graph.microsoft.com/v1.0/servicePrincipals/6761ada0-733b-4a02-98b2-3db970834fe0/appRoleAssignedTo
Content-type: application/json
{
    "principalId": "6761ada0-733b-4a02-98b2-3db970834fe0",
    "resourceId": "5159db96-7193-414e-9730-b1d1e4448443",
    "appRoleId": "883ea226-0bf2-4a8f-9f9d-92c9162a727d"
}
列(包含,全屏图像)

验证权限

最终,您应该会在UI中看到已授予的应用程序权限。

返回注册门户,此时应将更改为:

code language-none

The resource specified in the fstab.yaml does either not exist, or you do not have permission to access it. Please make sure that the url is correct, the enterprise application: "Franklin Service (83ab2922-5f11-4e4d-96f3-d1e0ff152856)" is consented for the required scopes, and that the logged in user has permissions to access it.

(注意,在编写时,此消息不是很准确,它应该写成:

在fstab.yaml中指定的资源不存在,或者您没有权限访问它。 请确保URL正确, 企业应用程序“Franklin Service (83ab2922-5f11-4e4d-96f3-d1e0ff152856)被授予通过 “Sites.Selected”权限。


向Sharepoint站点添加权限

若要向SharePoint站点添加权限,我们需要找到其SiteId

可以使用图形资源管理器再次完成此操作:

GET https://graph.microsoft.com/v1.0/sites/{host-name}:/{server-relative-path}

示例:

GET https://graph.microsoft.com/v1.0/sites/adobeenterprisesupportaem.sharepoint.com:/sites/hlx-test-project

{
...
    "id": "adobeenterprisesupportaem.sharepoint.com,03cc3587-0e4d-405e-b06c-ffb0a622b7ac,5fbc1df5-640c-4780-8b59-809e3193c043",
...
}

使用Id,我们可以设置权限:

POST https://graph.microsoft.com/v1.0/sites/adobeenterprisesupportaem.sharepoint.com,03cc3587-0e4d-405e-b06c-ffb0a622b7ac,5fbc1df5-640c-4780-8b59-809e3193c043/permissions
Content-type: application/json

{
    "roles": [
        "write"
    ],
    "grantedToIdentities": [
        {
            "application": {
                "id": "83ab2922-5f11-4e4d-96f3-d1e0ff152856",
                "displayName": "Franklin Service"
            }
        }
    ]
}

注意: ​如果您在执行上述请求​ 时遇到“访问被拒绝”错误, ​您需要具有“站点管理员”权限才能运行上述步骤。 此外,您可能需要从Graph Explorer的“修改权限”面板为其他“站点”范围授予其他“同意”。

列(包含,全屏图像)
之后,注册门户应显示 canRead: ok
recommendation-more-help
10a6ce9d-c5c5-48d9-8ce1-9797d2f0f3ec