Sharepoint の使用方法(アプリケーション)

メモ:Adobeの Sharepoint を使用しているプロジェクトの場合は続行してください こちら.

SharePointをコンテンツソースとして使用する場合、AEMは登録済みのMicrosoft Azure アプリケーションを使用してコンテンツにアクセスします。 このアプリケーションには 代理権限 ユーザーの代わりにサービスがSharePointにアクセスできるようにする定義。 このユーザーは、SharePointを使用しているプロジェクトに登録されている必要があります。

または、サービスがアプリケーションとして認証を行い、を使用することもできます。 アプリケーションの権限 サイトにアクセスする。 これには、アプリケーションの権限を付与できるSharePoint サイト管理者による追加の設定が必要です。

を使用する設定をお勧めします アプリケーションの権限 ​これにより、サービスが特定のSharePoint サイトに対して持つアクセスが絞り込まれ、テクニカルユーザーのシークレットを共有する必要がなくなります。 また、パスワードのローテーションに関する問題も軽減されます。

の設定方法を次に説明します アプリケーションの権限 (プロジェクト用)。 技術ユーザーを設定する場合は、続行してください こちら.

SharePointを設定するには、次の手順を実行します。

  1. ドキュメント ベース オーサリングのサイトとして機能する SharePoint サイトを作成または特定します
  2. SharePoint内に、web サイトのルートとなるフォルダーを作成します。
  3. の設定 fstab.yaml 各フォルダーを使用
  4. 登録ポータルへのアクセス
  5. アプリケーションの登録
  6. を適用 sites.selected SharePointサイトに対する権限

1. SharePoint サイトを作成または特定する

IT 部門に問い合わせて、ドキュメントベースのオーサリングに使用する SharePoint サイトを特定または作成します。 1 つのサイトで複数の web サイト(プロジェクト)を「ホスト」できます。 このサイトは後で各権限を受け取り、発行サービスがアクセスできるようになります。

2. web サイトのルートフォルダーを作成する

上記で作成または特定したSharePoint サイト内の目的の場所に移動し、web サイトのルートになるルートフォルダーを作成します。 作成者が販促物ドキュメント(ドラフトフォルダーやオーサリング方法ドキュメントなど)を配置できる共有スペースが確保されるように、SharePointのリストルートを直接使用しないことをお勧めします。

ファイル構造の例は、次のようになります。 website フォルダーをルートとして:

3. fstab.yaml の設定

次の手順では、にマウントポイントを設定します。 fstab.yaml を Web サイトのルートに指定します。 通常は以下のような形をしている:

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

ただし、SharePoint サイトおよびリストの作成方法によって異なる場合があります。 URL を取得する最も簡単な方法は、ブラウザーアドレスから最初の部分をコピーして通過させることです。以下に例を示します。

その後、残りのリンクを手動で追加します(UI を介して共有リンクをコピーすると、不要な情報が追加されるので、URL の正規の表現を使用することをお勧めします)。 URL を作成したら、ブラウザーでもう一度入力してテストできます。 最終的に、web サイトのルートのフォルダービューに移動します。

その後、を更新します 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>

解決策の 1 つは、ユーザーとしてログインし、 実行 管理者権限があること:

(この時点では、エンタープライズアプリケーションはまだ azure に登録されていません)

<h3>UI に表示された Franklin 登録サービス</h3>

管理者が(チェックボックスをオンにせずに)ログインし、全員の同意を得ていない場合、Enterprise アプリケーションが存在します。

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 権限の範囲が 1 つの 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 に存在しません。

追加するには、Graph Explorer または 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 エクスプローラーを使用したアプリケーションの役割の追加

または、アプリの役割を追加するには、次の手順を実行します。

  1. エンタープライズアプリケーションのサービスプリンシパル(principalId)に設定します。 これは上で作成したものです。
  2. Microsoft Graph API のサービスプリンシパルを検索します(resourceId
  3. の ID の検索 Sites.Selected アプリケーションの役割(appRoleId
  4. アプリケーションの役割を管理 ID (エンタープライズアプリケーション)に割り当てます

使用 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. アプリケーションの役割を管理対象 ID に割り当てます。 リクエストの形式は次のとおりです。
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 サービス (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