Microsoft Office 365 アクティビティを「アプリケーション ID とシークレット」認証で使用するとき特定のSharePointサイトにだけアクセス可能にするには、Microsoft Entra ID (Azure Active Directory)のアプリケーションにSites.Selected権限を設定し、その後対象のSharePointサイトに当該のアプリケーションに対する権限を設定します。
以下に具体的な手順をご案内します。
設定手順
1. まず次のガイドに従って設定を行います。
「APIのアクセス許可」の箇所でサイトに関して次の権限を設定する記述がありますが、この部分を変更する必要があります。
- Sites.Read.All
- Sites.ReadWrite.All
上記の設定ではすべてのサイトへのアクセスが許可されるため、代わりに次の権限を指定します。
- Sites.Selected
その後、必要に応じて作成したアプリケーションにサイトへのアクセス権限を追加します。
以下ではMicrosoft社が提供するGraph Explorerでの手順を記載します。
2. 次のURLを開き、サインインを行います。
3. サインイン後、「Consent to permissions」をクリックし、Sitesに関連する権限(Sites.Read.All, Sites.ReadWrite.All, Sites.FullControll.All, Sites.Manage.All)をGraph Explorerに付与します。
4. 対象のサイトのIDを調べます。
次のようなリクエストをGraph Explorerで行い、"value"配列から対象のサイトに一致するアイテムを見つけ、その中の"id"の値がサイトのIDになります。
GET https://graph.microsoft.com/v1.0/sites?search=<SharePointサイト名>
次の例では [xxxxxx.sharepoint.com](http://xxxxxx.sharepoint.com/),ea97e1cd-4719-4907-b26e-cd5c246bd2aa,e8b23463-6af0-43e5-b6c1-ea141f11ecc9
がサイトのIDです。
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#sites",
"@microsoft.graph.tips": "Use $select to choose only the properties your app needs, as this can lead to performance improvements. For example: GET sites?$select=displayName,error",
"value": [
{
"createdDateTime": "2020-04-21T03:22:55Z",
"id": "xxxxxx.sharepoint.com,ea97e1cd-4719-4907-b26e-cd5c246bd2aa,e8b23463-6af0-43e5-b6c1-ea141f11ecc9",
"lastModifiedDateTime": "2020-04-18T23:28:49Z",
"name": "xxxxxx",
"webUrl": "https://xxxxxx.sharepoint.com/sites/xxxxxx",
"displayName": "xxxxxx",
"root": {},
"siteCollection": {
"hostname": "xxxxx.sharepoint.com"
}
},
~略~
5. サイトへのアクセス権をアプリケーションに付与します。
次のようなリクエストをGraph Explorerで行います。ここでは作成したアプリケーションにあるサイトへのwrite権限を与えています。
POST https://graph.microsoft.com/v1.0/sites/<対象のサイトのID>/permissions
{
"roles": ["write"],
"grantedToIdentities": [{
"application": {
"id": "<作成したアプリケーションのID>",
"displayName": "<作成したアプリケーションの名前>"
}
}]
}
HTTP レスポンスステータスコード201が返れば成功です。
6. O365アクティビティからのアクセスが想定通りになるかを確認します。
権限が不足しアクセスに失敗する場合、次のようなエラーが発生します。
RemoteException wrapping Microsoft.Graph.ServiceException: Code: accessDenied
Message: Access denied
結果が想定通りでない場合、問題が生じているGraph APIを特定するためにFiddlerを使用し、HTTPリクエストの詳細を確認します。
参考: