Sunteți pe pagina 1din 31

Captulo 9: Seguridad de

la aplicacin de Servicios
Empresariales
Crear aplicaciones ASP.NET
seguras
Autenticacin, autorizacin
comunicacin segura
J.D. Meier, Alex Mackman, Michael Dunner y Srinath Vasireddy
Microsoft Corporation
Octubre de !!
Consulte la "#$ina de entrada como punto de partida y para obtener una descripci%n
completa del documento Crear aplicaciones ASP.NET seguras.
Resumen
&n este cap'tulo se explica c%mo ase$urar la funcionalidad empresarial en los
componentes re(isados contenidos en las aplicaciones de Ser(icios &mpresariales.
Se muestra c%mo y cu#ndo utili)ar las funciones de Ser(icios &mpresariales *COM+,
para la autori)aci%n y c%mo confi$urar la autenticaci%n y la suplantaci%n -"C.
.ambi/n se muestra c%mo llamar de forma se$ura a los componentes re(isados
desde una aplicaci%n 0eb AS".1&. y c%mo identificar y transmitir el contexto de
se$uridad del llamador ori$inal a tra(/s del componente re(isado de ni(el medio.
Contenido
Ar2uitectura de se$uridad
Confi$urar la se$uridad
"ro$ramar la se$uridad
Seleccionar una identidad de proceso
Obtener acceso a recursos de red
.ransferir el llamador ori$inal
Cifrado -"C
Crear componentes re(isados
DCOM y ser(idores de se$uridad
3lamar a componentes re(isados desde AS".1&.
Conceptos de se$uridad
-esumen
3os componentes .1&. incluyen los ser(icios COM+ tradicionales, como las
transacciones distribuidas, la acti(aci%n instant#nea, la a$rupaci%n de ob4etos y la
administraci%n simult#nea. &n .1&., dichos ser(icios se denominan Ser(icios
&mpresariales. -esultan imprescindibles para muchos de los componentes .1&. de
ni(el medio 2ue se e4ecutan con aplicaciones 0eb de .1&..
"ara a$re$ar ser(icios a un componente .1&. es preciso deri(ar la clase de
componente de la clase b#sica EnterpriseServices.ServicedComponent y
especificar a continuaci%n los re2uisitos de ser(icio correspondientes mediante
atributos .1&. compilados en el ensamblado 2ue alo4a el componente.
&n este cap'tulo se describe la creaci%n de componentes re(isados se$uros y los
procesos de llamada de los mismos desde las aplicaciones 0eb de AS".1&..
Arquitectura de seguridad
3a ilustraci%n 5.6 muestra un compendio de las funciones de autenticaci%n,
autori)aci%n y comunicaci%n se$ura compatibles con las aplicaciones de Ser(icios
&mpresariales. 3a aplicaci%n cliente de la ilustraci%n 5.6 es una aplicaci%n 0eb de
AS".1&..
!"nsert #gure: C$%9 & Enterprise Services 'ole&(ased Securit.gi)*
7lustraci%n 5.6
Arquitectura de seguridad basada en funciones de Servicios Empresariales
Obser(e 2ue las funciones de autenticaci%n y comunicaci%n se$ura las proporciona
el transporte -"C subyacente 2ue utili)a el modelo COM Distribuido *DCOM,. 3a
autori)aci%n se obtiene mediante las funciones de Ser(icios &mpresariales *COM+,.
A continuaci%n se resumen los elementos principales de la ar2uitectura de se$uridad
de Ser(icios &mpresariales8
9 3as aplicaciones de Ser(icios &mpresariales utili)an la autenticaci%n -"C para
autenticar a los llamadores. &sta estrate$ia si$nifica 2ue, sal(o 2ue se lle(en a
cabo pasos espec'ficos para deshabilitar la autenticaci%n, el llamador recibe la
autenticaci%n mediante :erberos o 1.3M.
9 3a autori)aci%n se e4ecuta $racias a las funciones de Ser(icios &mpresariales
*COM+,, 2ue pueden incluir cuentas de $rupo o usuario del sistema operati(o
Microsoft; 0indo<s;. 3a pertenencia a funciones se define en el cat#lo$o
COM+ y se administra mediante la herramienta Ser(icios de componente.
Nota: si la aplicaci%n de Ser(icios &mpresariales utili)a la suplantaci%n,
tambi/n estar# disponible la autori)aci%n del llamador mediante listas AC3 de
0indo<s de los recursos prote$idos.
9 Cuando un cliente *por e4emplo, una aplicaci%n 0eb de AS".1&., llama a un
m/todo de un componente re(isado, una (e) completado el proceso de
autenticaci%n, el ni(el de intercepci%n de Ser(icios &mpresariales obtendr#
acceso al cat#lo$o COM+ para determinar la pertenencia a la funci%n del
cliente. A continuaci%n comprobar# si la pertenencia de la funci%n o las
funciones permite el acceso autori)ado a la aplicaci%n, el componente, la
interfa) y el m/todo actuales.
9 Si la pertenencia a la funci%n del cliente permite el acceso, se llamar# al
m/todo. Si el cliente no pertenece a una funci%n adecuada, se recha)ar# la
llamada y, a modo opcional, es posible 2ue se $enere un e(ento de se$uridad
para refle4ar el intento de acceso err%neo.
Importante: para implementar una autori)aci%n basada en funciones,
coherente en una aplicaci%n de Ser(icios &mpresariales llamada por una
aplicaci%n 0eb de AS".1&., es preciso utili)ar la autenticaci%n de 0indo<s
con suplantaci%n en la citada aplicaci%n 0eb de AS".1&. a fin de $aranti)ar
2ue el contexto de se$uridad del llamador ori$inal se transmita a tra(/s del
componente re(isado.
9 "ara prote$er el enlace de comunicaci%n DCOM entre las aplicaciones cliente
y ser(idor debe utili)arse el ni(el de autenticaci%n de inte$ridad del pa2uete
-"C *para $aranti)ar la inte$ridad de los mensa4es, o el ni(el de autenticaci%n
de pri(acidad del pa2uete -"C *para $aranti)ar la confidencialidad de los
mensa4es,.

Equipos selectores y puertas de enlace
&l tiempo de e4ecuci%n de Ser(icios &mpresariales act=a como e2uipo selector de los
componentes re(isados. 3a ilustraci%n 5. muestra cada una de las puertas de
enlace *puntos de autori)aci%n, de una aplicaci%n de Ser(icios &mpresariales.
Dichas puertas de enlace deben confi$urarse mediante las funciones de Ser(icios
&mpresariales, 2ue deben llenarse con las cuentas de $rupo y usuario de 0indo<s
correspondientes.
Nota: es importante ase$urarse de 2ue est/ habilitada la comprobaci%n de acceso
*se$uridad basada en funciones, para la aplicaci%n de Ser(icios &mpresariales y
2ue se utilice el ni(el de autenticaci%n adecuado. Si desea obtener m#s
informaci%n acerca de c%mo confi$urar la se$uridad, consulte la secci%n
>Confi$urar la se$uridad> 2ue fi$ura m#s adelante en este mismo cap'tulo.
!"nsert #gure: C$%9 & Enterprise Services +ate,eepers.gi)*
7lustraci%n 5.
Equipos selectores de una aplicacin de Servicios Empresariales
Como respuesta al en('o de una llamada de m/todo para un componente re(isado
por parte de un cliente se lle(an a cabo tres comprobaciones de acceso distintas.
3as tres est#n refle4adas en la ilustraci%n 5., adem#s de describirse a continuaci%n8
6. Se lle(a a cabo una comprobaci%n de acceso inicial por parte del subsistema
responsable de acti(ar las aplicaciones de Ser(icios &mpresariales
*Administrador de control de ser(icios COM, SCM, cuando una llamada a un
componente re(isado da lu$ar a una solicitud de acti(aci%n *y a la creaci%n de
una nue(a instancia del proceso suplente COM+, Dllhost.exe,.
"ara superar correctamente esta comprobaci%n de acceso, el llamador debe
ser miembro como m'nimo de una funci%n definida en la aplicaci%n.
. Se reali)a una se$unda comprobaci%n de acceso cuando la llamada del cliente
entra en la instancia de proceso Dllhost.exe.
De nue(o, es preciso 2ue el llamador sea miembro de una funci%n definida en
la aplicaci%n, como m'nimo, para superar esta comprobaci%n.
?. 3a comprobaci%n de acceso =ltima se efect=a cuando la llamada del cliente
entra en una aplicaci%n de ser(idor o de biblioteca.

"ara superar correctamente esta comprobaci%n es necesario 2ue el llamador
sea miembro de una funci%n asociada con la interfa), la clase o el m/todo de
destino de la llamada del cliente.
Importante: despu/s de 2ue una llamada haya in(ocado un m/todo de un
componente re(isado, no se producen comprobaciones de acceso adicionales si el
componente se comunica con otros componentes ubicados en la misma
aplicaci%n. 1o obstante, s' 2ue se lle(ar#n a cabo otras comprobaciones de
acceso si un componente llama a otro componente de una aplicaci%n distinta *de
biblioteca o ser(idor,.
Utilizar aplicaciones de servidor para aumentar la
seguridad
Debe utili)arse una aplicaci%n de ser(idor en a2uellos casos en los 2ue una
aplicaci%n exi$e aplicar un ni(el de autenticaci%n determinado por2ue re2uiere el
cifrado para $aranti)ar la confidencialidad de los datos en(iados a un componente
re(isado y for)ar las comprobaciones durante las transferencias a tra(/s de la red.
3as aplicaciones de ser(idor permiten la aplicaci%n de ni(eles de autenticaci%n,
mientras 2ue las aplicaciones de biblioteca heredan el ni(el de autenticaci%n del
proceso host.
"ara confi$urar el tipo de acti(aci%n de una aplicaci%n de Ser(icios &mpresariales,
utilice el atributo ApplicationActivation del ni(el de ensamblado como se indica a
continuaci%n.
[assembly: ApplicationActivation(ActivationOption.Server)]
O lo 2ue es lo mismo, estable)ca el Tipo de activacin en Aplicacin de servidor
desde la p#$ina Activacin del cuadro de di#lo$o ropiedades de la aplicaci%n de
Ser(icios de componente.
Seguridad para las aplicaciones de servidor y !i!lioteca
3a se$uridad basada en funciones funciona de modo similar tanto para las
aplicaciones de biblioteca en proceso como para las aplicaciones de ser(idor fuera
de proceso.
Cabe considerar las si$uientes diferencias relati(as a las aplicaciones de biblioteca8
9 rivilegios. 3os pri(ile$ios de una aplicaci%n de biblioteca (ienen
determinados por los pri(ile$ios del proceso *host, del cliente. "or e4emplo, si
el proceso de cliente se e4ecuta con pri(ile$ios de administrador, la aplicaci%n
de biblioteca tambi/n dispondr# de pri(ile$ios de administrador.
9 Suplantacin. &l ni(el de suplantaci%n de una aplicaci%n de biblioteca se
hereda del proceso de cliente y no puede confi$urarse expl'citamente.
9 Autenticacin. &l ni(el de autenticaci%n de una aplicaci%n de biblioteca se
hereda del proceso de cliente. &n cambio, las aplicaciones de biblioteca
permiten habilitar o deshabilitar de forma expl'cita la autenticaci%n. &sta opci%n
est# disponible desde la p#$ina Seguridad del cuadro de di#lo$o
ropiedades de la aplicaci%n de biblioteca.
&sta opci%n suele utili)arse para admitir las de(oluciones de llamadas
autenticadas de otros componentes COM fuera de proceso.
Asignar "unciones a clases# inter"aces o m$todos
&l empleo de las aplicaciones de biblioteca obli$a a asi$nar funciones al ni(el de
clases, interfa) o m/todos. .ambi/n es una pr#ctica recomendada para las
aplicaciones de ser(idor.
3os usuarios definidos en las funciones de una aplicaci%n de biblioteca no pueden
a$re$arse al descriptor de se$uridad del proceso de cliente. &sto si$nifica 2ue es
preciso utili)ar una se$uridad de ni(el de clases para 2ue la aplicaci%n de biblioteca
pueda lle(ar a cabo la autori)aci%n basada en funciones.
Requisitos de la seguridad de acceso al cdigo
3a se$uridad de acceso al c%di$o *CAS, re2uiere 2ue el c%di$o cuente con una serie
de permisos espec'ficos a fin de e4ecutar determinadas operaciones y obtener
acceso a recursos restrin$idos. CAS en un entorno de cliente muy =til en el 2ue el
c%di$o se descar$a de 7nternet. "or este mismo moti(o, es dif'cil 2ue el c%di$o sea
de plena confian)a.
"or lo $eneral, las aplicaciones 2ue utili)an componentes re(isados son de
confian)a, por lo 2ue se (e limitado el uso de CAS. 1o obstante, Ser(icios
&mpresariales no exi$e 2ue el c%di$o llamador dispon$a de los permisos necesarios
para llamar al c%di$o no administrado. Dado este contexto, es importante tener en
cuenta las si$uientes consideraciones8
9 Se necesita permiso para el c%di$o no administrado para acti(ar y reali)ar
llamadas de contexto entre (arios componentes re(isados.
9 Si el cliente de un componente re(isado es una aplicaci%n 0eb de AS".1&.,
dicha aplicaci%n debe tener permiso de c%di$o no administrado.
9 Si una referencia a un componente re(isado se pasa como ar$umento a al$=n
m/todo de c%di$o no se$uro, los m/todos definidos en el componente
re(isado no podr#n usarse desde el c%di$o no se$uro.
Con"igurar la seguridad
&n esta secci%n se describe c%mo confi$urar la se$uridad de8
9 @n componente re(isado 2ue se e4ecuta en una aplicaci%n de ser(idor de
Ser(icios &mpresariales *fuera de proceso,.
9 @n cliente de aplicaci%n 0eb de AS".1&..

Con"igurar una aplicacin de servidor
3a ilustraci%n 5.? esbo)a los pasos necesarios para confi$urar una aplicaci%n de
ser(idor de Ser(icios &mpresariales.
!"nsert #gure: C$%9 & Con#guring ES -Server. Securit.gi)*
7lustraci%n 5.?
Confgurar la seguridad de Servicios Empresariales
Tiempo de desarrollo y con"iguracin del tiempo de
implementacin
3a mayor'a de los par#metros del cat#lo$o COM+ se pueden confi$urar durante el
tiempo de desarrollo mediante los atributos .1&. del ensamblado 2ue contiene el
componente re(isado. &stos atributos se utili)an para llenar el cat#lo$o COM+
cuando el componente re(isado se ha re$istrado en COM+ mediante la herramienta
-e$s(cs.exe.
Otros pasos de confi$uraci%n, como el llenado de las funciones con cuentas de
$rupo y usuario de 0indo<s y la confi$uraci%n de una identidad Ae4ecutar comoB para
la aplicaci%n de ser(idor *instancia Dllhost.exe,, deben confi$urarse mediante la
herramienta de administraci%n Ser(icios de componente *o mediante pro$ramaci%n
con una secuencia de comandos, durante el tiempo de implementaci%n.
Con"igurar la autenticacin
"ara confi$urar el ni(el de autenticaci%n de una aplicaci%n mediante
declaraciones, utilice el atributo de ni(el de ensamblado
ApplicationAccessControl como se indica a continuaci%n.
[assembly: ApplicationAccessControl(
Authentication = AuthenticationOption.Call)]
O lo 2ue es lo mismo, estable)ca el (alor de Nivel de autenticacin para
llamadas de la p#$ina Seguridad del cuadro de di#lo$o ropiedades de la
aplicaci%n de Ser(icios de componente.
Nota: el ni(el de autenticaci%n del cliente tambi/n incide en el ni(el de
autenticaci%n 2ue utili)ar# la aplicaci%n de Ser(icios &mpresariales, puesto
2ue se emplea un proceso de ne$ociaci%n de marca de a$ua ele(ado, 2ue
siempre selecciona el mayor de los dos par#metros utili)ados.
Si desea obtener m#s informaci%n acerca de c%mo confi$urar el ni(el de
autenticaci%n DCOM 2ue utili)a la aplicaci%n cliente de AS".1&., consulte la
secci%n >Confi$urar una aplicaci%n cliente AS".1&.> 2ue fi$ura m#s adelante.
"ara obtener m#s informaci%n acerca de los ni(eles de autenticaci%n DCOM y
la ne$ociaci%n del ni(el de autenticaci%n, consulte la secci%n >Conceptos de
se$uridad> de este mismo cap'tulo.
Con"igurar la autorizacin %compro!aciones de acceso para
componentes&
"ara habilitar la autori)aci%n de $ranularidad fina en el ni(el de componentes,
interfaces o m/todos8
9 Cabilite las comprobaciones de acceso para el ni(el de aplicaci%n.
@tilice el si$uiente atributo .1&. para habilitar las comprobaciones de
acceso en toda la aplicaci%n.
[assembly: ApplicationAccessControl(true)]
O lo 2ue es lo mismo, acti(e la casilla de (erificaci%n Aplicar
compro!aciones de acceso para esta aplicacin de la p#$ina
Seguridad del cuadro de di#lo$o ropiedades de la aplicaci%n de
Ser(icios de componente.
Importante: si no puede confi$urar este atributo, no se lle(ar# a cabo
nin$una comprobaci%n de acceso
9 Confi$ure el ni(el de se$uridad de la aplicaci%n en el ni(el de proceso y
componentes.
"ara 2ue la se$uridad basada en funciones sea coherente, habilite la
comprobaci%n de acceso para los ni(eles de proceso y componentes
mediante el si$uiente atributo .1&.8
[assembly: ApplicationAccessControl(AccessChecksLevel=
AccessChecksLevelOption. ApplicationComponent)]
O lo 2ue es lo mismo, acti(e la casilla de (erificaci%n E'ecutar
compro!aciones de acceso para procesos y componentes de la
p#$ina Seguridad del cuadro de di#lo$o ropiedades de la aplicaci%n de
Ser(icios de componente.
Nota: habilite siempre la comprobaci%n de acceso para los ni(eles de
proceso y componente en las aplicaciones de biblioteca.
9 Cabilitar la comprobaci%n de acceso para el ni(el de componentes.
"ara habilitar las comprobaciones de acceso para el ni(el de
componentes, utilice el atributo de ni(el de clase
ComponentAccessControl como se indica a continuaci%n.
[ComponentAccessControl(true)]
public class MyServicedComponent : ServicedComponent
{
}
O lo 2ue es lo mismo, acti(e la casilla de (erificaci%n Aplicar
compro!aciones de acceso para componentes de la p#$ina Seguridad
del cuadro de di#lo$o ropiedades de la aplicaci%n de Ser(icios de
componente.
Nota: esta confi$uraci%n resulta efecti(a s%lo si se ha habilitado la
comprobaci%n de acceso para el ni(el de la aplicaci%n y se han
confi$urado las comprobaciones de acceso para los ni(eles de proceso y
componentes, tal como se ha descrito anteriormente.
Crear y asignar "unciones
3as funciones pueden crearse y asi$narse para los ni(eles de aplicaci%n,
componentes *clase,, interfa) y m/todo.
Agregar "unciones a una aplicacin
"ara a$re$ar funciones a una aplicaci%n, utilice el atributo de ni(el de
ensamblado SecurityRole como se muestra a continuaci%n.
[assembly:SecurityRole("Employee")]
[assembly:SecurityRole("Manager")]
&ste proceso es e2ui(alente a a$re$ar funciones a una aplicaci%n mediante la
herramienta Ser(icios de componente.
Nota: el empleo del atributo SecurityRole en el ni(el de ensamblado es
e2ui(alente a a$re$ar funciones a la aplicaci%n, pero sin asi$narlas a los
componentes, interfaces o m/todos indi(iduales. &l resultado no es otro 2ue la
determinaci%n por parte de los miembros de estas funciones de la
composici%n del descriptor de se$uridad ad4unto a la aplicaci%n. Dicho
descriptor se utili)a =nica y exclusi(amente para determinar los usuarios 2ue
tendr#n acceso a la aplicaci%n *y podr#n iniciarla,.
Si desea 2ue la autori)aci%n basada en funciones sea a=n m#s efica), apli2ue
siempre funciones a los componentes, interfaces y m/todos tal como se
describe m#s adelante.
Agregar "unciones a un componente %clase&
"ara a$re$ar funciones a una aplicaci%n, apli2ue el atributo SecurityRole
antes de la definici%n de clase, como se muestra a continuaci%n.
[SecurityRole("Manager")]
public class Transfer : ServicedComponent
{
}
Agregar "unciones a una inter"az
"ara aplicar funciones en el ni(el de interfa) es preciso crear una definici%n de
interfa) e implementarla a continuaci%n en la clase del componente re(isado.
Despu/s, puede asociar funcionar con la interfa) mediante el atributo
SecurityRole.
Importante: durante el tiempo de desarrollo tambi/n debe anotar la clase con
el atributo Secure(et)od. De este modo se informa a Ser(icios
&mpresariales de la posibilidad de 2ue se utilicen los ser(icios de se$uridad
del ni(el de m/todo. Durante el tiempo de implementaci%n, los administradores
tambi/n deben a$re$ar usuarios a la funci%n (ars)aler definida por el
sistema, 2ue se crea autom#ticamente en el cat#lo$o COM+, cuando una
clase marcada con Secure(et)od se re$istra en Ser(icios de componente.
&l empleo de la funci%n (ars)aler se describe con mayor detalle en la
si$uiente secci%n.
&l si$uiente e4emplo muestra c%mo a$re$ar la funci%n (anager a una interfa)
espec'fica.
[SecurityRole("Manager")]
public interface ISomeInterface
{
void Method1( string message );
void Method2( int parm1, int parm2 );
}
[ComponentAccessControl]
[SecureMethod]
public class MyServicedComponent : ServicedComponent, ISomeInterface
{
public void Method1( string message )
{
// Implementation
}
public void Method2( int parm1, int parm2 )
{
// Implementation
}
}
Agregar "unciones a un m$todo
"ara $aranti)ar 2ue los m/todos p=blicos de una clase apare)can en el
cat#lo$o COM+ deber# implementar expl'citamente una interfa) 2ue defina los
m/todos. A continuaci%n, utilice el atributo Secure(et)od en la clase, o bien
los atributos Secure(et)od o SecurityRole para el ni(el de m/todo, para
prote$er dichos m/todos.
Nota: los atributos Secure(et)od y SecurityRole deben fi$urar antes de la
implementaci%n del m/todo y nunca en la definici%n de la interfa).
"ara habilitar la se$uridad del ni(el de m/todo, lle(e a cabo los si$uientes
pasos8
a. Defina una interfa) 2ue conten$a los m/todos 2ue desea prote$er. "or
e4emplo8
public interface ISomeInterface
{
void Method1( string message );
void Method2( int parm1, int parm2 );
}
b. 7mplemente la interfa) en la clase del componente re(isado.
[ComponentAccessControl]
public class MyServicedComponent : ServicedComponent, ISomeInterface
{
public void Method1( string message )
{
// Implementation
}
public void Method2( int parm1, int parm2 )
{
// Implementation
}
}
c. Si desea confi$urar las funciones de manera administrati(a mediante la
herramienta Ser(icios de componente, anote la clase con el atributo
Secure(et)od, como muestra el si$uiente e4emplo.
[ComponentAccessControl]
[SecureMethod]
public class MyServicedComponent : ServicedComponent, ISomeInterface
{
}
d. Si lo desea, tambi/n puede a$re$ar funciones a los m/todos durante el
tiempo de desarrollo con ayuda de los atributos .1&. y aplicando el
atributo SecurityRole para el ni(el de m/todo. &n este caso no es
necesario aplicar el atributo Secure(et)od para el ni(el de clases *a
pesar de 2ue el atributo ComponentAccessControl debe incluirse de
todos modos para confi$urar las comprobaciones de acceso para el ni(el
de componentes,.
&n el si$uiente e4emplo, s%lo los miembros de la funci%n (anager pueden
llamar a (et)od*, mientras 2ue los miembros de las funciones (anager y
Employee pueden llamar a (et)od+.
[ComponentAccessControl]
public class MyServicedComponent : ServicedComponent, ISomeInterface
{
[SecurityRole("Manager")]
public void Method1( string message )
{
// Implementation
}
[SecurityRole("Manager")]
[SecurityRole("Employee")]
public void Method2( int parm1, int parm2 )
{
// Implementation
}
}
e. Durante el tiempo de implementaci%n, los administradores deben a$re$ar
a la funci%n predefinida (ars)aler cual2uier usuario 2ue (aya a necesitar
acceso a los m/todos o interfaces de la clase.
Nota: la infraestructura de Ser(icios &mpresariales utili)a una serie de
interfaces de ni(el de sistema 2ue exponen todos los componentes
re(isados. Dichas interfaces incluyen I(anaged,!'ect, I-isposa!le y
IServiceComponentIn"o. Si se habilitan las comprobaciones de acceso
para los ni(eles de interfa) o m/todo, se dene$ar# el acceso de la
infraestructura de Ser(icios &mpresariales a esas interfaces.
Como consecuencia, Ser(icios &mpresariales crea una funci%n especial
denominada (ars)aler y la asocia a las interfaces en cuesti%n. 3a funci%n
puede (isuali)arse *en las interfaces mencionadas, con ayuda de la
herramienta Ser(icios de componente.
Durante el tiempo de implementaci%n, los administradores deben a$re$ar
a la funci%n (ars)aler todos los usuarios 2ue (ayan a necesitar acceso a
los m/todos o interfaces de la clase. &ste proceso puede automati)arse de
dos modos8
9 &scribir una secuencia de comandos 2ue utilice el modelo de ob4etos
Ser(icios de componente para copiar todos los usuarios desde otras
funciones a la funci%n (ars)aler.
9 &scribir una secuencia de comandos 2ue asi$ne el resto de las
funciones a estas tres interfaces especiales y 2ue elimine la funci%n
(ars)aler.


Registrar componentes revisados
3os componentes re(isados pueden re$istrarse en8
9 .a cac)$ de ensam!lados glo!al. 3os componentes re(isados alo4ados en
las aplicaciones de ser(idor COM+ exi$en la instalaci%n en la cach/ de
ensamblados $lobal, a diferencia de las aplicaciones de biblioteca.
"ara re$istrar un componente re(isado en la cach/ de ensamblados $lobal,
e4ecute la utilidad de la l'nea de comandos Dacutil.exe. "ara re$istrar un
ensamblado denominado MySer(icedComponent.dll en la cach/ de
ensamblados $lobal, e4ecute el si$uiente comando.
gacutil i MyServicedComponent.dll
Nota: tambi/n puede utili)ar la herramienta Confi$uraci%n de Microsoft .1&.
Erame<ork desde el $rupo de pro$ramas /erramientas administrativas para
(er y traba4ar con el contenido de la cach/ de ensamblados $lobal.
9 El cat0logo C,(1. "ara re$istrar un ensamblado denominado
MySer(icedComponent.dll en el cat#lo$o COM+, e4ecute el si$uiente
comando.
regsvcs.exe MyServicedComponent.dll
&ste comando crea una aplicaci%n COM+. 3os atributos .1&. del ensamblado
se utili)an para llenar el cat#lo$o COM+.

.lenar "unciones
3lene las funciones con ayuda de la herramienta Ser(icios de componente o
mediante secuencias de comandos para pro$ramar el cat#lo$o COM+ con los
ob4etos de administraci%n COM+.
Utilizar grupos de 2indo3s
A$re$ue cuentas de $rupo de 0indo<s !!! a funciones de Ser(icios &mpresariales
para disfrutar de una flexibilidad m#xima. 3os $rupos de 0indo<s permiten utili)ar de
forma efica) una herramienta de administraci%n *la herramienta Administraci%n de
usuarios y e2uipos, para administrar tanto la se$uridad de 0indo<s como la de
Ser(icios &mpresariales.
9 Cree un $rupo de 0indo<s para cada funci%n de la aplicaci%n Ser(icios
&mpresariales.
9 Asi$ne cada $rupo a la funci%n pertinente.
"or e4emplo, si tiene una funci%n denominada (anager, cree un $rupo de
0indo<s denominado (anagers. Asi$ne el $rupo (anagers a la funci%n
(anager.
9 @na (e) asi$nados los $rupos a las funciones, utilice la herramienta
Administraci%n de usuarios y e2uipos para a$re$ar y eliminar usuarios de cada
$rupo.
"or e4emplo, al a$re$ar una cuenta de usuario de 0indo<s !!! denominada
-avid al $rupo Mana$ers de 0indo<s !!!, -avid se asi$na de forma
efecti(a a la funci%n (anager.

ara asignar grupos de 2indo3s a "unciones de Servicios Empresariales
mediante Servicios de componente
6. Con la herramienta Ser(icios de componente, expanda la aplicaci%n 2ue
conten$a las funciones a las 2ue desee a$re$ar $rupos de 0indo<s !!!.
. &xpanda la carpeta 4unciones y la funci%n espec'fica a la 2ue desee asi$nar
los $rupos de 0indo<s.
?. Seleccione la carpeta Usuarios de la funci%n en cuesti%n.
F. Ca$a clic con el bot%n secundario del mouse *rat%n, en la carpeta, seleccione
Nuevo y ha$a clic en Usuario.
G. &n el cuadro de di#lo$o Seleccionar usuarios o grupos, a$re$ue los $rupos
*o usuarios, 2ue desee a la funci%n.

(0s in"ormacin
Si desea obtener m#s informaci%n acerca de c%mo pro$ramar el cat#lo$o COM+
mediante los ob4etos de administraci%n COM+, consulte el apartado >Automatin$
COM+ Administration> *en in$l/s, de la secci%n de desarrollo de componentes de la
Hiblioteca MSD1.
Con"igurar la identidad
@tilice la herramienta Ser(icios de componente *o secuencia de comandos, para
confi$urar la identidad de la aplicaci%n de Ser(icios &mpresariales. 3a propiedad de
identidad determina la cuenta utili)ada para e4ecutar la instancia Dllhost.exe 2ue
alo4a la aplicaci%n.
ara con"igurar la identidad
6. Con la herramienta Ser(icios de componente, seleccione la aplicaci%n 2ue
desee.
. Ca$a clic con el bot%n secundario del mouse *rat%n, en el nombre de la
aplicaci%n y ha$a clic en ropiedades.
?. Ca$a clic en la ficha Identidad.
F. Ca$a clic en Este usuario y especifi2ue la cuenta de ser(icio confi$urada para
e4ecutar la aplicaci%n.

(0s in"ormacin
"ara obtener m#s informaci%n acerca de c%mo ele$ir una identidad apropiada para
e4ecutar una aplicaci%n de Ser(icios &mpresariales, consulte la secci%n >Seleccionar
una identidad de proceso> 2ue encontrar# m#s adelante en este cap'tulo.
Con"igurar una aplicacin cliente AS5NET
Confi$ure el ni(el de autenticaci%n DCOM y los ni(eles de suplantaci%n 2ue utili)an
las aplicaciones cliente cuando se comunican con componentes re(isados 2ue
emplean DCOM.
Con"igurar la autenticacin
"ara confi$urar el ni(el de autenticaci%n predeterminado de una aplicaci%n 0eb de
AS".1&. cuando se comunica con un componente re(isado, edite el atributo
comAut)entication.evel del elemento Iprocess(odelJ del archi(o
Machine.confi$.
&l archi(o Machine.confi$ se halla en la carpeta 2ue se indica a continuaci%n.
%windir%\Microsoft.NET\Framework\v1.0.3705\CONFIG
&stable)ca el atributo comAut)entication.evel en uno de los si$uientes (alores.
comAuthenticationLevel=
"[Default|None|Connect|Call|Pkt|PktIntegrity|PktPrivacy]"
(0s in"ormacin
"ara obtener m#s informaci%n acerca de los ni(eles de autenticaci%n DCOM,
consulte el apartado >Autenticaci%n> de la secci%n AConceptos de se$uridadB de este
mismo cap'tulo.
Con"igurar la suplantacin
&l ni(el de suplantaci%n establecido por el cliente determina las funciones del ni(el
de suplantaci%n para el ser(idor. "ara confi$urar el ni(el de suplantaci%n
predeterminado de una aplicaci%n basada en 0eb de AS".1&. cuando se comunica
con un componente re(isado, edite el atributo comImpersonation.evel del
elemento Iprocess(odelJ del archi(o Machine.confi$ y establ/)calo en al$uno de
los (alores 2ue se indican a continuaci%n.
comImpersonationLevel="[Default|Anonymous|Identify|Impersonate|Delegate]"
(0s in"ormacin
"ara obtener m#s informaci%n acerca de los ni(eles de suplantaci%n DCOM, consulte
el apartado >Suplantaci%n> de la secci%n AConceptos de se$uridadB 2ue encontrar#
en este mismo cap'tulo.
Con"igurar los niveles de suplantacin para una
aplicacin de Servicios Empresariales
Si un componente re(isado de una aplicaci%n necesita llamar a un componente
re(isado de una se$unda aplicaci%n *de ser(idor,, 2ui)#s necesite confi$urar el ni(el
de suplantaci%n para la aplicaci%n cliente.
Importante: el ni(el de suplantaci%n confi$urado para una aplicaci%n de Ser(icios
&mpresariales *en la p#$ina Seguridad del cuadro de di#lo$o ropiedades de la
aplicaci%n, es el ni(el de suplantaci%n 2ue utili)an las llamadas salientes de los
componentes de la aplicaci%n. 1o tiene repercusi%n al$una 2ue los componentes
re(isados de la aplicaci%n e4ecuten o no funciones de suplantaci%n. @tilice las
t/cnicas de suplantaci%n mediante pro$ramaci%n descritas en la secci%n
A.ransferir el llamador ori$inalB 2ue fi$ura m#s adelante en este mismo cap'tulo
para suplantar clientes de un componente re(isado.
"ara confi$urar el ni(el de suplantaci%n de la aplicaci%n mediante declaraciones,
utilice el atributo de ni(el de ensamblado ApplicationAccessControl tal como se
indica a continuaci%n.
[assembly: ApplicationAccessControl(
ImpersonationLevel=ImpersonationLevelOption.Identify)]
&ste proceso es el e2ui(alente a establecer el (alor Nivel de suplantacin de la
p#$ina Seguridad del cuadro de di#lo$o ropiedades de Ser(icios de componente.
rogramar la seguridad
3os componentes .1&. permiten disfrutar de las funciones de se$uridad de Ser(icios
&mpresariales cuando se utili)an las clases Conte6tUtil, SecurityCallConte6t y
SecurityIdentity.
Seguridad !asada en "unciones mediante programacin
"uede probar mediante pro$ramaci%n la pertenencia a funciones mediante el m/todo
IsCallerInRole de la clase Conte6tUtil, con lo 2ue podr# tomar decisiones de
autori)aci%n de mayor $ranularidad. Antes de llamar al m/todo, compruebe siempre
2ue est/n habilitadas las comprobaciones de acceso para el ni(el de componentes,
como muestra el si$uiente fra$mento de c%di$o. Si est# deshabilitada, el m/todo
IsCallerInRole de(uel(e siempre el (alor AtrueB.
public void Transfer(string fromAccount, string toAccount, double amount)
{
// Check that security is enabled
if (ContextUtil.IsSecurityEnabled)
{
// Only Managers are allowed to transfer sums of money in excess of $1000
if (amount > 1000)
{
if (ContextUtil.IsCallerInRole("Manager"))
{
// Caller is authorized
}
else
{
// Caller is unauthorized
}
}
}
Identi"icar los llamadores
&l si$uiente e4emplo muestra c%mo identificar a todos los llamadores precedentes
desde un componente re(isado.
[ComponentAccessControl]
public class MyServicedComponent : ServicedComponent
{
public void ShowCallers()
{
SecurityCallContext context = SecurityCallContext.CurrentCall;
SecurityCallers callers = context.Callers;
foreach(SecurityIdentity id in callers)
{
Console.WriteLine(id.AccountName);
}
}
}
Nota: la identidad del llamador ori$inal puede obtenerse mediante la propiedad
SecurityCallConte6t5,riginalCaller.
Seleccionar una identidad de proceso
3as aplicaciones de Ser(icios &mpresariales acti(adas por el ser(idor se e4ecutan en
una instancia del proceso Dllhost.exe. &s necesario confi$urar la cuenta utili)ada
para e4ecutar el proceso en el cat#lo$o COM+ mediante la herramienta Ser(icios de
componente.
Nota: no es posible especificar la e4ecuci%n como identidad mediante un
atributo .1&..
No e'ecutar nunca como usuario interactivo
1o e4ecute las aplicaciones de ser(idor con la identidad del usuario 2ue haya iniciado
sesi%n de forma interacti(a *confi$uraci%n predeterminada,. &xisten dos moti(os
b#sicos para e(itar este comportamiento8
9 3os pri(ile$ios y derechos de acceso de la aplicaci%n (ar'an y dependen de la
identidad del usuario 2ue haya iniciado una sesi%n de forma interacti(a en el
ser(idor. Si es un administrador 2uien inicia la sesi%n, la aplicaci%n dispondr#
de pri(ile$ios de administrador.
9 Si la aplicaci%n se inicia mientras un usuario inicia una sesi%n de forma
interacti(a y se desconecta a continuaci%n, se cerrar# la aplicaci%n de ser(idor.
1o podr# reiniciarse hasta 2ue otro usuario inicie una sesi%n interacti(amente.
3os desarrolladores diseKan la confi$uraci%n del usuario interacti(o para utili)arla
durante el tiempo de desarrollo, por lo 2ue no deber'a considerarse como una
confi$uraci%n de implementaci%n.
Utilizar una cuenta personalizada con privilegios
m7nimos
@tilice una cuenta con pri(ile$ios m'nimos para miti$ar la amena)a asociada a la
exposici%n del proceso. Si un determinado intruso consi$ue poner en peli$ro el
proceso ser(idor, podr# heredar con facilidad los pri(ile$ios y derechos de acceso
concedidos a la cuenta de proceso. @na cuenta confi$urada con pri(ile$ios m'nimos
reduce los daKos posibles.
Si necesita obtener acceso a recursos de red con la cuenta de proceso, es
imprescindible 2ue el e2uipo remoto pueda autenticar la cuenta del proceso. &xisten
dos opciones para escenarios de este tipo8
9 @tili)ar una cuenta de dominio si los dos e2uipos se encuentran en los mismos
dominios o en dominios de confian)a.
9 @tili)ar una cuenta local y crear a continuaci%n una cuenta duplicada *con el
mismo nombre y la misma contraseKa, en el e2uipo remoto. &sta opci%n
permite $aranti)ar la sincroni)aci%n de las contraseKas de ambas cuentas.
Lui)#s se (ea obli$ado a utili)ar el enfo2ue de la cuenta local duplicada si el
e2uipo remoto se halla en un dominio independiente *sin relaci%n de
confian)a, o bien prote$ido por un ser(idor de se$uridad *en el 2ue el hecho
de 2ue los puertos est/n cerrados no permite utili)ar la autenticaci%n de
0indo<s,.

,!tener acceso a recursos de red
&s posible 2ue los componentes re(isados necesiten obtener acceso a recursos. &n
este sentido, resulta importante identificar los si$uientes elementos8
9 3os recursos a los 2ue necesitan obtener acceso los componentes. "or
e4emplo, archi(os de recursos compartidos de archi(os, bases de datos, otros
ser(idores DCOM, ob4etos de ser(icio Acti(e Directory;, etc.
9 3a identidad utili)ada para reali)ar el acceso al recurso. Si el componente
re(isado obtiene acceso a recursos remotos, los e2uipos remotos deben poder
ser capaces de autenticar la identidad utili)ada *2ue de forma predeterminada
es la identidad del proceso,.

Nota: si desea obtener informaci%n espec'fica acerca de c%mo obtener acceso a
las bases de datos SL3 Ser(er, consulte el cap'tulo 6, >Se$uridad del acceso a
datos>.
"uede obtener acceso a recursos remotos desde un componente de una aplicaci%n
de Ser(icios &mpresariales mediante cual2uiera de las si$uientes identidades8
9 &l llamador ori$inal *si se utili)a la suplantaci%n expl'cita con
CoImpersonateClient,
9 3a identidad del proceso actual *confi$urada en el cat#lo$o COM+ para las
aplicaciones de ser(idor,
9 @na cuenta de ser(icio espec'fica

Utilizar el llamador original
"ara utili)ar la identidad del llamador ori$inal para el acceso a recursos remotos es
preciso8
9 Suplantar mediante pro$ramaci%n el llamador ori$inal llamando a
CoImpersonateClient.
9 "oder dele$ar el contexto de se$uridad del llamador desde el ser(idor de
aplicaciones 2ue alo4a la aplicaci%n de Ser(icios &mpresariales al e2uipo
remoto. &ste comportamiento asume el empleo de la autenticaci%n :erberos
entre la aplicaci%n de Ser(icios &mpresariales y la aplicaci%n cliente.

Advertencia de escala!ilidad: si obtiene acceso al ni(el de ser(icios de datos de
la aplicaci%n mediante la identidad suplantada del llamador ori$inal $enerar# un
impacto considerable en la escalabilidad de la aplicaci%n, puesto 2ue de este
modo se e(ita 2ue la a$rupaci%n de conexiones a la base de datos funcione de
forma efica)M y no funciona con eficacia por2ue el contexto de se$uridad de cada
conexi%n a una base de datos se halla (inculado a demasiados llamadores
indi(iduales.
(0s in"ormacin
Si desea obtener m#s informaci%n acerca de la suplantaci%n de los llamadores,
consulte el apartado >.ransferir el llamador ori$inal> 2ue fi$ura m#s adelante en este
cap'tulo.
Utilizar la identidad del proceso actual
3a confi$uraci%n de la aplicaci%n para e4ecutarse como aplicaci%n de ser(idores
permite utili)ar la identidad del proceso confi$urada para obtener acceso a recursos
remotos *comportamiento predeterminado,.
Si se desea utili)ar la cuenta del proceso ser(idor para el acceso a los recursos
remotos, lle(e a cabo los si$uientes pasos8
9 &4ecute la aplicaci%n de ser(idor mediante una cuenta de dominio con
pri(ile$ios m'nimos. &ste comportamiento asume 2ue los e2uipos cliente y
ser(idor se hallan en los mismos dominios o en dominios de confian)a.
9 Dupli2ue la cuenta del proceso mediante el mismo nombre de usuario y
contraseKa del e2uipo remoto.

Cuando lo 2ue se desea primar es la facilidad de administraci%n es con(eniente
utili)ar una cuenta de dominio con pri(ile$ios m'nimos.
Si la aplicaci%n 2ue utili)a est# confi$urada para e4ecutarse como aplicaci%n de
biblioteca, la identidad del proceso se heredar# del proceso host *2ue suele ser una
aplicaci%n basada en 0eb,. "ara obtener m#s informaci%n acerca del uso de la
identidad del proceso AS".1&. para obtener acceso a recursos remotos, consulte el
cap'tulo N, >Se$uridad de AS".1&.>.
Utilizar una cuenta de servicio espec7"ica
3a aplicaci%n de Ser(icios &mpresariales podr'a obtener acceso a los recursos
remotos mediante una cuenta de ser(icio confi$urada espec'ficamente para tal fin
*es decir, una cuenta de 0indo<s 2ue no sea de usuario,. Sin embar$o, este
enfo2ue no es recomendable en entornos 0indo<s !!! por2ue asume 2ue se
llamar# a la A"7 .ogonUser.
&l empleo de .ogonUser en 0indo<s !!! obli$a a conceder el pri(ile$io >Actuar
como parte del sistema operati(o> a la cuenta de proceso de Ser(icios
&mpresariales. &l resultado es una reducci%n notable de la se$uridad de la
aplicaci%n.
Nota: esta restricci%n de4ar# de existir en Microsoft 0indo<s Ser(er !!?.
Trans"erir el llamador original
De forma predeterminada, las llamadas salientes 2ue en('an los componentes
re(isados *para obtener acceso a recursos locales o remotos, por e4emplo, se
reali)an con el contexto de se$uridad obtenido del proceso de host. &n el caso de las
aplicaciones de ser(idor, dicho contexto es la identidad Ae4ecutar comoB. &n el caso
de las aplicaciones de biblioteca, se trata de la identidad del proceso de cliente
*host,, como por e4emplo AspnetO<p.exe cuando la aplicaci%n 0eb AS".1&. es el
cliente.
ara trans"erir el conte6to del llamador original a trav$s de una aplicacin
de Servicios Empresariales
6. 3lame a CoImpersonateClient.
De este modo se crea y ad4unta un testi$o de suplantaci%n de subproceso al
subproceso actual.
. &4ecute la operaci%n *acceso al recurso local o remoto,.
Dado 2ue la suplantaci%n est# habilitada, la llamada saliente se reali)a con el
contexto de se$uridad del cliente *tal como lo define el testi$o de
suplantaci%n,.
&n caso de obtener acceso a recursos locales, el llamador *proceso de cliente,
debe haber especificado como m'nimo la suplantaci%n de ni(el de
suplantaci%n. Si se (a a obtener acceso a recursos remotos, el llamador debe
haber especificado la suplantaci%n de ni(el de dele$aci%n.
Si el llamador es una aplicaci%n 0eb de AS".1&., el ni(el de suplantaci%n
predeterminado para el proceso de traba4o de AS".1&. ser# Suplantaci%n. "or
lo tanto, para transferir el llamador ori$inal a un e2uipo remoto de ni(el inferior
es preciso cambiar este (alor predeterminado para la dele$aci%n *(alor
ADele$ateB del elemento Iprocess(odelJ del archi(o Machine.confi$ del
e2uipo cliente,.
Nota: el empleo del contexto de se$uridad del llamador ori$inal para obtener
acceso a los recursos remotos exi$e la autenticaci%n :erberos, adem#s de la
confi$uraci%n de cuentas para la dele$aci%n. 3a cuenta utili)ada para e4ecutar
la aplicaci%n de ser(idor de Ser(icios &mpresariales tambi/n debe marcarse
en Acti(e Directory como ADele$aci%n de confian)aB.
?. Deten$a la suplantaci%n llamando a CoRevertToSel".
De este modo se elimina el testi$o de suplantaci%n. Cual2uier llamada
posterior reali)ada desde el m/todo actual utili)ar# el contexto de se$uridad
del proceso. Si no puede llamar a CoRevertToSel", se llamar# impl'citamente
durante el tiempo de e4ecuci%n cuando termine el m/todo.

Nota: la identidad del llamador ori$inal se transmite autom#ticamente a una
aplicaci%n de Ser(icios &mpresariales y puede utili)arse mediante
SecurityCallConte6t5,riginalCaller. &ste enfo2ue puede resultar =til para fines
de auditor'a.
.lamar a CoImpersonateClient
CoImpersonateClient *y CoRevertToSel", se hallan en O3&?.dll. Deben
importarse las definiciones correspondientes mediante el atributo -llImport a fin de
poder llamarlos a tra(/s de "P7n(oke. &l si$uiente fra$mento de c%di$o ilustra esta
situaci%n.
class COMSec
{
[DllImport("OLE32.DLL", CharSet=CharSet.Auto)]
public static extern uint CoImpersonateClient();
[DllImport("OLE32.DLL", CharSet=CharSet.Auto)]
public static extern uint CoRevertToSelf();
}
. . .
void SomeMethod()
{
// To flow the original caller's security context and use it to access local
// or remote resources, start impersonation
COMSec.CoImpersonateClient();
// Perform operations as the caller
// Code here uses the context of the caller not the context of the process
. . .
COMSec.CoRevertToSelf();
// Code here reverts to using the process context
}
(0s in"ormacin
"ara obtener m#s informaci%n acerca de c%mo confi$urar un escenario de
dele$aci%n :erberos completo 2ue muestre c%mo transmitir el contexto de se$uridad
del llamador ori$inal a tra(/s de una aplicaci%n 0eb de AS".1&. o una aplicaci%n de
Ser(icios &mpresariales hasta una base de datos, consulte la secci%n >.ransferir el
llamador ori$inal> del cap'tulo G, >Se$uridad de intranet>.
Ci"rado RC
"ara prote$er los datos 2ue se en('an desde una aplicaci%n cliente a un componente
re(isado remoto a tra(/s de DCOM, utilice el ni(el de autenticaci%n de pri(acidad de
pa2uetes -"C entre el cliente y el ser(idor. Dicho pa2uete proporciona
confidencialidad e inte$ridad para los mensa4es.
Confi$ure el ni(el de autenticaci%n en el cliente y el ser(idor.
"ara confi$urar AS".1&. *cuando una aplicaci%n 0eb deAS".1&. es el cliente,,
estable)ca el atributo comAut)entication.evel del elemento Iprocess(odelJ del
archi(o Machine.confi$ en 8trivacy.
"ara confi$urar una aplicaci%n de ser(idor de Ser(icios &mpresariales, estable)ca el
ni(el de autenticaci%n para el ni(el de aplicaci%n mediante la herramienta Ser(icios
de componente o bien con el si$uiente atributo .1&. del ensamblado del
componente re(isado.
[assembly: ApplicationAccessControl(
Authentication = AuthenticationOption.Privacy)]
(0s in"ormacin
9 Si desea obtener m#s informaci%n acerca de c%mo confi$urar la se$uridad
*incluidos los ni(eles de autenticaci%n,, consulte la secci%n >Confi$urar la
se$uridad> 2ue encontrar# en este mismo cap'tulo.
9 Si desea obtener m#s informaci%n acerca de los ni(eles de autenticaci%n
-"CPDCOM, consulte la secci%n >Autenticaci%n> 2ue fi$ura m#s adelante en
este cap'tulo.
9 "ara obtener m#s informaci%n acerca de la ne$ociaci%n del ni(el de
autenticaci%n, consulte la secci%n >1e$ociaci%n del ni(el de autenticaci%n> 2ue
fi$ura m#s adelante en este mismo cap'tulo.

Crear componentes revisados
"ara obtener una $u'a detallada paso a paso acerca de la creaci%n de un
componente re(isado, consulte >C%mo utili)ar la se$uridad basada en funciones con
Ser(icios &mpresariales> en la secci%n de referencia de este manual.
ro!lemas del !loqueo de -..
Si encuentra al$una D33 blo2ueada al (ol(er a crear un componente re(isado8
9 @tilice Ser(icios de componente para cerrar la aplicaci%n de ser(idor COM+.
9 Si desarrolla una aplicaci%n de biblioteca, es posible 2ue a=n pueda car$ar la
aplicaci%n en el proceso AspnetO<p.exe. &4ecute IISReset desde el s'mbolo
del sistema o utilice el Administrador de tareas para detener el proceso
AspnetO<p.exe.
9 @tilice la herramienta EileMon.exe de <<<.sysinternals.com para obtener
ayuda acerca de la resoluci%n de problemas del blo2ueo de archi(os.
9ersiones
A continuaci%n se muestra el atributo predeterminado Assem!ly9ersion $enerado
por el sistema de desarrollo Microsoft Visual Studio; .1&..
[assembly: AssemblyVersion("1.0.*")]
Cada (e) 2ue (uel(a a crear el proyecto se $enerar# una nue(a (ersi%n del
ensamblado. &ste comportamiento da lu$ar a la $eneraci%n de un nue(o identificador
de clase *C3S7D, para identificar las clases de componentes re(isados. Si re$istra
repetidamente el ensamblado con los ser(icios de componente mediante
-e$s(cs.exe, se $enerar#n componentes duplicados *=nica y exclusi(amente clases,
con diferentes C3S7D 2ue se enumeran en la carpeta Componentes.
Aun2ue este enfo2ue es compatible con la sem#ntica estricta de la creaci%n de
(ersiones COM y e(ita 2ue tanto los clientes administrados como los no
administrados ten$an problemas de funcionamiento, puede pro(ocar problemas
durante el desarrollo.
Durante la fase de pruebas y desarrollo, plant/ese la posibilidad de establecer una
(ersi%n expl'cita mediante el atributo Assem!ly9ersion del ni(el de ensamblado 2ue
fi$ura a continuaci%n.
[assembly: AssemblyVersion("1.0.0.1")]
&sta confi$uraci%n e(itar# 2ue se $enere un nue(o C3S7D cada (e) 2ue se cree un
nue(o proyecto. Lui)#s desee tambi/n solucionar los identificadores de interfa) *77D,.
Si la clase 2ue utili)a implementa interfaces expl'citas, puede corre$ir el 77D de una
determinada interfa) con el atributo D@7D, tal como se muestra a continuaci%n8
[Guid("E1FBF27E-9F11-474d-8DF6-58916F798E9D")]
public interface IMyInterface
{
}
ara generar nuevos :UI-
6. &n el men= /erramientas de Visual Studio .1&., ha$a clic en Crear :UI-.
. Ca$a clic en 4ormato de registro.
?. Ca$a clic en Nuevo :UI-.
F. Ca$a clic en Copiar.
G. "e$ue el D@7D desde el "ortapapeles al c%di$o fuente.

Importante: antes de implementar el ensamblado de los componentes re(isados
para reali)ar pruebas e iniciar la producci%n, elimine cual2uier D@7D fi4o y (uel(a a
usar un mecanismo autom#tico de control de (ersiones de ensamblados *por
e4emplo, A6.!.QB,. &l hecho de no poder hacerlo aumenta las posibilidades de 2ue
una nue(a (ersi%n del componente estropee los clientes existentes.
(0s in"ormacin
"ara obtener m#s informaci%n acerca del control de (ersiones para la
implementaci%n, consulte @nderstandin$ &nterprise Ser(ices *COM+, in .1&. *en
in$l/s, en MSD1.
E6cepciones de ;ueryInter"ace
Si tras un error de la interfa) IroleSecurity se detecta una llamada a
;ueryInter"ace, si$nifica 2ue se ha actuali)ado la definici%n de la interfa) del
ensamblado pero 2ue no se ha (uelto a re$istrar el ensamblado en Ser(icios de
componente mediante -e$s(cs.exe.
Importante: cada (e) 2ue e4ecute -e$s(cs.exe deber# (ol(er a confi$urar la
identidad Ae4ecutar comoB de la aplicaci%n de ser(idor, adem#s de (ol(er a a$re$ar
usuarios a los $rupos. "uede crear una secuencia de comandos simple para
automati)ar esta tarea.
-C,( y servidores de seguridad
0indo<s !!! *S"? o LE& 6N.6, o 0indo<s Ser(er !!? permite confi$urar las
aplicaciones de Ser(icios &mpresariales para 2ue utilicen un punto final est#tico. Si
existe un ser(idor de se$uridad 2ue separa el cliente del ser(idor, bastar# con 2ue
abra dos puertos de dicho ser(idor de se$uridad. &n concreto, deber# abrir el puerto
6?G para -"C y un puerto para la aplicaci%n de Ser(icios &mpresariales.
Como alternati(a a este enfo2ue puede sopesar la posibilidad de exponer su
aplicaci%n de Ser(icios &mpresariales como ser(icio 0eb. De esta forma podr#
acti(ar componentes re(isados, y llamarlos, mediante el protocolo SOA" y el puerto
N!. &l principal problema de este enfo2ue es 2ue no permite transmitir el contexto de
la transacci%n del cliente al ser(idor. &n este caso deber'a iniciar la transacci%n en el
componente re(isado remoto.
(0s in"ormacin
Consulte los si$uientes art'culos de la :no<led$e Hase para obtener m#s
informaci%n *en in$l/s,8
9 Art'culo L?65R!, >Cannot Set Eixed &ndpoint for a COM+ Application>
9 Art'culo LG5!66, >SAM"3&8 A Simple DCOM Client Ser(er .est Application>
9 Art'culo LFNN!5, >"-H8 DCOM Does 1ot 0ork o(er 1A.SHased Eire<all>
9 Art'culo LG!?RT, >71EO8 Confi$urin$ Microsoft Distributed .ransaction
Coordinator *D.C, to 0ork .hrou$h a Eire<all>
9 Art'culo L6GFG5R, >CO0.O8 Confi$ure -"C Dynamic "ort Allocation to 0ork
<P Eire<all>

.lamar a componentes revisados desde AS5NET
&sta secci%n resume los problemas b#sicos a los 2ue deber# hacer frente cuando
una aplicaci%n AS".1&. llama a un componente re(isado.
Identidad del llamador
Cuando llama a un componente re(isado desde una aplicaci%n de AS".1&., la
identidad de se$uridad para la llamada se obtiene de la identidad de subproceso
0in?; de la aplicaci%n. Si la aplicaci%n 0eb est# confi$urada para la suplantaci%n
del llamador, ser# la identidad de /ste =ltimo. De lo contrario, se utili)ar# la identidad
de proceso de AS".1&. *AS"1&. de forma predeterminada,.
Desde una aplicaci%n AS".1&. puede recuperarse la identidad de subproceso 0in?
actual llamando a 2indo3sIdentity5:etCurrent%&.
Si se trata de un componente re(isado, la identidad del llamador ori$inal puede
recuperarse mediante SecurityCallConte6t5,riginalCaller.
Utilizar la autenticacin de 2indo3s y la suplantacin
en la aplicacin !asada en 2e!
Cabilitar una se$uridad basada en funciones coherente desde la aplicaci%n de
Ser(icios &mpresariales re2uiere utili)ar la autenticaci%n de 0indo<s y habilitar las
funciones de suplantaci%n. De este modo se $aranti)a 2ue los componentes
re(isados puedan autenticar a los llamadores ori$inales as' como tomar decisiones
de autori)aci%n se$=n la identidad del llamador ori$inal.
Con"igurar la autenticacin y suplantacin en
(ac)ine5con"ig
3os ni(eles de autenticaci%n DCOM se ne$ocia entre el cliente *por e4emplo, la
aplicaci%n basada en 0eb, y el ser(idor *la aplicaci%n de Ser(icios &mpresariales,.
Siempre se utili)ar# la confi$uraci%n de se$uridad m#s exi$ente de las dos.
Confi$ure los ni(eles de autenticaci%n de AS".1&. con ayuda del atributo
comAut)enitcation del elemento Iprocess(odelJ del archi(o Machine.confi$.
&n cuanto a los ni(eles de suplantaci%n, /stos son controlados por el cliente *por
e4emplo, una aplicaci%n basada en 0eb,. &l cliente puede determinar el $rado de
suplantaci%n 2ue desea permitir utili)ar al ser(idor.
Confi$ure los ni(eles de suplantaci%n de AS".1&. *para todas las llamadas DCOM
salientes, con ayuda del atributo comImpersonation.evel del elemento
Iprocess(odelJ del archi(o Machine.confi$.
Con"igurar los pro6ies de inter"az
3a confi$uraci%n de se$uridad 2ue se aplica a los proxies de interfa) indi(iduales
suele obtenerse de la confi$uraci%n de se$uridad predeterminada del ni(el de
proceso. Cuando se trata de AS".1&., la confi$uraci%n de se$uridad
predeterminada, tal como los ni(eles de suplantaci%n y autenticaci%n, se confi$uran
en el archi(o Machine.confi$, como se ha descrito anteriormente.
"uede modificar la confi$uraci%n de se$uridad de un proxy de interfa) indi(idual
siempre 2ue sea necesario. "or e4emplo, si la aplicaci%n AS".1&. se comunica con
un componente re(isado 2ue expone dos interfaces y se transmiten datos
importantes a tra(/s de una interfa) solamente, puede optar por utili)ar la
compatibilidad para cifrado 2ue incluye el ni(el de autenticaci%n del pa2uete de
pri(acidad s%lo en la interfa) a tra(/s de la cual se transmitir# la informaci%n
importante y por utili)ar, por e4emplo, la autenticaci%n de pa2uete en la otra interfa).
Con ello de4ar#n de producirse las mermas de rendimiento asociadas con el cifrado
en ambas interfaces.
De forma $lobal, el con4unto de la confi$uraci%n de se$uridad correspondiente a un
proxy de interfa) se denomina Acapa de se$uridadB. COM ofrece las si$uientes
funciones para permitir reali)ar consultas y manipular la confi$uraci%n de la Acapa de
se$uridadB de los proxies de interfa) indi(idual8
9 CoLuery"roxyHlanket
9 CoSet"roxyHlanket
9 CoCopy"roxy

@tilice "P7n(oke para llamar a estas funciones desde una aplicaci%n 0eb de
AS".1&. *el cliente DCOM,. &l si$uiente fra$mento de c%di$o muestra c%mo
confi$urar una interfa) espec'fica para utili)ar el ni(el de autenticaci%n de pri(acidad
del pa2uete *2ue incluye funciones de cifrado,. &ste c%di$o puede utili)arse desde
una aplicaci%n 0eb de AS".1&. 2ue se comuni2ue con un componente re(isado
remoto.
// Define a wrapper class for the P/Invoke call to CoSetProxyBlanket
class COMSec
{
// Constants required for the call to CoSetProxyBlanket
public const uint RPC_C_AUTHN_DEFAULT = 0xFFFFFFFF;
public const uint RPC_C_AUTHZ_DEFAULT = 0xFFFFFFFF;
public const uint RPC_C_AUTHN_LEVEL_PKT_PRIVACY = 6;
public const uint RPC_C_IMP_LEVEL_DEFAULT = 0;
public const uint COLE_DEFAULT_AUTHINFO = 0xFFFFFFFF;
public const uint COLE_DEFAULT_PRINCIPAL = 0;
public const uint EOAC_DEFAULT = 0x800;
// HRESULT CoSetProxyBlanket( IUnknown * pProxy,
// DWORD dwAuthnSvc,
// DWORD dwAuthzSvc,
// WCHAR * pServerPrincName,
// DWORD dwAuthnLevel,
// DWORD dwImpLevel,
// RPC_AUTH_IDENTITY_HANDLE pAuthInfo,
// DWORD dwCapabilities );
[DllImport("OLE32.DLL", CharSet=CharSet.Auto)]
public unsafe static extern uint CoSetProxyBlanket(
IntPtr pProxy,
uint dwAuthnSvc,
uint dwAuthzSvc,
IntPtr pServerPrincName,
uint dwAuthnLevel,
uint dwImpLevel,
IntPtr pAuthInfo,
uint dwCapababilities);
} // end class COMSec
// Code to call CoSetProxyBlanket
void CallComponent()
{
// This is the interface to configure
Guid IID_ISecureInterface = new Guid("c720ff19-bec1-352c-bb4b-e2de10b858ba");
IntPtr pISecureInterface;
// Instantiate the serviced component
CreditCardComponent comp = new CreditCardComponent();
// Get its IUnknown pointer
IntPtr pIUnk = Marshal.GetIUnknownForObject(comp);
// Get the interface to configure
Marshal.QueryInterface(pIUnk, ref IID_ISecureInterface,
out pISecureInterface);
try
{
// Configure the interface proxy and set packet privacy authentication
uint hr = COMSec.CoSetProxyBlanket( pISecureInterface,
COMSec.RPC_C_AUTHN_DEFAULT,
COMSec.RPC_C_AUTHZ_DEFAULT,
IntPtr.Zero,
COMSec.RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
COMSec.RPC_C_IMP_LEVEL_DEFAULT,
IntPtr.Zero,
COMSec.EOAC_DEFAULT );
ISecureInterface secure = (ISecureInterface)comp;
// The following call will be encrypted as ISecureInterface is configured
// for packet privacy authentication. Other interfaces use the process
// level defaults (normally packet authentication).
secure.ValidateCreditCard("123456789");
}
catch (Exception ex)
{
}
}
(0s in"ormacin
9 Si desea obtener m#s informaci%n acerca de c%mo confi$urar una aplicaci%n
cliente de AS".1&. para 2ue llame a componentes re(isados, consulte la
secci%n >Confi$urar una aplicaci%n cliente AS".1&.> 2ue fi$ura m#s arriba en
este mismo cap'tulo.
9 "ara obtener m#s informaci%n acerca de los ni(eles de autenticaci%n DCOM,
consulte la secci%n >Autenticaci%n> 2ue encontrar# m#s adelante.
9 "ara obtener m#s informaci%n acerca de los ni(eles de suplantaci%n DCOM,
consulte la secci%n >Suplantaci%n> 2ue encontrar# m#s adelante.
9 "ara obtener m#s informaci%n acerca del uso de la autenticaci%n de 0indo<s
y la habilitaci%n de la suplantaci%n para una aplicaci%n basada en 0eb,
consulte el cap'tulo N, >Se$uridad de AS".1&.>.

Conceptos de seguridad
&sta secci%n describe bre(emente los conceptos de se$uridad de Ser(icios
&mpresariales. Si ya ha traba4ado con COM+, le resultar#n familiares muchos de los
conceptos.
Si desea obtener informaci%n de referencia acerca de Ser(icios &mpresariales,
consulte el art'culo >@nderstandin$ &nterprise Ser(ices *COM+, in .1&.> *en in$l/s,
de MSD1.
A continuaci%n fi$uran una serie de res=menes de los conceptos cla(e de se$uridad
con los 2ue deber'a estar familiari)ado8
9 3a confi$uraci%n de se$uridad para los componentes re(isados y las
aplicaciones de Ser(icios &mpresariales se almacenan en el cat#lo$o COM+.
3a mayor'a de los par#metros pueden confi$urarse con los atributos .1&..
.odos los par#metros pueden confi$urarse con la herramienta de
administraci%n Ser(icios de componente o las secuencias de comandos del
sistema de desarrollo Microsoft Visual Hasic; Scriptin$ &dition.
9 3a autori)aci%n se lle(a a cabo mediante las funciones de Ser(icios
&mpresariales *COM+,, 2ue pueden incluir cuentas de $rupo o usuario de
0indo<s. Son distintas de las funciones .1&..
9 3a se$uridad basada en funciones puede aplicarse en distintos ni(eles8
aplicaci%n, interfa), clase y m/todo.
9 3as comprobaciones de funciones imperati(as se efect=an mediante
pro$ramaci%n directamente desde los m/todos con el m/todo
IsCallerInRole de la clase Conte6tUtil.

9 3a efica) autori)aci%n basada en funciones de las aplicaciones de Ser(icios
&mpresariales se basa en la identidad de 0indo<s 2ue se utili)a para llamar a
los componentes re(isados.
9 Lui)#s sea necesario combinar la autenticaci%n de 0indo<s con la
suplantaci%n en las aplicaciones 0eb de AS".1&., siempre 2ue la
aplicaci%n 0eb llame a los componentes re(isados 2ue se basan en las
funciones de Ser(icios &mpresariales *COM+,.
9 Cuando se llama a un componente re(isado desde una aplicaci%n 0eb de
AS".1&. o un ser(icio 0eb, la identidad utili)ada para la llamada DCOM
saliente la determina la identidad de subproceso 0in? tal como se haya
definido en 2indo3sIdentity5:etCurrent%&.

9 3os componentes re(isados pueden e4ecutarse en aplicaciones de ser(idor o
de biblioteca.
9 3as aplicaciones de ser(idor se e4ecutan en instancias independientes de
Dllhost.exe.
9 3as aplicaciones de biblioteca se e4ecutan en el espacio de direcciones de
proceso del cliente.
9 3a autori)aci%n basada en funciones se e4ecuta de modo similar en las
aplicaciones de ser(idor y de biblioteca, a pesar de al$unas sutiles
diferencias relati(as a la se$uridad. "ara obtener informaci%n m#s
detallada, consulte la secci%n >Se$uridad para las aplicaciones de ser(idor
y biblioteca> 2ue fi$ura m#s arriba en este mismo cap'tulo.

9 3a autenticaci%n se lle(a a cabo a tra(/s de los ser(icios subyacentes de
DCOM y -"C. 3os ni(eles de autenticaci%n del cliente y el ser(idor se
combinan para determinar el ni(el de autenticaci%n resultante 2ue se emplear#
para la comunicaci%n con el componente re(isado.
9 3a suplantaci%n se confi$ura desde la aplicaci%n cliente. Uste determina la
funcionalidad de suplantaci%n del ser(idor.

4unciones de Servicios Empresariales %C,(1& y 5NET
3as funciones de Ser(icios &mpresariales *COM+, sir(en para representar
cate$or'as comunes de usuarios 2ue comparten los mismos pri(ile$ios de se$uridad
en una aplicaci%n. A pesar de estar basadas en conceptos similares a los de las
funciones .1&., funcionan de modo totalmente independiente.
3as funciones de Ser(icios &mpresariales *COM+, contienen cuentas de usuario y
$rupo de 0indo<s *a diferencia de las funciones .1&., 2ue pueden incluir
identidades de usuario no propias de 0indo<s,. Como consecuencia, las funciones
de Ser(icios &mpresariales *COM+, son s%lo un mecanismo de autori)aci%n efica)
para aplicaciones 2ue utili)an la autenticaci%n de 0indo<s y la suplantaci%n *para
transmitir el contexto de se$uridad del llamador a la aplicaci%n de Ser(icios
&mpresariales,.
.abla 5.68 comparacin de funciones de Servicios Empresariales (COM+) .NET
Caracter'stica Eunciones de Ser(icios
&mpresariales *COM+,
Eunciones .1&.
Administraci%n Cerramienta de
administraci%n Ser(icios de
componente
"ersonali)ada
Almac/n de
datos
Cat#lo$o COM+ Almac/n de datos personali)ado *SL3
Ser(er o Acti(e Directory, por e4emplo,
Declarati(as S'
VSecurity-ole*>Mana$er>,W
S'
V"rincipal"ermission*
SecurityAction.Demand,
-oleX>Mana$er>,W
7mperati(as S'
Context@til.7sCaller7n-ole*,
S'
7"rincipal.7s7n-ole
Dranularidad
para ni(eles de
clases,
interfaces y
m/todos
S' S'
&xtensible 1o S'
*mediante la implementaci%n
personali)ada de 7"rincipal,
Disponible para
todos los
componentes .
1&.
S%lo para componentes
deri(ados de la clase b#sica
Ser(icedComponent
S'
"ertenencia a
funciones
3as funciones incluyen
cuentas de $rupo o usuario
de 0indo<s
Cuando se utili)a 0indo<s"rincipals,
las funciones SO1 $rupos de
0indo<s8 no hay ni(eles adicionales
de abstracci%n
-e2uiere una
implementaci%
S'
"ara conse$uir la
1o
n expl'cita de la
interfa)
autori)aci%n para el ni(el de
m/todo es preciso definir e
implementar expl'citamente
una interfa).

Autenticacin
Dado 2ue los Ser(icios &mpresariales se basan en la infraestructura subyacente 2ue
proporcionan COM+ y DCOMP-"C, la confi$uraci%n del ni(el de autenticaci%n
disponible para las aplicaciones de Ser(icios &mpresariales es la confi$uraci%n
definida por -"C *y 2ue utili)a DCOM,.
.abla 5.8 configuracin de la au!en!icacin para aplicaciones de Servicios
Empresariales
1i(el de autenticaci%n Descripci%n
"redeterminado Se selecciona el ni(el de autenticaci%n con las normas de
ne$ociaci%n normales.
1in$uno 1o se e4ecuta la autenticaci%n.
Conexi%n S%lo se autentican las credenciales cuando el cliente se
conecta al ser(idor.
3lamada &fect=a la autenticaci%n al principio de cada llamada a
procedimientos remotos.
"a2uete Autentica todos los datos recibidos del cliente.
7nte$ridad del pa2uete Autentica todos los datos y comprueba 2ue no se hayan
modificado nin$uno de los datos transferidos.
"ri(acidad del pa2uete Autentica todos los datos y cifra el estado de los
par#metros para cada llamada a procedimientos remotos.

romocin del nivel de autenticacin
&s importante 2ue sea consciente de la promoci%n 2ue se efect=a en silencio de
al$unos ni(eles de autenticaci%n. "or e4emplo8
9 Cuando se utili)a el transporte de data$ramas @D" *protocolo de datos de
usuario,, los ni(eles de conexi%n y llamada se promocionan al ni(el de pa2uete
por2ue los ni(eles de autenticaci%n mencionados anteriormente son (#lidos
=nicamente para el transporte orientado a conexiones como puede ser .C".
Nota: 0indo<s !!! utili)a de forma predeterminada -"C cuando utili)a el
protocolo .C" para las comunicaciones DCOM.
9 &n el caso de las llamadas entre procesos de un =nico e2uipo, todos los
ni(eles de autenticaci%n se promocionan siempre al ni(el de pri(acidad del
pa2uete. 1o obstante, en los escenarios de e2uipos =nicos, los datos no se
cifran para mantener la confidencialidad *por2ue los datos no (an a ser
transmitidos por nin$una red,.

Negociacin del nivel de autenticacin
&l ni(el de autenticaci%n 2ue utili)a Ser(icios &mpresariales para autenticar un
cliente lo determinan estos dos par#metros de confi$uraci%n8
9 El nivel de autenticacin para el nivel de procesos. "ara las aplicaciones
acti(adas por un ser(idor *2ue se e4ecutan en Dllhost.exe,, el ni(el de
autenticaci%n se confi$ura desde el cat#lo$o COM+.
9 El nivel de autenticacin del cliente. &l ni(el de autenticaci%n confi$urado
del proceso de cliente 2ue se comunica con el componente re(isado tambi/n
incide sobre el ni(el de autenticaci%n utili)ado.
&l ni(el de autenticaci%n predeterminado para una aplicaci%n 0eb de AS".1&.
se define mediante el atributo comAut)entication.evel del elemento
Iprocess(odelJ del archi(o Machine.confi$.

Siempre se selecciona el ni(el de autenticaci%n m#s ele(ado de los dos *cliente y
ser(idor,. 3a ilustraci%n 5.F refle4a este proceso.
!"nsert #gure: C$%9 & ES Aut/entication 0evel Negotiation.gi)*
7lustraci%n 5.F
Negociacin del nivel de autenticacin
(0s in"ormacin
Si desea obtener m#s informaci%n acerca de c%mo confi$urar los ni(eles de
autenticaci%n para una aplicaci%n de Ser(icios &mpresariales, consulte la secci%n
>Confi$urar la se$uridad> 2ue fi$ura m#s arriba en este mismo cap'tulo.
Suplantacin
&l ni(el de suplantaci%n definido para una aplicaci%n de Ser(icios &mpresariales
determina el ni(el de suplantaci%n 2ue se aplicar# a todas las llamadas DCOM
salientes 2ue efect=en los componentes re(isados de la aplicaci%n.
Importante: este ni(el 1O tiene repercusi%n al$una sobre el hecho de 2ue los
componentes re(isados de la aplicaci%n e4ecuten la suplantaci%n para los
llamadores. De manera predeterminada, los componentes re(isados no suplantan
los llamadores. "ara suplantarlos, es preciso 2ue el componente re(isado llame a
CoImpersonateClient# como se describe en la secci%n A.ransferir el llamador
ori$inalB 2ue fi$ura m#s arriba en este mismo cap'tulo.
3a suplantaci%n es un par#metro del cliente. Constituye un ni(el de protecci%n del
cliente puesto 2ue le permite restrin$ir las funciones de suplantaci%n del ser(idor.
.abla 5.?8 niveles de suplan!acin disponi"les
1i(el de suplantaci%n Descripci%n
7dentificaci%n "ermite 2ue el ser(idor identifi2ue al cliente y realice
comprobaciones de acceso mediante el testi$o de acceso
del cliente.
Suplantaci%n "ermite 2ue el ser(idor obten$a acceso a los recursos
locales utili)ando las credenciales del cliente.
Dele$aci%n "ermite 2ue el ser(idor obten$a acceso a los recursos
remotos utili)ando las credenciales del cliente *este ni(el
exi$e :erberos y una confi$uraci%n de cuentas
espec'fica,.
&l ni(el de suplantaci%n predeterminado de una aplicaci%n basada en 0eb de
AS".1&. cuando se comunica con un componente re(isado *o cual2uier
componente 2ue utilice DCOM, se especifica mediante el atributo
comImpersonation.evel del elemento Iprocess(odelJ del archi(o
Machine.confi$.
Cloaking %dise<o invisi!le&
3a opci%n Cloa#ing determina exactamente el modo como se prote$e la identidad del
cliente desde un proxy de ob4etos COM a un ser(idor durante la suplantaci%n.
&xisten dos formas de cloa#ing8
9 Cloa8ing din0mico. 3as aplicaciones ser(idor de Ser(icios &mpresariales
utili)an el cloakin$ din#mico *2ue no admite confi$uraci%n al$una,. &l cloakin$
de las aplicaciones biblioteca (iene determinado por el proceso de host, por
e4emplo, por el proceso de traba4o de AS".1&. *AspnetO<p.exe,. 3as
aplicaciones basadas en 0eb tambi/n utili)an el cloa#ing din#mico 2ue
tampoco se puede confi$urar.
&l cloakin$ din#mico pro(oca 2ue se utilice el testi$o de suplantaci%n de
subproceso para suplantar la identidad del cliente durante la suplantaci%n.
&sto si$nifica 2ue, si llama a CoImpersonateClient desde un componente
re(isado, se asume la identidad del cliente para las llamadas salientes
posteriores efectuadas con el mismo m/todo, hasta 2ue se llame a
CoRevertToSel" o finalice el m/todo *por el 2ue se llama impl'citamente a
CoRevertToSel",.
9 Cloa8ing est0tico. Con el cloakin$ est#tico, el ser(idor (e las credenciales
utili)adas en la primera llamada del cliente al ser(idor *independientemente de
si al$=n subproceso e4ecuta la suplantaci%n durante una llamada saliente,.

(0s in"ormacin
9 "ara obtener informaci%n acerca de la confi$uraci%n de los ni(eles de
suplantaci%n para las aplicaciones de Ser(icios &mpresariales, consulte la
secci%n >Confi$urar la se$uridad> 2ue fi$ura m#s arriba en este cap'tulo.
9 "ara obtener m#s informaci%n acerca de cloa#ing *diseKo in(isible,, consulte la
informaci%n de >Cloakin$> en la "latform SD: de MSD1 *en in$l/s,.

Resumen
&n este cap'tulo se ha explicado c%mo crear componentes re(isados se$uros en las
aplicaciones de Ser(icios &mpresariales. .ambi/n se ha descrito c%mo confi$urar la
aplicaci%n cliente basada en 0eb de AS".1&. 2ue llama a los componentes
re(isados. &n resumen8
9 @tilice aplicaciones de Ser(icios &mpresariales acti(adas por un ser(idor para
me4orar la se$uridad. 3os saltos de procesos adicionales permiten aumentar el
ni(el de se$uridad.
9 @tilice cuentas locales con pri(ile$ios m'nimos para e4ecutar las aplicaciones
de ser(idor.
9 @tilice el ni(el de autenticaci%n de pri(acidad de pa2uetes *2ue debe
confi$urarse tanto en el ser(idor como en el cliente, cuando sea necesario
prote$er los datos 2ue se transfieren entre los componentes re(isados de una
red de una aplicaci%n cliente.
9 Cabilite las comprobaciones de acceso para el ni(el de componentes para
disfrutar de una implementaci%n efica) de la se$uridad basada en funciones.
9 @tilice la autenticaci%n de 0indo<s y habilite la suplantaci%n en las
aplicaciones 0eb de AS".1&. antes de llamar a un componente de una
aplicaci%n de Ser(icios &mpresariales 2ue funcione con la se$uridad basada
en funciones.
9 @tilice las clases se$uras de las puertas de enlace como puntos de entrada a
las aplicaciones de Ser(icios &mpresariales.
Al reducir el n=mero de clases de puertas de enlace 2ue proporcionan puntos
de entrada para los clientes de las aplicaciones de Ser(icios &mpresariales se
reduce tambi/n el n=mero de clases 2ue precisan tener funciones asi$nadas.
Deben habilitarse las comprobaciones basadas en funciones para otras clases
de ayuda auxiliares internas, pero no deben asi$n#rseles funciones. &s decir,
los clientes externos no podr#n llamarlas directamente, mientras 2ue las
clases de puerta de enlace de la propia aplicaci%n disfrutar#n de acceso
directo.
9 3lame a IsSecurityEna!led 4usto antes de comprobar la pertenencia a
funciones mediante pro$ramaci%n.
9 &(ite la suplantaci%n en el ni(el medio ya 2ue su uso impide la a$rupaci%n
efecti(a de conexiones a bases de datos y reduce considerablemente la
escalabilidad de la aplicaci%n.
9 A$re$ue $rupos de 0indo<s a las funciones de Ser(icios &mpresariales
*COM+, para aumentar la flexibilidad y facilitar la administraci%n.

S-ar putea să vă placă și