Adicionar dados personalizados aos recursos usando extensões

O Microsoft Graph fornece um único ponto de extremidade de API para acessar dados e insights avançados centrados em pessoas através de recursos, como usuário e mensagem. Você também pode estender o Microsoft Graph adicionando propriedades personalizadas a instâncias de recursos sem a necessidade de um armazenamento de dados externo.

Este artigo descreve como o Microsoft Graph dá suporte à extensão de seus recursos, as opções disponíveis para adicionar propriedades personalizadas e quando usá-los.

Importante

Não use extensões para armazenar informações de identificação pessoal confidenciais, como credenciais de conta, números de identificação do governo, dados do titular do cartão, dados de conta corrente, informações médicas ou informações básicas confidenciais.

As extensões mencionadas neste artigo não são semelhantes aos atributos de segurança personalizados. Para entender suas diferenças, confira Como os atributos de segurança personalizados se comparam com extensões?

Por que adicionar dados personalizados ao Microsoft Graph?

  • Como desenvolvedor de ISV você pode decidir manter seu aplicativo leve e armazenar dados de perfil de usuário específicos do aplicativo no Microsoft Graph estendendo o recurso usuário.
  • Como alternativa, você pode querer manter o repositório de perfil de usuário existente do seu aplicativo e adicionar um identificador específico do aplicativo ao recurso do usuário .
  • Como desenvolvedor corporativo, os aplicativos internos que você cria podem depender dos dados específicos de RH da sua organização. A integração em vários aplicativos pode ser simplificada armazenando esses dados personalizados no Microsoft Graph.

Opções de dados personalizados no Microsoft Graph

O Microsoft Graph oferece quatro tipos de extensões para adicionar dados personalizados.

  • Atributos de extensão
  • Extensões de diretório (Microsoft Entra ID)
  • Extensões de esquema
  • Extensões abertas

Atributos de extensão

Microsoft Entra ID oferece um conjunto de 15 atributos de extensão com nomes predefinidos nos recursos de usuário e dispositivo. Essas propriedades eram inicialmente atributos personalizados fornecidos no Active Directory local (AD) e no Microsoft Exchange. No entanto, agora eles podem ser usados para mais do que sincronizar dados locais do AD e do Microsoft Exchange para Microsoft Entra ID por meio do Microsoft Graph.

Experiência do desenvolvedor

Você pode usar os 15 atributos de extensão para armazenar valores string em instâncias de recurso de usuário ou dispositivo, por meio das propriedades onPremisesExtensionAttributes e extensionAttributes, respectivamente. Você pode atribuir os valores ao criar uma nova instância de recurso ou ao atualizar uma instância de recurso existente. Você também pode filtrar pelos valores.

Adicionar ou atualizar dados em atributos de extensão

O exemplo a seguir mostra como armazenar dados em extensionAttribute1 e excluir dados existentes de extensionAttribute13 por meio de uma operação de atualização com um método PATCH.

PATCH https://graph.microsoft.com/v1.0/users/071cc716-8147-4397-a5ba-b2105951cc0b

{
    "onPremisesExtensionAttributes": {
        "extensionAttribute1": "skypeId.adeleVance",
        "extensionAttribute13": null
    }
}

A solicitação retorna uma resposta 204 No Content.

Ler os atributos de extensão

Solicitação
GET https://graph.microsoft.com/v1.0/users?$select=id,displayName,onPremisesExtensionAttributes
Resposta
{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,onPremisesExtensionAttributes)",
    "value": [
        {
            "id": "071cc716-8147-4397-a5ba-b2105951cc0b",
            "displayName": "Adele Vance",
            "onPremisesExtensionAttributes": {
                "extensionAttribute1": "Contractor",
                "extensionAttribute2": "50",
                "extensionAttribute3": null,
                "extensionAttribute4": "1478354",
                "extensionAttribute5": "10239390",
                "extensionAttribute6": null,
                "extensionAttribute7": null,
                "extensionAttribute8": null,
                "extensionAttribute9": null,
                "extensionAttribute10": "11",
                "extensionAttribute11": null,
                "extensionAttribute12": "/o=ExchangeLabs/ou=Exchange Administrative Group (FYDIBOHF47SPDLT)/cn=Recipients/cn=5ee781fc7egc7aa0b9394bddb44e7f04-Adele Vance",
                "extensionAttribute13": null,
                "extensionAttribute14": null,
                "extensionAttribute15": null
            }
        }
    ]
}

Considerações sobre o uso de propriedades de atributo de extensão

O objeto onPremisesExtensionAttributes só pode ser atualizado para objetos que não são sincronizados do AD local.

Os 15 atributos de extensão já estão predefinidos no Microsoft Graph e seus nomes de propriedades não podem ser alterados. Portanto, você não pode usar nomes personalizados como SkypeId para os atributos de extensão. Portanto, sua organização deve controlar as propriedades do atributo de extensão em uso para evitar substituir inadvertidamente seus dados.

Extensões de diretório (Microsoft Entra ID)

As extensões de diretório fornecem aos desenvolvedores uma experiência de extensão fortemente tipada, detectável e filtrada para objetos de diretório.

As extensões de diretório são registradas primeiro em um aplicativo por meio da operação Criar extensionProperty e devem ser explicitamente direcionadas a objetos de diretório específicos e com suporte. Depois que um usuário ou um administrador tiver consentido com o aplicativo no locatário, as propriedades de extensão se tornam imediatamente acessíveis no locatário. Todos os aplicativos autorizados no locatário podem ler e gravar dados em quaisquer propriedades de extensão definidas em uma instância do objeto de diretório de destino.

Para obter a lista de tipos de recursos que podem ser especificados como objetos de destino para uma extensão de diretório, consulte Comparação de tipos de extensão.

Experiência do desenvolvedor

As definições de extensão de diretório são gerenciadas por meio do recurso extensionProperty e seus métodos associados. Os dados são gerenciados por meio das solicitações de API REST que você usa para gerenciar a instância do recurso.

Definir a extensão de diretório

Antes de adicionar uma extensão de diretório a uma instância de recurso, primeiro você deve definir a extensão de diretório.

Solicitação

Na solicitação a seguir, 30a5435a-1871-485c-8c7b-65f69e287e7b está a ID do objeto do aplicativo que possui a extensão de diretório. Você pode criar extensões de diretório que armazenam uma coleção de valores.

POST https://graph.microsoft.com/v1.0/applications/30a5435a-1871-485c-8c7b-65f69e287e7b/extensionProperties

{
    "name": "jobGroupTracker",
    "dataType": "String",
    "targetObjects": [
        "User"
    ]
}
Resposta

Uma propriedade de extensão de diretório chamada extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker é criada com um nome de extensão que segue a seguinte convenção de nomenclatura: extension_{appId-without-hyphens}_{extensionProperty-name}.

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

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applications('30a5435a-1871-485c-8c7b-65f69e287e7b')/extensionProperties/$entity",
    "id": "4e3dbc8f-ca32-41b4-825a-346215d7d20f",
    "deletedDateTime": null,
    "appDisplayName": "HR-sync-app",
    "dataType": "String",
    "isMultiValued": false,
    "isSyncedFromOnPremises": false,
    "name": "extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker",
    "targetObjects": [
        "User"
    ]
}

Adicionar uma propriedade de extensão de diretório a um objeto de destino

Depois de definir a extensão de diretório, agora você pode adicioná-la a uma instância de um tipo de objeto de destino. Você pode armazenar dados na extensão de diretório ao criar uma nova instância do objeto de destino ou ao atualizar um objeto existente. O exemplo a seguir mostra como armazenar dados na extensão do diretório ao criar um novo objeto de usuário .

POST https://graph.microsoft.com/v1.0/users

{
    "accountEnabled": true,
    "displayName": "Adele Vance",
    "mailNickname": "AdeleV",
    "userPrincipalName": "AdeleV@contoso.com",
    "passwordProfile": {
        "forceChangePasswordNextSignIn": false,
        "password": "xWwvJ]6NMw+bWH-d"
    },
    "extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker": "JobGroupN"
}

A solicitação retorna um código de resposta 201 Created e um objeto user no corpo da resposta.

Recuperar uma extensão de diretório

O exemplo a seguir mostra como as extensões de diretório e os dados associados são apresentados em uma instância de recurso. A propriedade de extensão é retornada por padrão por meio do beta ponto de extremidade, mas somente por $select meio do v1.0 ponto de extremidade.

Solicitação

GET https://graph.microsoft.com/beta/users?$select=id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable

Resposta

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker,extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable)",
    "value": [
        {
            "id": "63384f56-42d2-4aa7-b1d6-b10c78f143a2",
            "displayName": "Adele Vance",
            "extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker": "E4",
            "extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable": true
        }
    ]
}

Atualizar ou excluir extensões de diretório

Para atualizar ou excluir o valor da extensão de diretório para uma instância de recurso, use o método PATCH. Para excluir a propriedade de extensão e seu valor associado, defina seu valor como null.

A solicitação a seguir atualiza o valor de uma extensão de diretório e exclui outra propriedade de extensão.

PATCH https://graph.microsoft.com/v1.0/users/63384f56-42d2-4aa7-b1d6-b10c78f143a2

{
    "extension_b7d8e648520f41d3b9c0fdeb91768a0a_permanent_pensionable": null,
    "extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker": "E4"
}

A solicitação retorna o código de resposta 204 No Content.

Considerações sobre o uso de extensões de diretório

Se você excluir acidentalmente uma definição de extensão de diretório, todos os dados armazenados na propriedade associada se tornarão desconhecidos. Para recuperar os dados, crie uma nova definição de extensão de diretório com o mesmo nome da definição excluída, no mesmo aplicativo proprietário.

Quando um objeto de definição é excluído antes da propriedade de extensão correspondente ser atualizada para null, a propriedade conta contra o limite de 100 para o objeto.

Quando a definição é excluída antes que os dados na propriedade de extensão associada sejam excluídos, não há como saber a existência da propriedade de extensão por meio do Microsoft Graph - mesmo que a propriedade desconhecida conte contra o limite de 100.

Excluir um aplicativo proprietário no locatário da casa torna as extensões de diretório associadas e seus dados incoveráveis. Quando você restaura um aplicativo proprietário, ele restaura as definições de extensão de diretório, mas não torna as propriedades de extensão do diretório ou seus dados imediatamente detectáveis; porque restaurar um aplicativo não restaura automaticamente a entidade de serviço associada no locatário. Para tornar as propriedades de extensão do diretório e seus dados detectáveis, crie uma nova entidade de serviço ou restaure a entidade de serviço excluída. Nenhuma alteração é feita em outros locatários nos quais o aplicativo foi consentido.

Extensões de esquema

As extensões de esquema Microsoft Graph são conceitualmente semelhantes às extensões de diretório. Primeiro, você define sua extensão de esquema. Em seguida, use-o para estender instâncias de recurso com suporte com propriedades personalizadas fortemente tipadas. Além disso, você pode controlar o status da extensão de esquema e permitir que ela seja descoberta por outros aplicativos.

Para obter a lista de tipos de recursos que dão suporte a extensões de esquema, consulte Comparação de tipos de extensão.

Experiência do desenvolvedor

Ao criar uma definição de extensão de esquema, você deve fornecer um nome exclusivo para sua id. Há duas opções de nomes:

  • Se você já tiver uma vaidade .com,.net, .govou .edu um .org domínio verificado com seu locatário, você poderá usar o nome de domínio junto com o nome do esquema para definir um nome exclusivo, neste formato {domainName}_{schemaName}. Por exemplo, se o seu domínio personalizado for contoso.com, você pode definir uma id de contoso_mySchema. Essa opção é altamente recomendada.
  • Como alternativa, você pode definir a id como um nome de esquema (sem um prefixo de nome de domínio). Por exemplo, mySchema. O Microsoft Graph atribui uma ID de cadeia de caracteres para você com base no nome fornecido, neste formato: ext{8-random-alphanumeric-chars}_{schema-name}. Por exemplo, extkvbmkofy_mySchema.

A ID é o nome do tipo complexo que armazena seus dados na instância de recurso estendida.

Depois de registrar uma extensão de esquema, ela estará disponível para ser usada por todos os aplicativos no mesmo locatário que o aplicativo proprietário associado (quando no InDevelopment estado) ou por todos os aplicativos em qualquer locatário (quando no Available estado). Assim como as extensões de diretório, os aplicativos autorizados têm a capacidade de ler e gravar dados em quaisquer extensões definidas no objeto de destino.

Você gerencia as definições de extensão de esquema e os dados na propriedade de extensão de esquema correspondente usando conjuntos separados de operações de API. Para gerenciar os dados de extensão de esquema na instância de recurso estendido, use a mesma solicitação REST que você usa para gerenciar a instância de recurso.

  • Use POST para armazenar dados na propriedade de extensão de esquema quando estiver criando um novo usuário.
  • Use PATCH para armazenar dados na propriedade de extensão de esquema ou atualizar ou excluir os dados armazenados.
    • Para excluir dados de uma propriedade, defina seu valor como null.
    • Para excluir dados de todas as propriedades, defina cada propriedade como null. Se todas as propriedades forem null, o objeto de extensão de esquema também será excluído.
    • Para atualizar qualquer propriedade, você deve especificar todas as propriedades no corpo da solicitação. Caso contrário, o Microsoft Graph atualizará as propriedades não especificadas para null.
  • Use GET para ler as propriedades de extensão de esquema para todos os usuários ou usuários individuais no locatário.

Definir uma extensão de esquema

Solicitação
POST https://graph.microsoft.com/v1.0/schemaExtensions

{
    "id": "graphLearnCourses",
    "description": "Graph Learn training courses extensions",
    "targetTypes": [
        "user"
    ],
    "properties": [
        {
            "name": "courseId",
            "type": "Integer"
        },
        {
            "name": "courseName",
            "type": "String"
        },
        {
            "name": "courseType",
            "type": "String"
        }
    ]
}
Resposta
{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#schemaExtensions/$entity",
    "id": "extkmpdyld2_graphLearnCourses",
    "description": "Graph Learn training courses extensions",
    "targetTypes": [
        "user"
    ],
    "status": "InDevelopment",
    "properties": [
        {
            "name": "courseId",
            "type": "Integer"
        },
        {
            "name": "courseName",
            "type": "String"
        },
        {
            "name": "courseType",
            "type": "String"
        }
    ]
}

Adicionar uma extensão de esquema a uma instância de recurso

Depois de definir a extensão de esquema, agora você pode adicionar a propriedade de extensão a uma instância de um tipo de objeto de destino. Você pode armazenar dados na extensão de esquema ao criar uma nova instância do objeto de destino ou ao atualizar um objeto existente. O exemplo a seguir mostra como armazenar dados na propriedade de extensão de esquema ao criar um novo objeto de usuário.

POST https://graph.microsoft.com/beta/users

{
    "accountEnabled": true,
    "displayName": "Adele Vance",
    "mailNickname": "AdeleV",
    "userPrincipalName": "AdeleV@contoso.com",
    "passwordProfile": {
        "forceChangePasswordNextSignIn": false,
        "password": "xWwvJ]6NMw+bWH-d"
    },
    "extkmpdyld2_graphLearnCourses": {
        "courseId": 100,
        "courseName": "Explore Microsoft Graph",
        "courseType": "Online"
    }
}

A solicitação retorna um código de resposta 201 Created e um objeto schemaExtension no corpo da resposta

Atualizar ou excluir uma propriedade de extensão de esquema

Use a operação PATCH para atualizar uma extensão de esquema ou excluir uma extensão de esquema existente. Para excluir a propriedade de extensão e seu valor associado da instância de recurso, defina seu valor como null.

O exemplo a seguir exclui o valor da propriedade ddingId e atualiza a propriedade ddingType. Para excluir a propriedade de extensão extkmpdyld2_graphLearnCourses em sua totalidade, defina seu valor como null.

PATCH https://graph.microsoft.com/beta/users/0668e673-908b-44ea-861d-0661297e1a3e

{
    "extkmpdyld2_graphLearnCourses": {
        "courseType": "Instructor-led",
        "courseId": null
    }
}

A solicitação retorna uma resposta 204 No Content.

Recuperar a propriedade de extensão de esquema

Para ler as propriedades de extensão de esquema em uma instância de recurso, especifique o nome da extensão em uma solicitação $select.

Solicitação
GET https://graph.microsoft.com/beta/users/0668e673-908b-44ea-861d-0661297e1a3e?$select=id,displayName,extkmpdyld2_graphLearnCourses
Resposta
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#users(id,displayName,extkmpdyld2_graphLearnCourses)/$entity",
    "id": "63384f56-42d2-4aa7-b1d6-b10c78f143a2",
    "displayName": "Adele Vance",
    "extkmpdyld2_graphLearnCourses": {
        "@odata.type": "#microsoft.graph.ComplexExtensionValue",
        "courseType": "Instructor-led",
        "courseName": "Explore Microsoft Graph",
        "courseId": null
    }
}

Considerações sobre o uso de extensões de esquema

Uma extensão de esquema deve ter um aplicativo proprietário. A propriedade da extensão de esquema não pode ser reatribuída para outro aplicativo.

Excluir uma definição de extensão de esquema sem definir a extensão de esquema para null torna a propriedade e seus dados de usuário associados desconhecidos.

Excluir um aplicativo proprietário no locatário da casa não exclui a definição de extensão de esquema associada ou a propriedade e os dados que ele armazena. A propriedade de extensão de esquema ainda pode ser lida, excluída ou atualizada para usuários. No entanto, a definição de extensão de esquema não pode ser atualizada.

Extensões abertas

Extensões abertas do Microsoft Graph são tipos abertos que oferecem uma maneira flexível de adicionar dados de aplicativo não tipados diretamente a uma instância do recurso. Essas extensões não são fortemente tipdas, detectáveis ou filtradas.

Para obter a lista de tipos de recursos que dão suporte a extensões abertas do Microsoft Graph, consulte Comparação de tipos de extensão.

Experiência do desenvolvedor

As extensões abertas, juntamente com seus dados, podem ser acessadas por meio da propriedade de navegação extensions da instância do recurso. Eles permitem agrupar propriedades relacionadas para facilitar o acesso e o gerenciamento.

Você define e gerencia extensões abertas em instâncias de recurso em tempo real. Eles são considerados exclusivos para cada objeto e você não precisa aplicar um padrão universalmente consistente para todos os objetos. Por exemplo, no mesmo locatário:

  • O objeto de usuário para Adele pode ter uma extensão aberta chamada socialSettings que tem três propriedades: linkedInProfile, skypeId e xboxGamertag.
  • O objeto de usuário para Bruno não pode ter nenhuma propriedade de extensão aberta.
  • O objeto de usuário para Alex pode ter uma extensão aberta chamada socialSettings com cinco propriedades: tema, cor, idioma, fonte e fontSize.

Criar uma extensão aberta

O exemplo a seguir mostra uma definição de extensão aberta com três propriedades e como as propriedades personalizadas e os dados associados são apresentados em uma instância de recurso.

POST https://graph.microsoft.com/v1.0/users/3fbd929d-8c56-4462-851e-0eb9a7b3a2a5/extensions

{
    "@odata.type": "#microsoft.graph.openTypeExtension",
    "extensionName": "com.contoso.socialSettings",
    "skypeId": "skypeId.AdeleV",
    "linkedInProfile": "www.linkedin.com/in/testlinkedinprofile",
    "xboxGamerTag": "AwesomeAdele",
    "id": "com.contoso.socialSettings"
}

A solicitação retorna um código de resposta 201 Created e um objeto openTypeExtension no corpo da resposta.

Atualizar uma extensão aberta existente

Para atualizar uma extensão aberta, você deve especificar todas as suas propriedades no corpo da solicitação. Caso contrário, as propriedades não especificadas são atualizadas null e excluídas da extensão aberta.

A solicitação a seguir especifica apenas as propriedades linkedInProfile e xboxGamerTag. O valor da propriedade xboxGamerTag está sendo atualizado enquanto a propriedade linkedInProfile permanece a mesma. Essa solicitação também exclui a propriedade skypeId não especificada.

PATCH https://graph.microsoft.com/v1.0/users/3fbd929d-8c56-4462-851e-0eb9a7b3a2a5/extensions/com.contoso.socialSettings

{
    "xboxGamerTag": "FierceAdele",
    "linkedInProfile": "www.linkedin.com/in/testlinkedinprofile"
}

Essa solicitação retorna um código de resposta 204 No Content.

Recuperar as extensões abertas

GET https://graph.microsoft.com/v1.0/users/3fbd929d-8c56-4462-851e-0eb9a7b3a2a5/extensions/com.contoso.socialSettings

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('3fbd929d-8c56-4462-851e-0eb9a7b3a2a5')/extensions/$entity",
    "@odata.type": "#microsoft.graph.openTypeExtension",
    "xboxGamerTag": "FierceAdele",
    "linkedInProfile": "www.linkedin.com/in/testlinkedinprofile",
    "id": "com.contoso.socialSettings"
}

Considerações sobre o uso de extensões abertas

Excluir um aplicativo criador não afeta a extensão aberta e os dados que ele armazena.

Comparação de tipos de extensão

A tabela a seguir compara os tipos de extensão, o que deve ajudá-lo a decidir qual opção é mais apropriada para seu cenário.

Recursos Atributos de extensão de 1 a 15 Extensões de diretório Extensões de esquema Extensões abertas
Tipos de recurso com suporte user
device
user
group
administrativeUnit
application
device
organization
user
group
administrativeUnit
contact
device
event (calendários de usuário e grupo)
message
organização
postagem
user
Grupo
contact
device
event1 (calendários de usuário e grupo)
message
organização
postagem
todoTask
todoTaskList
Fortemente tipado Não Sim Sim Não
Filtráveis Sim Sim Sim Não
Pode armazenar uma coleção Não Sim Não Não
Vinculado a um aplicativo "proprietário" Não Sim Sim Não
Gerenciado por meio de Microsoft Graph
Centro de administração do Exchange
Microsoft Graph Microsoft Graph Microsoft Graph
Sincronizar dados do local para extensões usando o AD Connect Sim, para usuários Sim Não Não
Criar regras de associação dinâmica usando dados e propriedades de extensão personalizadas Sim Sim Não Não
Utilizável para personalizar declarações de token Sim Sim (1, 2) Não Não
Disponível no Azure AD B2C Sim Sim Sim Sim
Limites
  • 15 atributos predefinidos por instância de recurso de dispositivo ou usuário
  • 100 valores de extensão por instância de recurso
  • Máximo de cinco definições por aplicativo proprietário
  • 100 valores de extensão por instância de recurso (somente objetos de diretório)
  • Duas extensões abertas por aplicativo criador por instância de recurso2
  • Máx. de 2 Kb por extensãoaberta 2
  • Para recursos do Outlook, cada extensão aberta é armazenada em um Propriedade mapeada MAPI3
  • Observação

    1 Devido a uma limitação de serviço existente, os representantes não podem criar eventos abertos acrescentados à extensão em calendários de caixa de correio compartilhados. As tentativas de fazer isso resultarão em uma resposta de ErrorAccessDenied.

    2 Esses limites em extensões abertas se aplicam aos seguintes recursos de diretório: usuário, grupo, dispositivo e organização.

    3Cada extensão aberta é armazenada em uma propriedade nomeada MAPI, que é um recurso limitado na caixa de correio de um usuário. Esse limite se aplica aos seguintes recursos do Outlook: mensagem, eventoe contato

    Você pode gerenciar todas as extensões quando estiver conectado com uma conta corporativa ou de estudante. Além disso, você pode gerenciar extensões abertas para os seguintes recursos quando conectado com uma conta pessoal Microsoft: evento, postagem, grupo, mensagem, contato e usuário.

    Permissões e privilégios

    Os mesmos privilégios que seu aplicativo requer para ler ou gravar em uma instância de recurso também são necessários para gerenciar quaisquer dados de extensões nessa instância de recurso. Por exemplo, em um cenário delegado, um aplicativo só pode atualizar os dados de extensão de qualquer usuário se receber a permissão User.ReadWrite.All e o usuário conectado tiver suporte Microsoft Entra função de administrador.