28

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:

  1. 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 ?

  2. ¿Es posible otorgar acceso a la cuenta integrada NetworkService a un servidor IIS remoto?

¡Gracias por leer!

Respuesta

8

Todos los detalles que necesita están incluidos en esta muy viejo artículo,

http://msdn.microsoft.com/en-us/library/ms998351.aspx

En resumen, cuando le resulta confuso para solucionar problemas de este tipo, primero debe consultar los detalles técnicos detrás de ASP.NET personificación con cuidado.

+0

Excelente enlace: D – omglolbah

+1

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 :) –

+0

@ 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. –

0

Aquí hay algunas cosas que puede consultar: - configure un SPN (Nombre principal del servicio) para el servicio de informes; puedes encontrar buenos ejemplos en google; - Permitir delegación (ClientCredentials.Windows.AllowImpersonationLevel)

0

¿El problema es que no puede autenticarse en IIS o no autenticarse en SSRS? Puede ser necesario otorgar permiso a la cuenta DOMAIN \ MachineName $ en SSRS para ejecutar el informe que está intentando automatizar.

SSRS generalmente hace un buen trabajo al configurar IIS correctamente, por lo que no debería tener que meterse con esas configuraciones. Comprobé dos veces mi instalación (que es SSRS 2005, las cosas pueden haber funcionado de manera diferente en SSRS 2000 y no me dijiste qué versión estás ejecutando), y está configurada para usar la autenticación de Windows y se ha habilitado la suplantación. Eso significa que IIS debería básicamente autenticar sus credenciales (validar un nombre de usuario/contraseña correcto), no autorizar (determinar si ese usuario tiene permiso para ejecutar el informe en cuestión). A continuación, IIS pasa las credenciales a SSRS, que tiene su propia configuración para determinar qué cuentas tienen permiso para ver los informes.

Además, puede automatizar el envío de informes de forma programada directamente en SSRS, por lo que es posible que no necesite el servicio de Windows en absoluto si su programación es bastante básica (es decir, diaria, semanal, etc.).

Cuestiones relacionadas