Windows Service - Impersonation

27/10/2004 - 10:55 por Monica | Informe spam
Se trata de un windows service que usa LocalSystem account como cuenta de
servicio, no queremos que un usuario externo sea la cuenta de servicio...

Este windows service ademas accesa un recurso de red, para lo cual nos
gustaria que lo hiciera un usuario de red ya que el Local System account
solo tiene acceso a los recursos locales. Hemos pensado asi que cuando se
accesa el recurso que esta en red se usaria "impersonation" del usuario.

Sin embargo, la unica forma que he visto de hacer impersonation es usando
funciones "unmanaged code" como "logonuser" que se encuentra en
advapi32.dll.

Justamente no queremos usar "unmanaged code"...

Por que Framework no tiene una forma de saber las credenciales de un usuario
sin usar API32 si no sus propias funciones bajo "managed code" ??

Alguien conoce otra forma de hacer impersonation del usuario sin hacer uso
de "unmanaged code" ?

Existe otra forma de solucionar este problema... sin tener que cambiar al
Local System account como service account, recurriendo a "managed code" ?

De antemano, les agradezco su respuesta...
Monica
 

Leer las respuestas

#1 Hector Bejarano
31/10/2004 - 07:50 | Informe spam
Hola Monica,

Aqui puedes encontrar un pequeno y excelente ejemplo de como crear un
Windows Service en .NET:

http://www.codeproject.com/dotnet/s...ervice.asp

Ahora bien, partiendo de los conocimientos que nos provee ese articulo, en
el installer del service, vos tenes que especificar el usuario con el cual
va a correr el servicio, especificamente, el ejemplo trae esta instruccion:

this.serviceProcessInstaller1.Account =
System.ServiceProcess.ServiceAccount.LocalSystem;

Ahora bien, el account puede tener 4 valores, a continuacion una descripcion
de cada uno:

LocalService
Enables a service to run in the context of an account that provides
extensive local privileges and provides the credentials of the computer to a
remote server.

LocalSystem
Enables a service to run in the context of an account that acts as a
nonprivileged user on the local computer and provides anonymous credentials
to a remote server.

NetworkService
Enables a service to run in the context of an account that acts as a
nonprivileged user on the local computer and provides the credentials of the
computer to a remote server.

User
Enables a service to run in the context of a user. You need to supply a
valid user name and password when you install the service application on a
computer.



Dejo a tu discrecion cual utilizar, puesto que sinceramente no comprendi
100% tu problema.

Ahora, para poder instalar el servicio, puedes seguir el ejemplo que brinda
el articulo, o puedes utilizar el Installutil, que es un ejecutable
utilizado para instalar los servicios, una busqueda en google te dara la
sintaxis correcta de Installutil, bajo cualquiera de los 2 metodos, tendras
que definir que usuario querras que corra el servicio, el cual
efectivamente, puede ser un usuario de red,

Saludos,
Hector Bejarano.

"Monica" wrote in message
news:

Se trata de un windows service que usa LocalSystem account como cuenta de
servicio, no queremos que un usuario externo sea la cuenta de servicio...

Este windows service ademas accesa un recurso de red, para lo cual nos
gustaria que lo hiciera un usuario de red ya que el Local System account
solo tiene acceso a los recursos locales. Hemos pensado asi que cuando se
accesa el recurso que esta en red se usaria "impersonation" del usuario.

Sin embargo, la unica forma que he visto de hacer impersonation es usando
funciones "unmanaged code" como "logonuser" que se encuentra en
advapi32.dll.

Justamente no queremos usar "unmanaged code"...

Por que Framework no tiene una forma de saber las credenciales de un
usuario sin usar API32 si no sus propias funciones bajo "managed code" ??

Alguien conoce otra forma de hacer impersonation del usuario sin hacer uso
de "unmanaged code" ?

Existe otra forma de solucionar este problema... sin tener que cambiar al
Local System account como service account, recurriendo a "managed code" ?

De antemano, les agradezco su respuesta...
Monica

Preguntas similares