如何使用Sharepoint(应用程序)

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

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

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

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

以下介绍了如何设置 应用程序权限 用于您的项目。 如果要设置技术用户,请继续 此处.

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

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

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.登录注册门户

列(包含)

<h3>在Azure Portal中查看企业应用程序</h3>

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

<h3>访问Franklin注册门户</h3>

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

<h3>以非管理员用户身份登录</h3>

以用户身份登录,该 不会 具有管理员权限将显示需要批准的错误,即应用程序需要管理员同意。

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

<h3>以管理员用户身份登录</h3>

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

(注意,此时企业应用程序仍未在azure中注册)

<h3>Franklin Registration Service在UI中可见</h3>

如果管理员登录(未选中复选框且未向所有人授予同意),则表明存在企业应用程序。

使用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
列(包含)

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

另请参阅:

<h3>审核权限</h3>

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

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

<h3>用户已登录注册门户</h3>

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

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

列(包含)

<h3>添加企业应用程序</h3>

登录注册门户后,项目使用的内容源需要连接到的oauth授权 Franklin Service 应用程序。 这是必需的,以便系统可以访问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

另请参阅:

列(包含)

<h3>添加应用程序角色</h3>

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

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

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

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

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

  1. 查找企业应用程序的服务主体(principalId)。 这是您在上面创建的一个。
  2. 查找Microsoft Graph API的服务主体(resourceId)
  3. 查找ID Sites.Selected 应用程序角色(appRoleId)
  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. 查找企业应用程序的主体:
  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/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"
}
列(包含)

<h3>验证权限</h3>

最终,您应该会在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站点添加权限

若要向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"
            }
        }
    ]
}
列(包含)
之后,注册门户应显示 canRead: ok
recommendation-more-help
10a6ce9d-c5c5-48d9-8ce1-9797d2f0f3ec