Estamos teniendo dificultades para calcular cómo funcionan estos objetos de credenciales. De hecho, es posible que no funcionen cómo esperábamos que funcionaran. Aquí hay una explicación del problema actual.Usar DefaultCredentials y DefaultNetworkCredentials
Tenemos 2 servidores que necesitan comunicarse entre sí a través de los servicios web. El primero (llamémoslo Server01
) tiene un servicio de Windows que se ejecuta como la cuenta NetworkService. El otro Server02
tiene ReportingServices ejecutándose con IIS 6.0. El Servicio de Windows en Server01
está tratando de usar el Server02
ReportingServices WebService para generar informes y enviarlos por correo electrónico.
Por lo tanto, esto es lo que hemos intentado hasta ahora.
Configuración de las credenciales en tiempo de ejecución (Esto funciona perfectamente bien):
rs.Credentials = new NetworkCredentials("user", "pass", "domain");
Ahora, si pudiéramos utilizar un usuario genérico todo estaría bien, sin embargo ... no se nos permite hacerlo. Por lo tanto, estamos tratando de utilizar los DefaultCredetials o DefaultNetworkCredentials y pasarlo al servicio web de RS:
rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials
O:
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
De cualquier manera no funcionará. Siempre obtenemos 401 sin amenazas de IIS. Ahora, lo que sabemos es que si queremos dar acceso a un recurso conectado como NetworkService, hay que concederle a DOMAIN\MachineName$
(http://msdn.microsoft.com/en-us/library/ms998320.aspx):
Conceder acceso a un servidor SQL Server remoto
Si están accediendo a una base de datos en otro servidor en el mismo dominio (o en un dominio de confianza), las credenciales de red de la cuenta del Servicio de red se utilizan para autenticarse en la base de datos. Las credenciales de la cuenta de servicio de red son de la forma DomainName \ AspNetServer $, donde DomainName es el dominio del servidor ASP.NET y AspNetServer es el nombre de su servidor web.
Por ejemplo, si su aplicación ASP.NET se ejecuta en un servidor llamado SVR1 en el dominio CONTOSO, el servidor SQL ve una solicitud de acceso a la base de datos de CONTOSO \ SVR1 $.
Suponemos que otorgar acceso de la misma manera con IIS funcionaría. Sin embargo, no es así. O al menos, algo no está configurado correctamente para que se autentique correctamente.
lo tanto, aquí hay algunas preguntas:
Hemos leído acerca de hacerse pasar por "Usuarios" en algún lugar, ¿necesitamos para establecer esto en alguna parte en el servicio de Windows ?
¿Es posible otorgar acceso a la cuenta integrada NetworkService a un servidor IIS remoto?
¡Gracias por leer!
Excelente enlace: D – omglolbah
Habría sido agradable escribir la respuesta real a la pregunta en pocas palabras (si es posible), en lugar de poner un enlace al artículo de 2 horas de lectura en MSDN, y culpar a los demás no haber leído :) –
@ d.popov Eso es realmente un desafío para mí resumir las cosas centrales. Puede probarse a sí mismo si le interesa. Tengo que decir que la respuesta real a la pregunta no será más corta que ese artículo. –