Agregar datos personalizados a los recursos mediante extensiones

Microsoft Graph proporciona un único punto de conexión de API para acceder a datos e información enriquecidos centrados en las personas a través de recursos como el usuario y el mensaje. También puede ampliar Microsoft Graph agregando propiedades personalizadas a instancias de recursos sin necesidad de un almacén de datos externo.

En este artículo se describe cómo Microsoft Graph admite la ampliación de sus recursos, las opciones disponibles para agregar propiedades personalizadas y cuándo usarlas.

Importante

No debe utilizar extensiones para almacenar información de identificación personal confidencial, como credenciales de cuenta, números de identificación gubernamentales, datos de propietarios de tarjetas de crédito, datos de cuentas bancarias, información médica o antecedentes confidenciales.

Las extensiones mencionadas en este artículo no son similares a los atributos de seguridad personalizados. Para comprender sus diferencias, consulte ¿Cómo se comparan los atributos de seguridad personalizados con las extensiones?

¿Por qué agregar datos personalizados a Microsoft Graph?

  • Como desarrollador de ISV, puede que no desee que su aplicación ocupe mucho espacio y almacenar datos específicos del usuario específico de la aplicación en Microsoft Graph extendiendo el recurso usuario.
  • Como alternativa, es posible que quiera conservar el almacén de perfiles de usuario existente de la aplicación y agregar un identificador específico de la aplicación al recurso de usuario .
  • Como desarrollador empresarial, las aplicaciones internas que compila pueden depender de los datos específicos de RR. HH de su organización. La integración dentro de varias aplicaciones se puede simplificar almacenando estos datos personalizados en Microsoft Graph.

Opciones de datos personalizadas en Microsoft Graph

Microsoft Graph ofrece cuatro tipos de extensiones para agregar datos personalizados.

  • Atributos de extensión
  • Extensiones de directorio (Microsoft Entra ID)
  • Extensiones de esquema
  • Extensiones abiertas

Atributos de extensión

Microsoft Entra ID ofrece un conjunto de 15 atributos de extensión con nombres predefinidos en los recursos de usuario y dispositivo. Estas propiedades eran inicialmente atributos personalizados proporcionados en Active Directory (AD) local y Microsoft Exchange. Sin embargo, ahora se pueden usar para más que sincronizar datos locales de AD y Microsoft Exchange para Microsoft Entra ID a través de Microsoft Graph.

Experiencia del desarrollador

Puede usar los 15 atributos de extensión para almacenar valores String en instancias de recursos usuario o dispositivo, a través de las propiedades onPremisesExtensionAttributes y extensionAttributes respectivamente. Puede asignar los valores al crear una nueva instancia de recurso o al actualizar una instancia de recurso existente. También puede filtrar por los valores.

Agregar o actualizar datos en atributos de extensión

En el ejemplo siguiente se muestra cómo almacenar datos en extensionAttribute1 y eliminar los datos existentes de extensionAttribute13 mediante una operación de actualización con un método PATCH.

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

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

La solicitud devuelve un objeto de respuesta 204 No Content.

Leer los atributos de extensión

Solicitud
GET https://graph.microsoft.com/v1.0/users?$select=id,displayName,onPremisesExtensionAttributes
Respuesta
{
    "@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
            }
        }
    ]
}

Consideraciones sobre el uso de propiedades de atributo de extensión

El objeto onPremisesExtensionAttributes solo se puede actualizar para los objetos que no se sincronizan desde AD local.

Los 15 atributos de extensión ya están predefinidos en Microsoft Graph y sus nombres de propiedad no se pueden cambiar. Por lo tanto, no puede usar nombres personalizados como SkypeId para los atributos de extensión. Por lo tanto, la organización debe realizar un seguimiento de las propiedades del atributo de extensión en uso para evitar sobrescribir involuntariamente sus datos.

Extensiones de directorio (Microsoft Entra ID)

Las extensiones de directorio proporcionan a los desarrolladores una experiencia de extensión fuertemente tipada, reconocible y filtrable para objetos de directorio.

Las extensiones de directorio se registran primero en una aplicación mediante la operación Create extensionProperty y deben tener como destino explícitamente objetos de directorio específicos y admitidos. Después de que un usuario o un administrador haya dado su consentimiento a la aplicación en el inquilino, las propiedades de la extensión se vuelven accesibles inmediatamente en el inquilino. Todas las aplicaciones autorizadas del inquilino pueden leer y escribir datos en las propiedades de extensión definidas en una instancia del objeto de directorio de destino.

Para obtener la lista de tipos de recursos que se pueden especificar como objetos de destino para una extensión de directorio, consulte Comparación de tipos de extensión.

Experiencia del desarrollador

Las definiciones de extensión de directorio se administran a través del recurso extensionProperty y sus métodos asociados. Los datos se administran a través de las solicitudes de API REST que se usan para administrar la instancia de recurso.

Definición de la extensión de directorio

Para poder agregar una extensión de directorio a una instancia de recurso, primero debe definir la extensión de directorio.

Solicitud

En la solicitud siguiente, 30a5435a-1871-485c-8c7b-65f69e287e7b es el identificador de objeto de la aplicación propietaria de la extensión de directorio. Puede crear extensiones de directorio que almacenen una colección de valores.

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

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

Se crea una propiedad de extensión de directorio denominada extension_b7d8e648520f41d3b9c0fdeb91768a0a_jobGroupTracker con un nombre de extensión que sigue la siguiente convención 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"
    ]
}

Agregar una propiedad de extensión de directorio a un objeto de destino

Después de definir la extensión de directorio, ahora puede agregarla a una instancia de un tipo de objeto de destino. Puede almacenar datos en la extensión de directorio al crear una nueva instancia del objeto de destino o al actualizar un objeto existente. En el ejemplo siguiente se muestra cómo almacenar datos en la extensión de directorio al crear un nuevo objeto de usuario .

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

La solicitud devuelve un código de respuesta 201 Created y un objeto user en el cuerpo de la respuesta.

Recuperación de una extensión de directorio

En el ejemplo siguiente se muestra cómo se presentan las extensiones de directorio y los datos asociados en una instancia de recurso. La propiedad de extensión se devuelve de forma predeterminada a través del beta punto de conexión, pero solo a $select través del v1.0 punto de conexión.

Solicitud

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

Respuesta

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

Actualización o eliminación de extensiones de directorio

Para actualizar o eliminar el valor de la extensión de directorio de una instancia de recurso, use el método PATCH. Para eliminar la propiedad de extensión y su valor asociado, establezca su valor en null.

La siguiente solicitud actualiza el valor de una extensión de directorio y elimina otra propiedad de extensión.

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

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

La solicitud devuelve un código de respuesta 204 No Content.

Consideraciones para usar extensiones de directorio

Si elimina accidentalmente una definición de extensión de directorio, los datos almacenados en la propiedad asociada no se pueden detectar. Para recuperar los datos, cree una nueva definición de extensión de directorio con el mismo nombre que la definición eliminada, en la misma aplicación propietaria.

Cuando se elimina un objeto de definición antes de que la propiedad de extensión correspondiente se actualice a null, la propiedad cuenta con el límite de 100 para el objeto.

Cuando se elimina la definición antes de que se eliminen los datos de la propiedad de extensión asociada, no hay ninguna manera de saber la existencia de la propiedad de extensión a través de Microsoft Graph, aunque la propiedad no detectable cuente con el límite de 100.

La eliminación de una aplicación de propietario en el inquilino principal hace que las extensiones de directorio asociadas y sus datos no se puedan detectar. Al restaurar una aplicación de propietario, restaura las definiciones de extensión de directorio , pero no hace que las propiedades de la extensión de directorio o sus datos se puedan detectar inmediatamente; porque la restauración de una aplicación no restaura automáticamente la entidad de servicio asociada en el inquilino. Para que las propiedades de la extensión de directorio y sus datos sean reconocibles, cree una nueva entidad de servicio o restaure la entidad de servicio eliminada. No se realizan cambios en otros inquilinos en los que se ha dado su consentimiento a la aplicación.

Extensiones de esquema

Las extensiones de esquema de Microsoft Graph son conceptualmente similares a las extensiones de directorio. En primer lugar, defina la extensión de esquema. A continuación, úselo para ampliar las instancias de recursos admitidas con propiedades personalizadas fuertemente tipadas. Además, es posible controlar el estado de su extensión de esquema y permitir que sea reconocible por otras aplicaciones.

Para obtener la lista de tipos de recursos que admiten extensiones de esquema, consulte Comparación de tipos de extensión.

Experiencia del desarrollador

Al crear una definición de extensión de esquema, debe proporcionar un nombre único para su id. Existen dos opciones de nomenclaturas:

  • Si ya tiene una vanidad .com,.net , .govo .edu un .org dominio que se comprueba con el inquilino, puede usar el nombre de dominio junto con el nombre del esquema para definir un nombre único, en este formato {domainName}_{schemaName}. Por ejemplo, si su dominio de cortesía es contoso.com, puede definir un id. de contoso_mySchema. Esta opción es muy recomendable.
  • Como alternativa, puede establecer el identificador en un nombre de esquema (sin un prefijo de nombre de dominio). Por ejemplo, mySchema. Microsoft Graph le asigna un identificador de cadena en función del nombre proporcionado, en este formato: ext{8-random-alphanumeric-chars}_{schema-name}. Por ejemplo, extkvbmkofy_mySchema.

El identificador es el nombre del tipo complejo que almacena los datos en la instancia de recurso extendida.

Una vez que registra una extensión de esquema, está disponible para que la usen todas las aplicaciones del mismo inquilino que la aplicación de propietario asociada (cuando se encuentra en el InDevelopment estado) o todas las aplicaciones de cualquier inquilino (cuando estén en el Available estado ). Al igual que las extensiones de directorio, las aplicaciones autorizadas tienen la capacidad de leer y escribir datos en cualquier extensión definida en el objeto de destino.

Las definiciones de extensión de esquema y los datos de la propiedad de extensión de esquema correspondiente se administran mediante conjuntos independientes de operaciones de API. Para administrar los datos de extensión de esquema en la instancia de recurso extendida, use la misma solicitud REST que se usa para administrar la instancia de recurso.

  • Use POST para almacenar datos en la propiedad de extensión de esquema al crear un nuevo usuario.
  • Use PATCH para almacenar datos en la propiedad de extensión de esquema o actualizar o eliminar los datos almacenados.
    • Para eliminar datos de una propiedad, establezca su valor en null.
    • Para eliminar datos de todas las propiedades, establezca cada propiedad nullen . Si todas las propiedades son null, también se elimina el objeto de extensión de esquema.
    • Para actualizar cualquier propiedad, debe especificar todas las propiedades del cuerpo de la solicitud. De lo contrario, Microsoft Graph actualiza las propiedades no especificadas a null.
  • Use GET para leer las propiedades de extensión de esquema para todos los usuarios o usuarios individuales del inquilino.

Definición de una extensión de esquema

Solicitud
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"
        }
    ]
}
Respuesta
{
    "@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"
        }
    ]
}

Agregar una extensión de esquema a una instancia de recurso

Después de definir la extensión de esquema, ahora puede agregar la propiedad de extensión a una instancia de un tipo de objeto de destino. Puede almacenar datos en la extensión de esquema al crear una nueva instancia del objeto de destino o al actualizar un objeto existente. En el siguiente ejemplo se muestra cómo almacenar datos en la propiedad de extensión de esquema al crear un nuevo objeto de usuario.

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

La solicitud devuelve un código de respuesta 201 Created y un objeto schemaExtension en el cuerpo de la respuesta

Actualizar o eliminar una propiedad de extensión de esquema

Use la operación PATCH para actualizar una extensión de esquema o eliminar una extensión de esquema existente. Para eliminar la propiedad de extensión y su valor asociado de la instancia de recurso, establezca su valor en null.

En el siguiente ejemplo se elimina el valor de la propiedad courseId y se actualiza la propiedad courseType. Para eliminar la propiedad de extensión extkmpdyld2_graphLearnCourses en su totalidad, establezca su valor en null.

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

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

La solicitud devuelve un objeto de respuesta 204 No Content.

Recuperar la propiedad de extensión de esquema

Para leer las propiedades de extensión de esquema en una instancia de recurso, especifique el nombre de la extensión en una solicitud $select.

Solicitud
GET https://graph.microsoft.com/beta/users/0668e673-908b-44ea-861d-0661297e1a3e?$select=id,displayName,extkmpdyld2_graphLearnCourses
Respuesta
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
    }
}

Consideraciones sobre el uso de extensiones de esquema

Una extensión de esquema debe tener una aplicación de propietario. La propiedad de la extensión de esquema no se puede reasignar a otra aplicación.

La eliminación de una definición de extensión de esquema sin establecer la extensión de esquema en null hace que la propiedad y sus datos de usuario asociados no se puedan detectar.

La eliminación de una aplicación de propietario en el inquilino principal no elimina la definición de extensión de esquema asociada ni la propiedad ni los datos que almacena. La propiedad de extensión de esquema todavía se puede leer, eliminar o actualizar para los usuarios. Sin embargo, la definición de extensión de esquema no se puede actualizar.

Extensiones abiertas

Las extensiones abiertas de Microsoft Graph son tipados abiertos que ofrecen una forma flexible de agregar datos de la aplicación sin tipado directamente a una instancia de recurso. Estas extensiones no están fuertemente tipadas, detectables ni filtrables.

Para obtener la lista de tipos de recursos que admiten extensiones abiertas de Microsoft Graph, consulte Comparación de tipos de extensiones.

Experiencia del desarrollador

Las extensiones abiertas, junto con sus datos personalizados, son accesibles a través de la propiedad de navegación extensions de la instancia del recurso. Permiten agrupar propiedades relacionadas para facilitar el acceso y la administración.

Las extensiones abiertas se definen y administran sobre la marcha en las instancias de recursos. Se consideran únicos para cada objeto y no es necesario aplicar un patrón coherente universalmente para todos los objetos. Por ejemplo, en el mismo inquilino:

  • El objeto de usuario de Adele puede tener una extensión abierta denominada socialSettings que tiene tres propiedades: linkedInProfile, skypeId y xboxGamertag.
  • El objeto de usuario de Bruno no puede tener ninguna propiedad de extensión abierta.
  • El objeto de usuario de Alex puede tener una extensión abierta denominada socialSettings con cinco propiedades: theme, color, language, font y fontSize.

Crear una extensión abierta

En el ejemplo siguiente se muestra una definición de extensión abierta con tres propiedades y cómo se presentan las propiedades personalizadas y los datos asociados en una instancia 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"
}

La solicitud devuelve un código de respuesta 201 Created y un objeto openTypeExtension en el cuerpo de la respuesta.

Actualizar una extensión abierta existente

Para actualizar una extensión abierta, debe especificar todas sus propiedades en el cuerpo de la solicitud. De lo contrario, las propiedades no especificadas se actualizan null y eliminan de la extensión abierta.

La siguiente solicitud especifica solo las propiedades linkedInProfile y xboxGamerTag. El valor de la propiedad xboxGamerTag se está actualizando mientras que la propiedad linkedInProfile sigue siendo la misma. Esta solicitud también elimina la propiedad skypeId no 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"
}

Esta solicitud devuelve un código de respuesta 204 No Content.

Recuperar las extensiones abiertas

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

Consideraciones sobre el uso de extensiones abiertas

La eliminación de una aplicación creadora no afecta a la extensión abierta y a los datos que almacena.

Comparación de tipos de extensión

En la tabla siguiente se comparan los tipos de extensión, lo que debería ayudarle a decidir qué opción es más adecuada para su escenario.

Funcionalidad Atributos de extensión 1 a 15 Extensiones de directorio Extensiones de esquema Extensiones abiertas
Tipos de recursos admitidos usuario
dispositivo
user
group
administrativeUnit
application
dispositivo
organization
user
group
administrativeUnit
contact
dispositivo
event (calendarios de usuario y grupo)
message
organization
post
user
Grupo
contact
dispositivo
event1 (calendarios de usuario y grupo)
message
organization
post
todoTask
todoTaskList
Con establecimiento inflexible de tipos No No
Filterable No
Puede almacenar una colección No No No
Vinculado a una aplicación "propietario" No No
Administrado a través de Microsoft Graph
Centro de administración de Exchange
Microsoft Graph Microsoft Graph Microsoft Graph
Sincronización de datos del entorno local con extensiones mediante AD Connect Sí, para usuarios No No
Crear reglas de pertenencia dinámica mediante datos y propiedades de extensión personalizados No No
Se puede utilizar para personalizar las solicitudes de token Sí (1, 2) No No
Disponible en Azure AD B2C
Límites
  • 15 atributos predefinidos por instancia de recurso de usuario o dispositivo
  • 100 valores de extensión por instancia de recurso
  • Un máximo de cinco definiciones por aplicación propietaria
  • 100 valores de extensión por instancia de recurso (solo objetos de directorio)
  • Dos extensiones abiertas por aplicación creadora por instancia de recurso 2
  • Máx. de 2 Kb por extensiónabierta 2
  • Para los recursos de Outlook, cada extensión abierta se almacena en una propiedad con nombre MAPI3.
  • Nota:

    1 Debido a una limitación de servicio existente, los delegados no pueden crear eventos anexados por extensión abierta en calendarios de buzones compartidos. Los intentos de hacerlo producirán una ErrorAccessDenied respuesta.

    2 Estos límites en las extensiones abiertas se aplican a los siguientes recursos de directorio: usuario, grupo, dispositivo y organización.

    3 Cada extensión abierta se almacena en una propiedad con nombre MAPI, que es un recurso limitado en el buzón de correo de un usuario. Este límite se aplica a los siguientes recursos de Outlook: message, event y contact

    Puede administrar todas las extensiones cuando haya iniciado sesión con una cuenta profesional o educativa. Además, puede administrar extensiones abiertas para los siguientes recursos al iniciar sesión con una cuenta Microsoft personal: event, post, group, message, contact y user.

    Permisos y privilegios

    Los mismos privilegios que requiere la aplicación para leer o escribir en una instancia de recurso también son necesarios para administrar los datos de extensiones en esa instancia de recurso. Por ejemplo, en un escenario delegado, una aplicación solo puede actualizar los datos de extensión de cualquier usuario si se le concede el permiso User.ReadWrite.All y el usuario que ha iniciado sesión tiene un rol de administrador de Microsoft Entra compatible.