Visão geral das permissões selecionadas no OneDrive e no SharePoint

O SharePoint e o OneDrive têm um modelo de permissões estabelecido há muito tempo que não se encaixa exatamente no modelo de escopos. Por exemplo, não existe um escopo global que fornece acesso ReadWrite a uma única lista em seu locatário. Em vez disso, os escopos selecionados dão suporte a esses cenários. Inicialmente, Sites.Selected existia para restringir o acesso de um aplicativo a um único conjunto de sites. Agora, listas, itens de lista, pastas e arquivos também têm suporte, e todos os escopos selecionados agora dão suporte aos modos delegado e de aplicativo.

Observação

Devido à evolução dos requisitos de nomenclatura de escopo, os escopos mais recentes são listados como uma tupla *.SelectedOperations.Selectedcompleta. Não há diferença funcional entre esse formato e o Sites.Selected formato.

Scopes

A tabela a seguir lista os escopos de permissão selecionados.

Scopes Descrição
Sites.Selecionados Gerencia o acesso ao aplicativo no nível do conjunto de sites, fornecendo acesso a um conjunto de sites específico
Lists.SelectedOperations.Selected Gerencia o acesso ao aplicativo no nível da lista, fornecendo acesso a uma lista específica
ListItems.SelectedOperations.Selected Gerencia o acesso ao aplicativo no nível de arquivos, item de lista ou pasta, fornecendo acesso a um ou mais itens de lista
Files. SelectedOperations.Selected Gerencia o acesso ao aplicativo no nível da pasta do arquivo ou da biblioteca, fornecendo acesso a um ou mais arquivos

Como os escopos selecionados funcionam com permissões do SharePoint e do OneDrive

Quando um administrador consente com escopos selecionados para um aplicativo, ele delega o gerenciamento de permissões de recurso aos proprietários desse recurso dentro da carga de trabalho. Para outros escopos, como Files. Read.All, assim que o escopo for consentido, o aplicativo poderá acessar os recursos que ele representa. Os escopos selecionados exigem uma ação de atribuição explícita; um aplicativo consentido para Lists.SelectedOperations.Selected inicialmente não teria acesso.

Escopos selecionados exigem uma série de etapas para funcionar, o que fornece vários meios de controle para os administradores. O exemplo a seguir usa o Lists.SelectedOperations.Selected escopo, mas as etapas se aplicam a todos *. Escopos selecionados.

  1. O aplicativo deve ser consentido na ID de Entra para ter o escopo do aplicativo ou delegadoLists.SelectedOperations.Selected.
  2. O aplicativo deve receber permissões para uma lista por meio de uma chamada para POST /sites/{siteid}/lists/{listid}/permissions com uma função específica.
  3. O aplicativo deve adquirir um token válido que contenha o Lists.SelectedOperations.Selected escopo para chamadas para a lista de permissões.

Se alguma das três etapas for perdida, o aplicativo não terá acesso. Administradores: dois pontos de controle:

  • Remova as permissões em uma lista específica por meio de uma chamada para , o DELETE /sites/{siteid}/lists/{listid}/permissions/{id}que remove o acesso à lista para esse aplicativo.
  • Revogue o Lists.SelectedOperations.Selected consentimento do escopo no ID de Entra, o que impede o acesso do aplicativo a qualquer lista para a qual ele tenha recebido permissões anteriormente.

Com base nisso, você pode consentir um aplicativo com o Lists.SelectedOperations.Selected escopo no Entra ID, mas não conceder permissões a nenhuma lista - o que significa que o aplicativo não tem acesso. Da mesma forma, você pode chamar POST /sites/{siteid}/lists/{listid}/permissions qualquer aplicativo, mas sem os escopos adequados aparecendo no token, o aplicativo não tem acesso. Todas as três etapas devem ser concluídas para garantir o acesso esperado. Isso também se aplica ao outro *. Escopos selecionados e seus respectivos níveis.

Observação

A atribuição de permissões de aplicativo a listas, itens de lista, pastas ou arquivos interrompe a herança do recurso atribuído, portanto, lembre-se dos limites de serviço para permissões exclusivas no design da solução. As permissões no nível do conjunto de sites não interrompem a herança porque essa é a raiz da herança de permissão.

Um exemplo de definição de permissões é mostrado para sites; A lógica é semelhante para listas, itens de lista, arquivos ou pastas.

Qual é a diferença entre os escopos de arquivos e listItems?

No SharePoint, todos os arquivos são itens de lista, mas nem todos os itens de lista são arquivos. Como resultado, os aplicativos que carregam o ListItems.SelectedOperations.Selected escopo podem acessar e operar em todos os itens de lista e arquivos até sua função permitida. Aplicativos com Files.SelectedOperations.Selected só podem operar em arquivos (itens de lista) dentro de bibliotecas de documentos ou outras listas marcadas como contendo documentos. Isso imita o Files. Read.All e Files. ReadWrite.All que existe hoje, mas isolado em um único arquivo. Esse comportamento não muda com base no caminho do Microsoft Graph usado, como com /drives/{driveid}/items/{itemid} e /sites/{siteid}/lists/{listid}/items/{itemid}; em vez disso, o destino a ser acessado controla o comportamento.

Funções

A tabela a seguir lista as quatro funções que podem ser atribuídas a um aplicativo para um determinado recurso.

Função Descrição
leitura Leia os metadados e o conteúdo do recurso.
gravação Leia e modifique os metadados e o conteúdo do recurso.
owner Representa a função de proprietário.
de controle total Representa o controle total do recurso.

Solicitação

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"
    }
  }]
}

Cabeçalhos de solicitação

Nome Descrição
Autorização {token} de portador. Obrigatório. Saiba mais sobre autenticação e autorização.
Content-Type application/json. Obrigatório.

Resposta

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"
      }
    }]
}

Para obter exemplos que mostram como gerenciar permissões, consulte os tópicos da /permissions API para site, list, listItem e driveItem.

Quais permissões preciso para gerenciar permissões?

Os requisitos de permissão variam de acordo com o nível. Em todos os casos delegados, o usuário atual também precisa de permissões suficientes para gerenciar o acesso chamando a API. A tabela a seguir inclui escopos e escopos + funções atribuídas ao recurso pai. Por exemplo, se você tiver o escopo Sites.Selected E a função FullControl (Sites.Selected+FullControl), poderá gerenciar recursos nesse conjunto de sites.

Recurso Permissões de recurso necessárias Observações
site Sites.FullControl.All Como você pode conceder permissões de controle total a um conjunto de sites usando Sites.Selected, esse requisito é necessariamente alto.
list Sites.FullControl.All, Sites.Selected+FullControl, Sites.Selected+Owner
listItem Sites.FullControl.All, Sites.Selected+FullControl, Sites.Selected+Owner, Lists.SelectedOperations.Selected+FullControl, Lists.SelectedOperations.Selected+Owner
file Sites.FullControl.All, Sites.Selected+FullControl, Sites.Selected+Owner, Lists.SelectedOperations.Selected+FullControl, Lists.SelectedOperations.Selected+Owner

Como o acesso é calculado

Há dois tipos de tokens: somente aplicativo e delegado. Os cenários somente de aplicativo não têm usuário presente e são considerados de maior risco. Com delegado, o aplicativo nunca pode exceder as permissões existentes do usuário atual e pode ser considerado de menor risco para muitos cenários. Delegado é preferencial quando possível, mas ambos os modos estão disponíveis para atender às suas necessidades.

Uma tupla de ID do aplicativo, ID do recurso e função é armazenada. Como tal, o [aplicativo] tem acesso [função] ao [recurso]. Você especifica o aplicativo e a função quando uma permissão é criada por meio da API, e o caminho resolvido fornece o recurso. Por exemplo, o aplicativo Z tem acesso de leitura à lista em /sites/dev/lists/list1.

Para calcular o acesso, use os valores fornecidos no token para seguir aproximadamente este fluxo:

  1. Examinar tipo de token (aplicativo ou delegado).

  2. Localize o registro do aplicativo para a ID do aplicativo fornecido no recurso ou em um pai hierárquico protegível (herança).

  3. Ocorre uma das seguintes situações:

    • Para acesso ao aplicativo, se um registro for encontrado para o aplicativo e a função permitir a operação solicitada (ler um item, atualizar uma lista), o acesso será concedido.
    • No cenário delegado, as permissões do aplicativo e do usuário são calculadas e, em seguida, cruzadas, o que significa que o aplicativo nunca pode exceder as permissões do usuário e o usuário nunca pode exceder (por meio do aplicativo) as permissões de aplicativo consentidas.

As observações a seguir se aplicam ao comportamento de consentimento:

  • Os aplicativos podem ter vários consentimentos selecionados e esses consentimentos podem ser aplicados em vários níveis no locatário.
  • O acesso ao aplicativo é perdido assim que um escopo é revogado. Se um aplicativo tiver Listas.* e Sites.* e receber acesso a um conjunto de sites e a uma lista específica nesse conjunto de sites e, em seguida, o consentimento Sites.* for revogado, o aplicativo manterá o acesso à lista à qual recebeu acesso específico por meio do consentimento Listas.* e a chamada anterior para list/permissions.
  • Se um aplicativo tiver permissões para uma lista por meio de uma chamada para list/permissions, e o acesso for removido por meio de uma chamada para DELETE lists/permissions/id, ele perderá o acesso a essa lista e a todos os itens dessa lista, independentemente de quaisquer permissões explícitas definidas nesses itens da lista. Posteriormente, você poderá conceder novamente permissões de itens específicos, se necessário.
  • Escopos de nível superior, como Sites.*, podem ser usados para conceder permissões específicas de arquivos, mas escopos mais baixos nunca podem fornecer acesso a recursos de nível superior. Isso permite que os aplicativos tenham acesso em um nível específico.
  • O consentimento é um conceito externo, consumido pelo OneDrive e pelo SharePoint por meio do token fornecido, e todos os escopos apresentados no token são respeitados.