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

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

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

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

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

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

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

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

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 を main ブランチにコミットして戻します。

4.登録ポータルにアクセスする

概要

AEM サービスが作成したコンテンツにアクセスするには、いくつかの情報と設定が必要です。 AEM サービス(クラウド関数)は、アプリケーション(または設定済みユーザー)に代わって 🔗MS Graph API にアクセスします。 これを行うには、まず アプリケーションのコンテキストで認証する必要があります。 アプリケーションに指定されるスコープが MS Graph API に対するサービスの権限を定義するので、これは重要です。 例えば、ドキュメントの読み取りと書き込みは許可されますが、アクセス制御を変更することはできません。

アプリケーションは、テナントの各 Active Directory で「エンタープライズアプリケーション」として表されます。 エンタープライズアプリケーションに付与される権限によって、そのテナントのリソースでサービスがアクセスできる項目が最終的に定義されます。 ユーザーがアプリケーションを使用できるようにするには、Active Directory 管理者が特定のアクセス許可を承認する必要があります。 このいわゆる「管理者の同意」とは、アプリが持てる権限を検証し、制御するメカニズムです。 これは、疑わしいアプリがユーザーを騙して、公式ではないアプリを信頼させるのを防ぐためです。 管理者の同意手順を追加すると、IT セキュリティによって、従業員が使用できるアプリを制御できます。

1.登録ポータルへのログイン

列(含まれる、フルスクリーン画像)

<h3>Azure Portal でエンタープライズアプリケーションを表示</h3>

これまでのところ、Franklin Enterprise アプリケーションが Azure (Microsoft Entra Id)

<h3>Franklin 登録ポータルへのアクセス</h3>

https://admin.hlx.page/register に移動し、プロジェクトの github url を入力します

<h3>管理者以外のユーザーとしてログイン</h3>

管理者権限を持っていない ユーザーとしてログインすると 次の内容が表示されます: 承認が必要です。つまり、アプリケーションに管理者の同意が必要です。

問題 :ユーザーがまったくログインしない場合、エンタープライズアプリケーションが登録されません。

<h3>管理者ユーザーとしてログイン</h3>

解決策の 1 つは、管理者権限を持つ ユーザーとしてログインす ことです。

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

<h3>UI に表示された Franklin 登録サービス</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>

登録ポータルにログインしたときに、によって使用されるコンテンツソース。 プロジェクトは、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 に存在しません。

追加するには、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. Sites.Selected Application Role (appRoleId)の ID を検索します
  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. 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

前の手順で取得したMicrosoft Graph API のサービスプリンシパルで resourceId を置き換えます。

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)」は、次の経由で設定済みの sharepoint サイトにアクセスすることを許可されます "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