Обзор выбранных разрешений в OneDrive и SharePoint

SharePoint и OneDrive имеют давно установленную модель разрешений, которая не вписывается в модель областей. Например, глобальный область, предоставляющий доступ ReadWrite к одному списку в клиенте, не существует. Вместо этого выбранные области поддерживают эти сценарии. Изначально Sites.Selected существовал для ограничения доступа приложения к одному семейству веб-сайтов. Теперь списки, элементы списков, папки и файлы также поддерживаются, а все выбранные области теперь поддерживают делегированный режим и режим приложения.

Примечание.

Из-за изменения требований к именованию область новые области перечислены в виде полного кортежа *.SelectedOperations.Selected. Функциональные различия между этим форматом и форматом отсутствуют Sites.Selected .

Scopes

В следующей таблице перечислены области выбранных разрешений.

Scopes Описание
Sites.Selected Управляет доступом к приложениям на уровне семейства веб-сайтов, предоставляя доступ к определенному семейству веб-сайтов.
Списки. SelectedOperations.Selected Управляет доступом к приложениям на уровне списка, предоставляя доступ к определенному списку.
ListItems.SelectedOperations.Selected Управляет доступом к приложениям на уровне файлов, элементов списка или папок, предоставляя доступ к одному или нескольким элементам списка.
Files.SelectedOperations.Selected Управляет доступом к приложению на уровне файлов или папок библиотеки, предоставляя доступ к одному или нескольким файлам.

Как выбранные области работают с разрешениями SharePoint и OneDrive

Когда администратор соглашается с выбранными областями для приложения, он делегирует управление разрешениями ресурсов владельцам этого ресурса в рабочей нагрузке. Для других областей, таких как Files.Read.All, как только область будет предоставлено согласие, приложение сможет получить доступ к ресурсам, которые оно представляет. Для выбранных областей требуется явное действие назначения; приложение, согласилось на Списки. SelectedOperations.Selected изначально не будет иметь доступа.

Для работы с выбранными областями требуется ряд шагов, которые предоставляют администраторам несколько средств управления. В следующем примере используется Lists.SelectedOperations.Selected область, но действия применяются ко всем *. Выбранные области.

  1. Приложение должно быть предоставлено согласие в Entra ID, чтобы приложение или делегированное Lists.SelectedOperations.Selected область.
  2. Приложению должны быть предоставлены разрешения на доступ к списку через вызов с POST /sites/{siteid}/lists/{listid}/permissions определенной ролью.
  3. Приложение должно получить допустимый маркер, содержащий Lists.SelectedOperations.Selected область для вызовов списка разрешений.

Если какой-либо из трех шагов пропущен, у приложения нет доступа. Администраторы двух точек управления:

  • Удалите разрешения для определенного списка с помощью вызова DELETE /sites/{siteid}/lists/{listid}/permissions/{id}, который удаляет доступ к списку для этого приложения.
  • Lists.SelectedOperations.Selected Отзыв согласия область в Entra ID, что блокирует доступ приложения к любому списку, для которого ранее были предоставлены разрешения.

Исходя из этого, вы можете предоставить приложению Lists.SelectedOperations.Selected согласие на область в Entra ID, но не предоставлять разрешения для любого списка. Это означает, что у приложения нет доступа. Аналогичным образом можно вызвать POST /sites/{siteid}/lists/{listid}/permissions любое приложение, но без соответствующих областей, отображаемых в маркере, у приложения нет доступа. Чтобы обеспечить ожидаемый доступ, необходимо выполнить все три шага. Это также относится и к другим *. Выбранные области и соответствующие уровни.

Примечание.

Назначение разрешений приложения спискам, элементам списка, папкам или файлам нарушает наследование назначенного ресурса, поэтому учитывайте ограничения службы для уникальных разрешений в структуре решения. Разрешения на уровне семейства веб-сайтов не нарушают наследование, так как это корень наследования разрешений.

Пример настройки разрешений показан для сайтов; логика аналогична для списков, элементов списка, файлов или папок.

В чем разница между файлами и областями listItems?

В SharePoint все файлы являются элементами списка, но все элементы списка не являются файлами. В результате приложения, которые несут ListItems.SelectedOperations.Selected область, могут получать доступ ко всем элементам списка и файлам и работать с ними до разрешенной роли. Приложения с могут работать только с файлами Files.SelectedOperations.Selected (элементами списка) в библиотеках документов или других списках, помеченных как содержащие документы. Это имитирует поведение Files.Read.All и Files.ReadWrite.All, существующее сегодня, но изолированное в одном файле. Это поведение не меняется в зависимости от пути Microsoft Graph, используемого, например с /drives/{driveid}/items/{itemid} и /sites/{siteid}/lists/{listid}/items/{itemid}; вместо этого поведением управляет назначение, к которому требуется доступ.

Роли

В следующей таблице перечислены четыре роли, которые могут быть назначены приложению для данного ресурса.

Role Описание
read Чтение метаданных и содержимого ресурса.
write Чтение и изменение метаданных и содержимого ресурса.
owner Представляет роль владельца.
fullcontrol Представляет полный контроль над ресурсом.

Запрос

POST https://graph.microsoft.com/v1.0/sites/{siteId}/permissions
Content-Type: application/json

{
  "roles": ["write"],
  "grantedToIdentities": [{
    "application": {
      "id": "89ea5c94-7736-4e25-95ad-3fa95f62b66e",
      "displayName": "Contoso Time Manager App"
    }
  }]
}

Заголовки запросов

Имя Описание
Авторизация Bearer {token}. Обязательно. Дополнительные сведения о проверке подлинности и авторизации.
Content-Type application/json. Обязательный.

Отклик

HTTP/1.1 201 Created
Content-Type: application/json

{
    "id": "1",
    "@deprecated.GrantedToIdentities": "GrantedToIdentities has been deprecated. Refer to GrantedToIdentitiesV2",
    "roles": ["write"],
    "grantedToIdentities": [{
      "application": {
        "id": "89ea5c94-7736-4e25-95ad-3fa95f62b66e",
        "displayName": "Contoso Time Manager App"
      }
    }],
    "grantedToIdentitiesV2": [{
      "application": {
        "id": "89ea5c94-7736-4e25-95ad-3fa95f62b66e",
        "displayName": "Contoso Time Manager App"
      }
    }]
}

Примеры управления разрешениями см. в /permissions разделах API для сайта, списка, listItem и driveItem.

Какие разрешения требуются для управления разрешениями?

Требования к разрешениям зависят от уровня. Во всех делегированных случаях текущему пользователю также требуются достаточные разрешения для управления доступом путем вызова API. В следующей таблице приведены области и области и назначенные роли родительскому ресурсу. Например, если у вас есть роль Sites.Selected область AND FullControl (Sites.Selected+FullControl), вы можете управлять ресурсами в этом семействе веб-сайтов.

Ресурс Необходимые разрешения для ресурсов Примечания
site Sites.FullControl.All Так как вы можете предоставить полный доступ к семейству веб-сайтов с помощью Sites.Selected, это требование обязательно является высоким.
список Sites.FullControl.All, Sites.Selected+FullControl, Sites.Selected+Owner
listItem Sites.FullControl.All, Sites.Selected+FullControl, Sites.Selected+Owner, Списки. SelectedOperations.Selected+FullControl, Списки. SelectedOperations.Selected+Owner
file Sites.FullControl.All, Sites.Selected+FullControl, Sites.Selected+Owner, Списки. SelectedOperations.Selected+FullControl, Списки. SelectedOperations.Selected+Owner

Как вычисляется доступ

Существует два типа маркеров: только приложения и делегированные. В сценариях только приложений нет пользователя и они считаются более высоким риском. При делегировании приложение никогда не может превышать существующие разрешения текущего пользователя и может считаться более низким риском для многих сценариев. Делегирование предпочтительнее, когда это возможно, но оба режима доступны в соответствии с вашими потребностями.

Хранится кортеж идентификатора приложения, идентификатора ресурса и роли. Таким образом, [приложение] имеет [роль] доступ к [ресурсу]. Приложение и роль указываются при создании разрешения через API, а разрешенный путь предоставляет ресурс. Например, приложение Z имеет доступ на чтение к списку по адресу /sites/dev/lists/list1.

Чтобы вычислить доступ, используйте значения, указанные в маркере, чтобы примерно следовать этому потоку:

  1. Проверьте тип маркера (приложение или делегированный).

  2. Найдите запись приложения для предоставленного идентификатора приложения в ресурсе или защищаемого иерархического родителя (наследование).

  3. Происходит одно из следующих действий:

    • Если для доступа к приложению найдена запись для приложения и роль разрешает запрошенную операцию (чтение элемента, обновление списка), доступ предоставляется.
    • В делегированном сценарии разрешения приложения и пользователя вычисляются, а затем пересекаются, что означает, что приложение никогда не может превышать разрешения пользователя, а пользователь никогда не может превышать (через приложение) разрешения приложения, предоставленные согласием.

Следующие примечания относятся к поведению согласия:

  • Приложения могут иметь несколько выбранных согласия, и эти согласия могут применяться на разных уровнях в клиенте.
  • Доступ к приложению теряется сразу после отзыва область. Если приложение имеет Списки.* и Sites.* и ему предоставляется доступ к семейству веб-сайтов и определенному списку в этом семействе веб-сайтов, а затем согласие Sites.* отзывается, приложение сохраняет доступ к списку, к которому ему был предоставлен определенный доступ через согласие Списки.* и предыдущий вызов list/permissions.
  • Если приложение имеет разрешения на доступ к списку через вызов list/permissions, а доступ удаляется через вызов DELETE lists/permissions/id, оно теряет доступ к списку и всем элементам в этом списке, независимо от явных разрешений, заданных для этих элементов списка. Позже при необходимости вы сможете перенаправить разрешения на определенные элементы.
  • Более высокие области, такие как Сайты.* можно использовать для предоставления разрешений для конкретных файлов, но более низкие области никогда не могут предоставить доступ к ресурсам более высокого уровня. Это позволяет приложениям иметь доступ на определенном уровне.
  • Согласие — это внешняя концепция, которую OneDrive и SharePoint используют через предоставленный маркер, и все области, представленные в маркере, учитываются.