Acceso delegado y EWS en Exchange

Obtenga información sobre cómo usar la API administrada de EWS y EWS en Exchange para proporcionar acceso delegado a los buzones de los usuarios.

Para permitir a los usuarios acceder a los buzones de otros usuarios, puede hacer lo siguiente:

  • Agregar delegados y especificar permisos para cada uno.

  • Modificar los permisos de carpeta directamente.

  • Utilizar la suplantación.

Los permisos de carpeta y delegación son óptimos cuando solo concede acceso a unos pocos usuarios, porque tiene que agregar permisos de forma individual para cada buzón. La suplantación es la mejor opción cuando se utilizan varios buzones, ya que permite que una cuenta de servicio acceda fácilmente a cada buzón de una base de datos. En la figura 1 se muestran algunas de las diferencias entre cada tipo de acceso.

Figura 1. Formas de acceder a los buzones de otros usuarios

Un diagrama que muestra los tipos de acceso a los buzones, la relación entre los propietarios de los buzones y el delegado de cada tipo, y el tipo de permiso. Enviar en nombre de los permisos para delegación y/o permisos de carpeta. Enviar como permisos para suplantación.

Cuando se trata de enviar correo o programar reuniones, a los delegados se les pueden conceder permisos de "enviar en nombre de", por lo que el destinatario de un correo electrónico o una convocatoria de reunión enviada por un delegado verá " delegado en nombre del propietario del buzón " cuando reciba el correo electrónico o la convocatoria de reunión en Outlook. Incluir el texto "enviar en nombre de" es un detalle de implementación de cliente y se puede crear mediante los valores "from" y "sender". El valor "from" indica el propietario del buzón y el valor "sender" indica el delegado que envió el correo. Si una cuenta de servicio que suplanta a un usuario envía un correo electrónico o programa una reunión para el propietario del buzón, el mensaje se "envía como" el propietario del buzón. Al destinatario le resulta imposible saber que el correo lo envió la cuenta de servicio. Los usuarios a los que se conceden permisos de carpeta y no acceso delegado no podrán "enviar como" ni "enviar en nombre de" un propietario de buzón. Tienen acceso a las carpetas del buzón y podrían crear elementos en las carpetas, pero no pueden enviar los elementos.

¿Cuándo es adecuado modificar los permisos de carpeta directamente? Por lo general, cuando quiere proporcionar a un usuario acceso a una carpeta, pero no quiere conceder al usuario permisos de "enviar en nombre de", cuando los requisitos de permisos no se asignan a los valores de enumeración de la API administrada de EWS DelegateFolderPermissionLevel o los valores de elemento de EWS PermissionLevel, o si desea proporcionar a un usuario acceso a una sola carpeta personalizada.

Si solo necesita modificar los permisos de carpeta para lograr su objetivo y no necesita agregar un delegado (es decir, no necesita permisos de “enviar en nombre de”), consulte Configurar permisos de carpeta para otro usuario mediante EWS en Exchange.

Tenga en cuenta que también puede usar Outlook o el PowerShell de Exchange Server (Shell de administración de Exchange) para configurar el acceso delegado.

¿Cómo funciona el acceso delegado?

El acceso delegado permite a los usuarios tener acceso a algunas o todas las carpetas del propietario del buzón y actuar en nombre del propietario del buzón. El propietario del buzón puede ser un usuario o un recurso, como una sala de conferencias. Por ejemplo, a un recepcionista se le pueden conceder permisos delegados en una carpeta de calendario de una sala de conferencias para controlar las solicitudes de reserva. Puede usar la API administrada de EWS o EWS para permitir que el propietario del buzón o un administrador agreguen un delegado, especifique a qué carpetas puede acceder el delegado y, a continuación, especifique los permisos para esa carpeta. A los delegados se les puede conceder acceso a las siguientes carpetas:

  • Calendario

  • Tareas

  • Bandeja de entrada

  • Contactos

  • Notas

  • Diario

Cuando un usuario tiene acceso delegado a una o varias de estas carpetas, puede crear, obtener, actualizar, eliminar, copiar y buscar elementos en esa carpeta y en cualquier carpeta secundaria, según los permisos establecidos en la carpeta. La forma en que la aplicación realiza estas acciones depende de si se requiere acceso explícito o implícito.

Delegar permisos

Cuando un administrador o propietario del buzón agrega un delegado a un buzón, también puede establecer el nivel de permisos para una o varias carpetas. Si no se establece un nivel de permisos para una carpeta, el valor predeterminado del permiso es Ninguno. Varios usuarios pueden tener el mismo nivel de permisos en una carpeta, y los usuarios pueden tener distintos niveles de permisos para carpetas diferentes. Si usa la API administrada de EWS, use la propiedad DelegateUser.Permissions, que contiene uno de los valores de enumeración DelegateFolderPermissionLevel para cada carpeta, para establecer permisos delegados en carpetas. Si usa EWS, use el elemento DelegatePermissions para establecer permisos delegados y el elemento PermissionLevel para definir el nivel de permisos.

Tabla 2. Delegar niveles de permisos

Nivel de permisos Descripción
Ninguno
Este es el valor predeterminado para todas las carpetas.
Autor
Un delegado puede leer y crear elementos, así como modificar y eliminar los elementos que crea. Por ejemplo, un delegado puede crear solicitudes de tareas y convocatorias de reunión directamente en la carpeta Tarea o Calendario del propietario del buzón y, a continuación, enviar cualquier elemento en nombre del propietario del buzón.
Editor
Un delegado puede hacer todo lo que un autor puede hacer, así como modificar y eliminar los elementos que creó el propietario del buzón.
Reviewer
Un delegado puede leer elementos; por ejemplo, un delegado con permiso de revisor puede leer mensajes en la Bandeja de entrada de otra persona.
Personalizado
El propietario del buzón ha concedido un conjunto personalizado de permisos al delegado.

La propiedad DelgateUser.ViewPrivateItems de la API administrada de EWS y el elemento ViewPrivateItems de EWS son una configuración global que afecta a todas las carpetas del propietario del buzón, incluidas todas las carpetas Correo, Contactos, Calendario, Tareas, Notas y Diario. No puede permitir el acceso a elementos privados en una sola carpeta.

Acceso explícito

En pocas palabras, el acceso explícito es la forma de entrada para que los delegados realicen acciones en las carpetas o elementos de un propietario del buzón. Se concede acceso explícito a un delegado cuando incluye el nombre de carpeta conocido para la carpeta del propietario de un buzón junto con la dirección SMTP del propietario del buzón en una solicitud al servidor. El acceso es explícito porque la solicitud del delegado indica explícitamente que el contexto del método u operación es el buzón del propietario del buzón y no el buzón del delegado.

El acceso explícito define el contexto de todos los métodos u operaciones realizadas en las carpetas o elementos que avanzan. Todos los identificadores de elemento y carpeta devueltos cuando se establece el acceso explícito se identifican de forma única como pertenecientes al propietario del buzón (aunque no en ningún formato legible). De este modo, la aplicación no necesita especificar la dirección SMTP del propietario del buzón una y otra vez; el contexto está oculto en los identificadores. Después de identificar un elemento o carpeta, un delegado usa realmente el acceso implícito para modificar el elemento. En la ilustración siguiente se muestra el proceso de obtención de acceso explícito e implícito.

Figura 2. Solicitud de acceso explícito e implícito a un elemento o carpeta

Un diagrama que muestra la aplicación enviando una solicitud para el acceso explícito, una respuesta del servidor, una solicitud para el acceso implícito y una respuesta del servidor.

Puede establecer el acceso explícito en muchos escenarios diferentes. Básicamente, siempre que envíe un identificador de carpeta en un método u operación, puede establecer el acceso explícito. Esto puede incluir la búsqueda de carpetas, la búsqueda de citas, la obtención de elementos, la búsqueda de conversaciones, etc.

Acceso explícito y la API administrada de EWS

Puede iniciar el acceso delegado explícito mediante cualquiera de los siguientes métodos sobrecargados que toman un parámetro de entrada FolderId para identificar la carpeta de destino:

Puede usar el parámetro FolderId en cada uno de estos métodos para identificar la carpeta de destino del propietario del buzón, como se indica a continuación.

new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com");

Por ejemplo, para enlazar a la carpeta Calendario, el FolderId en este método de Enlace especifica el nombre de carpeta conocido y la dirección SMTP del propietario del buzón.

CalendarFolder calendar = CalendarFolder.Bind(service, new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com"), new PropertySet());

Al especificar el nombre de carpeta conocido y la dirección SMTP, el delegado puede enlazarse a la carpeta Calendario del propietario del buzón, con lo que se obtiene acceso explícito a la carpeta. Todas las solicitudes posteriores de acceso implícito a los elementos de la carpeta dependen del contexto devuelto en los identificadores de elemento y carpeta. Básicamente, los identificadores contienen el contexto de las llamadas de acceso delegado implícitas. O bien, para recuperar el identificador de elemento de un elemento que cumple criterios específicos, use lo siguiente.

FindItemsResults<Item> results = service.FindItems(new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com"), filter, view);

En este caso, se devuelve el identificador de elemento y, a continuación, el delegado puede usar el acceso implícito para realizar cambios en el elemento mediante el identificador de elemento.

No tiene que volver a iniciar el acceso explícito hasta que necesite un identificador de elemento o un identificador de carpeta al que no haya accedida a través del acceso explícito existente.

Acceso explícito y EWS

Puede iniciar el acceso explícito mediante las operaciones GetFolder, FindItem o FindFolder. Estas operaciones proporcionan la opción de usar el elemento DistinguishedFolderId para identificar la carpeta de destino. El elemento DistinguishedFolderId tiene un único elemento secundario opcional, el elemento Mailbox. El elemento Mailbox, cuando se usa como elemento secundario del elemento DistinguishedFolderId, especifica el buzón al que tiene acceso el delegado. Si el usuario que realiza la llamada tiene permiso para acceder a la carpeta del propietario del buzón, la respuesta contendrá una colección de identificadores para los elementos o carpetas de ese buzón. Los identificadores de elemento y carpeta que se devuelven en la respuesta se pueden usar para el acceso delegado implícito.

Acceso implícito

El acceso implícito se usa después de que un delegado haya recuperado el identificador de un elemento o carpeta en el buzón del propietario del buzón y el delegado quiera actualizar, eliminar o copiar el elemento. Cuando el delegado usa ese identificador de elemento o carpeta en una solicitud, los cambios se realizan en el elemento del buzón del propietario del buzón. El delegado no tiene que incluir la dirección SMTP del propietario del buzón.

Por ejemplo, cuando un delegado tiene el identificador de una de las carpetas del propietario del buzón, el delegado puede realizar una operación FindItem en esa carpeta mediante el identificador de carpeta, sin identificar explícitamente el buzón del propietario del buzón. En ese momento, el delegado puede realizar acciones en la carpeta del propietario del buzón mediante los identificadores que se devuelven en las respuestas.

Acceso implícito y la API administrada de EWS

Si el método FindItems recuperó un identificador de elemento, ese identificador de elemento se puede usar en una llamada al método Item.Bind posterior para enlazar al elemento. A continuación, puede llamar al método Item.Update, Item.Delete o Item.Copy, o cualquier llamada de método que requiera un identificador de elemento, según sea necesario para completar la tarea. Siempre que el delegado tenga los permisos adecuados para la carpeta que contiene el elemento (y, si procede, la carpeta a la que se mueve el elemento), el delegado puede realizar cambios según sus niveles de permisos.

Acceso implícito y EWS

Si la operación FindItem recuperó un identificador de elemento, ese identificador de elemento se puede usar en las operaciones GetItem posteriores para enlazar al elemento. A continuación, puede llamar a la operación UpdateItem, DeleteItem o CopyItem, o cualquier operación que requiera un identificador de elemento, según sea necesario para completar la tarea. Siempre que el delegado tenga los permisos adecuados para la carpeta que contiene el elemento (y, si procede, la carpeta a la que se mueve el elemento), el delegado puede realizar cambios según sus niveles de permisos.

En esta sección

Vea también