Estoy tratando de utilizar la Suplantación y la Delegación en una intranet ASP.Net web-app para pasar autentica las credenciales de los usuarios en un Servidor SQL server.

El web server y SQL server son dos máquinas separadas, pero en el mismo dominio, por lo que la Delegación es necesaria.

He hecho lo siguiente:

  • conjunto <authentication mode="Windows"/> y <identity impersonate="true"/> en mi web-app de la web.config.
  • habilitada la Delegación Restringida de la web en el servidor de MSSQLSvc de servicio en el Servidor SQL server, Active Directory.
  • sólo se habilita la Autenticación de Windows en el sitio web, a través de IIS.

Al parecer, este debe todo el trabajo, pero no (SQL Server está negando el acceso a los usuarios anónimos – «error de inicio de Sesión del usuario ‘NT AUTHORITY\ANONYMOUS LOGON'»).

En IIS7, el grupo de Aplicaciones está configurado para utilizar Integrado Pipleline Modo y se ejecuta con la NetworkService Identidad. El sitio web sólo tiene habilitada la Autenticación de Windows, la Protección Ampliada está Apagado, en modo de Núcleo está habilitada la autenticación, y NTLM es el proveedor.

Todas las páginas web que he leído parece indicar que mi configuración de trabajo. Lo que me estoy perdiendo?

«el Servidor SQL está negando el acceso a los usuarios anónimos», hacer su anonymous user tienen acceso a base de datos?
El usuario anónimo no tiene acceso a la base de datos. No quiero que el usuario anónimo acceder a la base de datos, quiero que el usuario de la página web. Delegación debe significar que el usuario actual es el acceso a la base de datos, en lugar de que el usuario anónimo.

OriginalEl autor Graham Clark | 2010-01-20

2 Comentarios

  1. 16

    He descubierto la respuesta:

    El proveedor de Autenticación de Windows en IIS7 se debe establecer a Negociar:Kerberos, no NTLM. Esto significa que el Núcleo del modo de configuración de la autenticación debe estar desactivado. Esto parece estar bien. Creo que estoy en lo correcto en decir que el Núcleo del modo de autenticación es necesaria cuando se utiliza una identidad personalizada, es decir, una identidad específica. La delegación puede utilizar un número arbitrario de las identidades. Así que todo está bien.

    He escrito un blog acerca de esto también, que va a un poco más de detalle.

    El blog de correos fue Excelente, muchas gracias 🙂
    ¿Usted tiene algún problema con los usuarios, no de obtener sus credenciales reenvía al servidor de SQL server cuando se utiliza un navegador distinto a Internet Explorer? He encontrado que una vez que se ha establecido una sesión en IE, a continuación, el sitio web puede delegar sus credenciales, si se cambia un navegador diferente.

    OriginalEl autor Graham Clark

  2. -1

    No – no es preciso decir que usted necesita Kerberos, un SPN, a confiar en el servidor para la delegación, y que esta es la ÚNICA manera de hacerlo. Sí, esta es una manera de hacerlo (y usted no necesita todo esto para hacer que esto suceda a través de Kerberos), pero no es la ÚNICA manera, o incluso técnicamente, la forma más segura o de manera más fácil. ¿Realmente quiere tener que realizar configuraciones y crear un inicio de sesión para cada usuario de la web para tu DB en SQL? Lo que si cualquiera de esas cuentas está en riesgo? Más cuentas, más vulnerabilidades.

    No, crear una cuenta de servicio de Dominio, en su lugar, y dejar que el acceso a SQL. Si tus chicos de seguridad de bloqueo de las cosas, a dar que el usuario de estos derechos: el Inicio de sesión como un servicio de Inicio de sesión como un trabajo por lotes, y Permitir el inicio de sesión localmente. O, si esto es sólo para desarrollar y poner a prueba la teoría o no le importa o no puede encontrar la configuración o todavía está recibiendo errores más adelante, y esto no puede obtener una gran cantidad de seguidores, pero le dan Administración local (a veces tienes que hacer lo que tienes que hacer – algunos de los profesionales de seguridad de bloqueo de las cosas más de lo que yo quisiera escribir sobre – siempre se puede solucionar los problemas de seguridad más tarde para bloquear de nuevo). A continuación, establezca que cuenta como la cuenta personalizada en la aplicación de la piscina y que la cuenta de inicio de sesión en SQL. Darle dbo en QUE sólo UNA base de datos.

    En el sitio web en IIS, establezca el tipo de autenticación de Windows. He visto decir «Básica» en otros blogs, así que Kerberos va a trabajar, pero NTLM utiliza la autenticación de Windows. En IIS 7, puede que también desee activar el ASP .RED de suplantación. Personalmente, sólo he probado esto en IIS 6, pero el principal es el mismo.

    En la web.configuración, agregar esta bajo <configuration>, que es un «igual» a <system.web>:

    <connectionStrings>
      <add 
         name="NorthwindConnectionString" 
         connectionString="Data Source=serverName;Initial 
         Catalog=Northwind;Integrated Security=SSPI;User 
         ID=userName;Password=password"
         providerName="System.Data.SqlClient"
      />
    </connectionStrings>

    Y en <system.web>:

    <authentication mode="Windows"/> 
    <identity impersonate="true"
          userName="domain\user" 
          password="password" />

    Luego de leer la cadena en su aplicación como esta:

    using System.Configuration;
    
    string connString = String.Empty;
    if (ConfigurationManager.ConnectionStrings.ConnectionStrings.Count > 0)
    {
        connString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString; 
        if (connString != null) //do DB connection stuff here
            Console.WriteLine("Northwind connection string = \"{0}\"",
            connString.ConnectionString);
        else
            Console.WriteLine("No Northwind connection string");
    }

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

    Si no va a conectar con la cuenta de servicio después de haber llenado que cuenta en la web.config para suplantar la etiqueta y la conexión de SQL, puede, a continuación, utilizar la suplantación de los métodos de uso de WindowsImpersonationContext (http://msdn.microsoft.com/en-us/library/system.security.principal.windowsimpersonationcontext.aspx). Específicamente, usted quiere wic.Suplantar() y wic.Deshacer() después de obtener el token. Se puede leer en la cuenta de servicio de dominio, el nombre y la contraseña de la web.config, en la forma de AppKeys.

    En resumen, hay maneras de evitar los problemas. Incluso se puede cifrar la contraseña en la web.config – tanto en la cadena de conexión, y si usted desea guardar en un AppKey en lugar de directamente en la «suplantar» a la etiqueta, si no quieres contraseñas en texto plano en el que hay (que yo recomiendo en contra), y para que usted pueda tener para la creación de un token de Inicio de sesión, si usted necesita para utilizar la Suplantación de la personalidad de los métodos (como hice yo).

    En realidad no responder a su pregunta
    uh, me dio todos los pasos necesarios para «la Suplantación de la Delegación y en una intranet ASP.Net web-app para pasar autentica las credenciales de los usuarios en un Servidor SQL server». Esto requiere 1) un svc cuenta, 2) derechos en la Política de Seguridad Local (descrito anteriormente) 3) derechos en SQL (dbo se describe arriba), 3) agregar cuenta para la Aplicación de la identidad del grupo, 4) establecer Sitio Web en IIS para la autenticación de Windows, 5) set conn cadena en la web.config, 6) establecer la autenticación de la etiqueta y de la identidad en la web.config, 7) agregar la cadena de conexión en el código, 8) la suplantación de código de MSDN link si no funciona.
    Diferentes entornos van a tener diferentes derechos, en la medida de cuentas de ir, y él puede o no puede tener privilegios de dar a la cuenta de los derechos que necesita. Sin conocer su entorno, es difícil dar los detalles de exactamente lo que va a trabajar. Él tendrá que tratar de dar el svc en cuenta los derechos que se especifica, y configurar el sitio web y web.config. Quizá funcione sin el MSDN de suplantación de código, tal vez no. Para mi la aplicación me acababa de terminar cuando hice estos pasos, yo lo necesitaba. Para uno que he hecho recientemente el uso de Kerberos, Spn, y un svc acct, yo no.
    ¿Cómo es esto de pasar las credenciales del usuario en SQL? Su web.config fragmento tiene la aplicación de la suplantación de la cuenta de servicio, no el usuario.
    Así que, ya que su solución no está utilizando las credenciales del usuario para autenticar la sesión SQL, usted no contesta la pregunta. Estás diciendo Graham lo que usted piensa que él debería hacer en lugar de decirle cómo hacer lo que él quiere hacer.

    OriginalEl autor vapcguy

Dejar respuesta

Please enter your comment!
Please enter your name here