Home » Разрабатывайте приложения, использующие разрешения Sites.Selected для сайтов SPO.

Разрабатывайте приложения, использующие разрешения Sites.Selected для сайтов SPO.

С годами API Microsoft Graph постоянно улучшались.

В 2021 году была реализована одна очень востребованная функция «Только приложение» или гранулярный доступ к отдельному сайту вместо всего арендатора, эта область называется «Сайты.Выбрано».

Изначально для этой области существует два уровня разрешений, которые можно назначать приложениям: «чтение» и «запись».

Некоторые клиенты обнаружили, что задачи управления невозможно выполнить даже с уровнем разрешений «на запись». Чтобы решить эту проблему, в этом году были добавлены уровни разрешений «полный контроль» и «управление».

Вот шаги для реализации разрешений App Only Sites.Selected:

Шаг I. Зарегистрируйте приложение AAD на портале Azure. https://portal.azure.comи назовем это приложение «Целевое приложение».

Подробнее см. в этих статьях:
Краткое руководство: регистрация приложения на платформе Microsoft Identity — Microsoft Entra | Майкрософт учиться
Учебник. Регистрация приложения в Azure Active Directory (Microsoft Dataverse) — Power Apps | Майкрософт…

После регистрации целевого приложения скопируйте приведенную ниже информацию в текстовый файл:
Отображаемое имя: Приложение Contoso Time Manager
Идентификатор клиента: d806f38b-a107****-1ec8e90c8ccc
Секрет клиента: XZW8Q*****855JDEw1cxP
Идентификатор каталога (арендатора): 31********95c59c1b

Шаг II. Предоставьте целевому приложению разрешение для API Graph и/или API SharePoint на портале Azure в зависимости от того, будете ли вы получать доступ к ресурсу сайта с помощью
Графический API, например,
https://graph.microsoft.com/v1.0/…
или SharePoint Rest API, например, /_апи/…

Если вам нужно использовать Graph API для доступа к SharePoint, вы предоставляете разрешения Graph API.

Если вам нужно использовать API SharePoint, например SPO Rest API, SPO CSOM, вы предоставляете разрешения SharePoint API.

SPDev_Support_1-1680913069765.png

Шаг III. Используйте конечную точку Graph API, указанную в этой статье. https://learn.microsoft.com/en-us/graph/api/site-post-permissions?view=graph-rest-1.0&tabs=http чтобы назначить целевому приложению разрешение на определенный сайт SharePoint Online.

Read more:  Медиа-партнер Baltimore Banner: звонки в службу экстренной помощи показывают ужас во время массовой стрельбы в Brooklyn Homes

POST 
Content-Type: application/json{ 
 "roles": ["write"],
 "grantedToIdentities": [{
    "application": {
      "id": "89ea5c94-7736-4e25-95ad-3fa95f62b66e",  //Target Application’s Client Id
      "displayName": "Contoso Time Manager App"       //Target Application’s Display name
    }
  }]
}

Импорт заключается в том, что для этого вам нужно иметь другое приложение, которое имеет разрешение Sites.FullControl.All для Graph API, затем вы получаете App Only AccessToken с идентификатором этого приложения, и вы можете сделать вышеуказанный вызов с заголовком авторизации, значением является «Носителем {tokenvalue}».

Ниже приведена Fiddler Trace вызова API Graph для назначения разрешения целевому приложению:

SPDev_Support_2-1680913069776.png

POST  HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV8CJY2R……………qtlW1WoBXu3fdR8G7R-
Accept: application/json
User-Agent: NONISV|SharePointPnP|PnPCore/1.11.2.0 (Microsoft Windows NT 10.0.22621.0)
Content-Type: application/json
Host: graph.microsoft.com
Content-Length: 132

{"roles":["write"],"grantedToIdentities":[{"application":{"id":"ea5f05ef-2a5c-418b-b679-0380b3e83fd3","displayName":"aadAppOnly"}}]}

Теперь вашему целевому приложению успешно предоставлено разрешение на доступ к конкретному сайту!

Если вы выбрали разрешение Graph API Sites.Selected Application, вы можете использовать Graph API для доступа к сайту.

Если вы выбрали разрешение SharePoint Sites.Selected Application, вы можете использовать SharePoint Rest API или CSOM для доступа к сайту.

ПРИМЕЧАНИЕ. Для API-интерфейсов SharePoint вы не можете использовать только секрет клиента для аутентификации, вам необходимо настроить сертификат, чтобы получить токен доступа.

A. Тестовый запуск API графа:

Проверить доступ к конкретному сайтувы можете использовать следующий пример сценария PowerShell, чтобы получить токен доступа только к приложению и получить сайт с помощью Graph API, см. ссылку

#AAD AppOnly for Graph API
$tenantId="{tenantId}"
$aadClientId = "{clientId}"
$aadClientSecret = "{clientSecret}"

$scopes =  "
$loginURL = "
$body = @{grant_type="client_credentials";client_id=$aadClientId;client_secret=$aadClientSecret;scope=$scopes}

$Token = Invoke-RestMethod -Method Post -Uri $loginURL -Body $body
$Token.access_token  #expires after one hour
$headerParams  = @{'Authorization'="$($Token.token_type) $($Token.access_token)"}
$headerParams

#Graph API call to get site
Invoke-WebRequest -Method Get -Headers $headerParams -Uri "

Ответ:

SPDev_Support_3-1680913069781.png

Если вы попытаетесь получить доступ к другому сайту, которому не было предоставлено разрешение, вы получите сообщение об ошибке (403) Forbidden.:

Read more:  10 занятий для детей с СДВГ Они расширяют их возможности, способствуют физическому движению и помогают развивать организаторские способности

SPDev_Support_4-1680913069784.png

B. Доступ к API SharePoint:

Чтобы сделать вызовы SPO REST и CSOM только для приложения, вам потребуется создать сертификаты и загрузить открытый ключ (файл .cer) в Azure — регистрация приложения — приложение — сертификаты и секреты:

SPDev_Support_5-1680913069787.png

Самый простой тестовый скрипт с использованием PnP-команд: Справочник: Подключить-PnPOnline | ПнП PowerShell

$aadClientId = "*"
$SiteURL = 
$secure = ConvertTo-SecureString "***" -AsPlainText –Force

Connect-PnPOnline -Url $SiteURL -CertificatePath c:..test.pfx -Tenant contoso.onmicrosoft.com -ClientId $aadClientId  -CertificatePassword $Secure   

Get-PnPSite

На других языках программирования вы можете использовать библиотеку MSAL для получения токена доступа только к приложению с сертификатом через поток учетных данных клиента, затем вы можете прикрепить этот токен к веб-запросам, см. ссылку: https://learn.microsoft.com/en-us/azure/active-directory/develop/sample-v2-code.

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.