Pregunta

Estoy utilizando los servicios web de Exchange para buscar, crear, actualizar y eliminar citas de los calendarios de una o más personas. La aplicación sería utilizada por un gerente para ver el tiempo de vacaciones de los empleados, así como para asignar citas según la disponibilidad.

Para que todo esto funcione, las credenciales de un usuario autenticado deben enviarse al servicio web. Hasta ahora, los dos métodos que he encontrado que permitirían esto son 1) pasar el nombre de usuario y la contraseña de cada usuario y 2) hacerse pasar por un usuario para usar DefaultCredentials. La opción DefaultCredentials no funciona para nosotros porque no permitimos la suplantación de usuarios.

¿Alguien sabe de otra manera?

¿Fue útil?

Solución

¿Existen restricciones de la política de la empresa que le impidan utilizar la suplantación? ¿Te refieres a la suplantación de Windows o la suplantación de Exchange?

Dependiendo de la suplantación que no puedas usar, una alternativa podría ser el acceso delegado.

Si el objetivo es permitir que un administrador vea varios buzones, aquí hay algunas opciones:

(1) Otorgue acceso delegado a los buzones de los empleados al administrador. Dependiendo del nivel de acceso delegado, esto permitiría al administrador ver los buzones de los empleados y editarlos según sea necesario. Hay una advertencia acerca de este enfoque, dependiendo de qué / cómo se otorgue el acceso, el delegado (empleado) podría eliminar el acceso e impedir que el administrador vea sus calendarios.

Para la autenticación mediante el acceso delegado, suponiendo que la aplicación que utiliza los servicios web se está ejecutando en el contexto del administrador, debería poder usar DefaultCredentials.

(2) Cree una cuenta de servicio que tenga derechos de suplantación o acceso delegado a través de los buzones de los empleados. A continuación, inicie sesión como la cuenta de servicio.

Además, aquí hay algunos enlaces que pueden resultarte útiles ...

Otros consejos

Si entendía bien, el administrador usaría la aplicación y se autentificaría ante el EWS como él mismo. EWS no podrá actualizar el buzón de otro usuario debido a permisos insuficientes.

¿Qué tal si le da al administrador acceso al buzón de cada usuario?

(¿O me falta una parte sustancial de la pregunta?)

Si el usuario va a iniciar sesión en su propia máquina, y es probable que estas credenciales estén disponibles en el caché de credenciales, puede construir un objeto WebCredential a partir del objeto ICredentials obtenido desde allí:

public static ExchangeService GetService()
{
    var webCredentials = new WebCredentials(CredentialCache.DefaultNetworkCredentials);

    var service = new ExchangeService(ExchangeVersion);
    service.AutodiscoverUrl(Properties.Settings.Default.SmptAccountName);
    service.Credentials = credentials;

    return service;   
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top