Está en la página 1de 52

Crear aplicaciones

ASP.NET seguras
Autenticacin, autorizacin y
comunicacin segura
Captulo 8: Seguridad de
ASP.NET
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
&ste cap'tulo se presenta a modo de $u'a e incluye recomendaciones (ue le
ayudar#n a crear aplicaciones )eb AS".*&+ se$uras. Muchos de los conse,os y las
recomendaciones de este cap'tulo tambi-n pueden resultar .tiles para desarrollar
ser/icios )eb AS".*&+ y ob,etos .*&+ 0emotin$ alo,ados en AS".*&+.
Contenido
Ar(uitectura de se$uridad de AS".*&+
Autenticaci%n y autori1aci%n
Confi$urar la se$uridad
"ro$ramar la se$uridad
Autenticaci%n de )indo2s
Autenticaci%n mediante 3ormularios
Autenticaci%n de "assport
Autenticaci%n personali1ada
4dentidad del proceso para AS".*&+
Suplantaci%n
Obtener acceso a recursos de sistema
Obtener acceso a recursos de red
Comunicaci%n se$ura
Almacenar secretos
"rote$er los estados de sesi%n y /ista
Consideraciones acerca de las bater'as de ser/idores )eb
0esumen
Arquitectura de seguridad de ASP.NET
AS".*&+ act.a en combinaci%n con 44S, .*&+ 3rame2ork y los ser/icios de
se$uridad subyacentes proporcionados por el sistema operati/o para ofrecer una
serie de mecanismos de autenticaci%n y autori1aci%n. Dichos mecanismos se refle,an
en la ilustraci%n 5.6.
!nsert "gure: C#$8 % ASP.NET Security Ser&ices.gi'(
4lustraci%n 5.6
Servicios de seguridad de ASP.NET
7a ilustraci%n 5.6 muestra los mecanismos de autenticaci%n y autori1aci%n (ue
ofrecen 44S y AS".*&+. Cuando un cliente en/'a una solicitud )eb, se produce la
si$uiente secuencia de e/entos de autenticaci%n y autori1aci%n8
6. Se recibe la solicitud )eb 9++":S; de la red. "uede utili1arse SS7 para
prote$er la identidad del ser/idor :mediante certificados de ser/idor; y, a modo
opcional, la identidad del cliente.
Nota: SS7 tambi-n proporciona un canal se$uro para prote$er los datos
importantes (ue se transfieren del cliente al ser/idor :y /ice/ersa;.
. 44S autentica al llamador mediante la autenticaci%n b#sica, impl'cita, inte$rada
:*+7M o <erberos; o mediante certificados. Si el sitio, parcial o totalmente, no
re(uiere acceso autenticado, 44S puede confi$urarse para la autenticaci%n
an%nima. 44S crea un testi$o de acceso a )indo2s para cada uno de los
usuarios autenticados. Si selecciona la autenticaci%n an%nima, 44S crear# un
testi$o de acceso para la cuenta de usuario an%nima de 4nternet :(ue, de
manera predeterminada, es 4=S0>MAC94*&;.
?. 44S autori1a al llamador para (ue obten$a acceso al recurso solicitado. "ara
autori1ar el acceso se utili1an los permisos *+3S definidos por las listas AC7
ad,untas al recurso solicitado. 44S tambi-n puede confi$urarse para (ue acepte
solicitudes .nicamente de los e(uipos cliente con unas direcciones 4"
espec'ficas.
@. 44S transfiere el testi$o de acceso a )indo2s del llamador autenticado a
AS".*&+ :(ue puede ser el testi$o de acceso del usuario de 4nternet an%nimo
si se utili1a la autenticaci%n an%nima;.
A. AS".*&+ autentica al llamador.
Si se confi$ura AS".*&+ para la autenticaci%n de )indo2s, no se efectuar#
nin$.n otro tipo de autenticaci%n adicional en esta fase. AS".*&+ aceptar#
cual(uier testi$o (ue reciba de 44S.
Si se confi$ura AS".*&+ para la autenticaci%n mediante 3ormularios, las
credenciales (ue proporcione el llamador :mediante un formulario 9+M7; se
autenticar#n con un almac-n de datos (ue suele ser una base de datos de
MicrosoftB SC7 Ser/erD o un ser/icio de directorio Acti/e DirectoryB. Si
AS".*&+ se confi$ura para la autenticaci%n de "assport, el usuario ser#
rediri$ido a un sitio "assport y ser# el ser/icio de autenticaci%n de "assport el
(ue se encar$ar# de autenticar al usuario.
E. AS".*&+ autori1a el acceso al recurso o la operaci%n solicitados.
UrlAuthorizationModule :un m%dulo 9++" proporcionado por el sistema;
utili1a unas re$las de autori1aci%n confi$uradas en el archi/o )eb.confi$ :en
especial, en el elemento FauthorizationG; para $aranti1ar (ue el llamador
pueda obtener acceso al archi/o o la carpeta solicitados.
&n el caso de la autenticaci%n de )indo2s, FileAuthorizationModule :otro
m%dulo 9++"; comprueba (ue el llamador dispon$a de los permisos
necesarios para obtener acceso al recurso solicitado. &l testi$o de acceso del
llamador se compara con la AC7 de protecci%n del recurso.
7as funciones .*&+ tambi-n pueden utili1arse :mediante declaraciones o
pro$ramaci%n; para $aranti1ar (ue el llamador reciba autori1aci%n para
obtener acceso al recurso solicitado o para lle/ar a cabo la operaci%n
solicitada.
H. &l c%di$o de la aplicaci%n obtiene acceso a los recursos locales o remotos
mediante una determinada identidad. De forma predeterminada, AS".*&+ no
lle/a a cabo nin$una suplantaci%n, moti/o por el (ue es la cuenta de proceso
AS".*&+ confi$urada la (ue proporciona dicha identidad. Otras opciones
alternati/as incluyen la identidad del llamador ori$inal :si se habilita la
suplantaci%n; o una identidad de ser/icio confi$urada.

Equios selectores
7os puntos de autori1aci%n :o e(uipos selectores; de una aplicaci%n )eb AS".*&+
los proporcionan 44S y AS".*&+.
!!S
Con la autenticaci%n an%nima desacti/ada, 44S s%lo admite solicitudes de usuarios
(ue puede autenticar en su propio dominio o bien en un dominio de confian1a.
&n el caso de los tipos de archi/os est#ticos :como los archi/os .,p$, .$if y .htm,
archi/os (ue no est#n asi$nados a nin$una extensi%n 4SA"4;, 44S utili1a permisos
*+3S asociados al archi/o solicitado para lle/ar a cabo el control de acceso.
ASP.NET
7os e(uipos selectores de AS".*&+ incluyen los m%dulos UrlAuthorizationModule,
FileAuthorizationModule y peticiones de permisos "rincipal adem#s de
comprobaciones de funciones.
UrlAuthorizationModule
"uede confi$urar elementos FauthorizationG del archi/o )eb.confi$ de la aplicaci%n
para controlar los usuarios y $rupos de usuarios (ue deber'an tener acceso a la
aplicaci%n. 7a autori1aci%n se basa en el ob,eto !Princial almacenado en
"ttConte#t.User.
FileAuthorizationModule
&n cuanto a los tipos de archi/os (ue 44S asi$na a la extensi%n 4SA"4 de AS".*&+
:Aspnet>isapi.dll;, se reali1an comprobaciones de acceso autom#ticas mediante el
testi$o de )indo2s del usuario autenticado :(ue puede ser 4=S0>MAC94*&; y con
la AC7 ad,unta al archi/o AS".*&+ solicitado.
Nota: no es necesaria la suplantaci%n para (ue funcione la autori1aci%n de
archi/os.
7a clase FileAuthorizationModule s%lo reali1a comprobaciones de acceso para el
archi/o solicitado, no para los archi/os a los (ue el c%di$o obtiene acceso en la
p#$ina solicitada, a pesar de (ue se trate de accesos (ue comprueba 44S.
"or e,emplo, si solicita el archi/o Default.aspx y -ste contiene un control de usuario
incrustado :=sercontrol.ascx;, (ue a su /e1 incluye un marcador de ima$en :(ue
diri$e a 4ma$e.$if;, FileAuthorizationModule lle/ar# a cabo la comprobaci%n de
acceso para Default.aspx y =sercontrol.ascx, por(ue 44S asi$na estos tipos de
archi/o a la extensi%n 4SA"4 de AS".*&+.
FileAuthorizationModule no reali1a nin$una comprobaci%n para 4ma$e.$if por(ue
se trata de un archi/o est#tico (ue 44S controla internamente. *o obstante, dado (ue
44S comprueba el acceso para los archi/os est#ticos, el usuario autenticado tambi-n
necesita permisos de lectura para el archi/o y una AC7 confi$urada correctamente.
7a ilustraci%n 5. refle,a este escenario.
Nota ara administradores de sistemas: es preciso (ue el usuario autenticado
dispon$a de permisos de lectura *+3S para todos los archi/os (ue inter/ienen en
este escenario. 7a .nica /ariable hace referencia al e(uipo selector (ue se utili1ar#
para aplicar el control de acceso. 7a cuenta del proceso AS".*&+ s%lo necesita
acceso de lectura para los tipos de archi/o AS".*&+ re$istrados.
!nsert "gure: C#$8 ) ASP.NET and !!S *ate+eepers.gi'(
4lustraci%n 5.
Interaccin entre los equipos selectores de IIS y ASP.NET
&ste escenario permite impedir el acceso en la puerta de archi/os. Si confi$ura la
lista AC7 ad,unta a Default.aspx y denie$a el acceso a un determinado usuario, el
c%di$o de Default.aspx no podr# en/iar al cliente el control de usuario ni las
im#$enes incrustadas. Si el usuario solicita las im#$enes directamente, 44S reali1ar#
las comprobaciones de acceso -l mismo.
Peticiones de ermisos Princial $ comro%aciones de &unciones
e#l'citas
Adem#s de los e(uipos selectores confi$urables de 44S y AS".*&+, tambi-n puede
utili1ar las peticiones de permisos "rincipal :mediante declaraciones o pro$ramaci%n;
como mecanismo adicional de control de acceso de mayor precisi%n. 7as
comprobaciones de permisos "rincipal :(ue e,ecuta la clase
PrincialPermissionAttri%ute; permiten controlar el acceso a las clases, m-todos o
blo(ues de c%di$o indi/iduales en funci%n de la identidad y la pertenencia a $rupos
de los usuarios indi/iduales, se$.n se hayan definido en el ob,eto !Princial ad,unto
al subproceso en curso.
Nota: las peticiones de permisos "rincipal utili1adas para comprobar la
pertenencia a funciones son distintas de las llamadas !Princial.!s!nRole para la
comprobaci%n de la pertenencia a funcionesI las primeras dan lu$ar a una
excepci%n si el llamador no es miembro de la funci%n especificada, mientras (ue
las .ltimas se limitan a de/ol/er un /alor booleano para confirmar la pertenencia a
las funciones.
Con la autenticaci%n de )indo2s, AS".*&+ ad,unta de forma autom#tica un ob,eto
(indo)sPrincial (ue representa al usuario autenticado en la solicitud )eb actual
:mediante "ttConte#t.User;. 7a autenticaci%n mediante 3ormularios y de "assport
crea un ob,eto *enericPrincial con la identidad adecuada, pero sin funciones, y lo
ad,unta a "ttConte#t.User.
M+s in&ormaci,n
J Si desea obtener m#s informaci%n acerca de c%mo confi$urar la se$uridad,
consulte KConfi$urar la se$uridadK en este mismo cap'tulo.
J Si desea obtener m#s informaci%n acerca de c%mo pro$ramar la se$uridad :y
los ob,etos !Princial;, consulte K"ro$ramar la se$uridadK en este mismo
cap'tulo.

Estrategias de autenticaci,n $ autorizaci,n
AS".*&+ proporciona una serie de mecanismos de autori1aci%n mediante
declaraciones y pro$ramaci%n (ue pueden utili1arse ,unto con una $ran /ariedad de
es(uemas de autenticaci%n. De este modo puede desarrollar una estrate$ia de
autori1aci%n exhausti/a y otra (ue pueda confi$urarse para ofrecer diferentes $rados
de $ranularidad8 por e,emplo, por usuario o por $rupo :basado en funciones;.
&sta secci%n describe las opciones de autori1aci%n :tanto confi$urables como
pro$ram#ticas; disponibles para una serie de opciones de autenticaci%n (ue se
utili1an habitualmente.
A continuaci%n se resumen las opciones de autenticaci%n8
J Autenticaci%n de )indo2s con suplantaci%n
J Autenticaci%n de )indo2s sin suplantaci%n
J Autenticaci%n de )indo2s con identidad fi,a
J Autenticaci%n mediante 3ormularios
J Autenticaci%n de "assport

-ciones de autorizaci,n disoni%les
7a si$uiente tabla refle,a el con,unto de opciones de autori1aci%n disponibles. Se
indica para cada opci%n si son necesarias la autenticaci%n de )indo2s o la
suplantaci%n. &n caso de no ser necesaria la autenticaci%n de )indo2s, se indica la
opci%n de autori1aci%n espec'fica disponible para el resto de los tipos de
autenticaci%n. &sta tabla le permitir# a,ustar el funcionamiento de su estrate$ia de
autenticaci%nLautori1aci%n.
+abla 5.68 autenticacin de Windows y requisitos de suplantacin
Opci%n de autori1aci%n 0e(uiere autenticaci%n
de )indo2s
0e(uiere suplantaci%n
3ileAuthori1ationModule S' *o
=rlAuthori1ationModule *o *o
"eticiones de permisos
"rincipal
*o *o
3unciones .*&+ *o *o
3unciones de Ser/icios
&mpresariales
S' S' :en la aplicaci%n )eb
AS".*&+;
"ermisos *+3S :para tipos
de archi/os est#ticos
solicitados directamenteI
no asi$nados a
extensiones 4SA"4;
*LD8 estos archi/os no los
controla AS".*&+.
Si se utili1a cual(uier
mecanismo de
autenticaci%n 44S :distinto
del an%nimo;, los permisos
deber'an confi$urarse para
usuarios autenticados
indi/idualmente.
*o :44S reali1a la
comprobaci%n de acceso.;
Si se utili1a la autenticaci%n
an%nima, deber'an
confi$urarse los permisos
de 4=S0>MAC94*&.
"ermisos *+3S :para
archi/os a los (ue obtiene
acceso el c%di$o de la
aplicaci%n )eb;
*o *o
Si se e,ecuta la
suplantaci%n, confi$ure las
listas AC7 se$.n la
identidad de )indo2s
suplantada, (ue puede ser
el llamador ori$inal o la
identidad especificada en el
elemento Fidentit$G de
)eb.confi$M.
M 7a identidad suplantada puede corresponder al llamador ori$inal o la identidad
especificada en el elemento Fidentit$G de )eb.confi$. Obser/e los dos si$uientes
elementos Fidentit$G.
<identity impersonate="true" />
<identity impersonate="true" userName="Bob" password="pwd" />
7a primera confi$uraci%n se traduce en la suplantaci%n del llamador ori$inal :se$.n lo
haya autenticado 44S;, mientras (ue la se$unda da lu$ar a la identidad Nob. 7a
se$unda confi$uraci%n no es recomendable por dos moti/os8
J &xi$e conceder a la identidad del proceso AS".*&+ el pri/ile$io OActuar como
parte del sistema operati/oP del sistema operati/o Microsoft )indo2sB !!!.
J +ambi-n re(uiere incluir una contraseQa de texto sin cifrar en el archi/o
)eb.confi$.

Ambas restricciones se eliminar#n en la si$uiente /ersi%n de .*&+ 3rame2ork.
Autenticaci,n de (indo)s con sulantaci,n
7os si$uientes elementos de confi$uraci%n muestran c%mo habilitar la autenticaci%n
de )indo2s :44S; y la suplantaci%n mediante declaraciones en los archi/os
)eb.confi$ o Machine.confi$.
Nota: es recomendable confi$urar la autenticaci%n en funci%n de cada aplicaci%n
en el archi/o )eb.confi$ de las aplicaciones.
<authentication mode="Windows" />
<identity impersonate="true" />
Con esta confi$uraci%n, el c%di$o de la aplicaci%n AS".*&+ suplanta al llamador
autenticado por 44S.
Seguridad con&igura%le
&l empleo de la autenticaci%n de )indo2s ,unto con la funcionalidad de suplantaci%n
ofrece las si$uientes opciones de autori1aci%n8
J .istas AC. de (indo)s
J Recursos solicitados or los clientes. FileAuthorizationModule de
AS".*&+ reali1a comprobaciones de acceso para los tipos de archi/o
solicitados (ue se hayan asi$nado a la 4SA"4 de AS".*&+. A fin de reali1ar
dichas comprobaciones de acceso se utili1a el testi$o de acceso del
llamador ori$inal y la lista AC7 ad,untos a los recursos solicitados.
&n el caso de los tipos de archi/o est#ticos :no asi$nados a nin$una
extensi%n 4SA"4;, 44S reali1a comprobaciones de acceso mediante el
testi$o de acceso del llamador y la lista AC7 ad,unta al archi/o.
J Recursos a los que o%tiene acceso la alicaci,n. "ueden confi$urarse
las listas AC7 de )indo2s de los recursos a los (ue obten$a acceso la
aplicaci%n :archi/os, carpetas, cla/es de re$istro, ob,etos de Acti/e
Directory, etc.; en funci%n del llamador ori$inal.

J Autorizaci,n mediante direcciones UR.. 7a autori1aci%n mediante
direcciones =07 se confi$ura en el archi/o )eb.confi$. Con la autenticaci%n
de )indo2s, los nombres de usuario adoptan la forma
Domain*ameR=ser*ame :*ombreDominioR*ombre=suario; y las funciones se
asi$nan una a una a los $rupos de )indo2s.
<authorization>
<deny user="DomainName\UserName" />
<allow roles="DomainName\WindowsGroup" />
</authorization>
J Funciones de Ser/icios Emresariales 0C-M12. 7as funciones se
almacenan en el cat#lo$o COMS. "uede confi$urar estas funciones con ayuda
de la herramienta de administraci%n o la secuencia de comandos de Ser/icios
de componentes.

Seguridad mediante rogramaci,n
7a se$uridad mediante pro$ramaci%n hace referencia a las comprobaciones de
se$uridad ubicadas en el c%di$o de la aplicaci%n )eb. 7as si$uientes opciones de
se$uridad mediante pro$ramaci%n est#n disponibles cuando se utili1a la
autenticaci%n de )indo2s con la funci%n de suplantaci%n.
J Peticiones de ermisos PrincialPermission
J 4mperati/as :en las l'neas del c%di$o del m-todo;
PrincipalPermission permCheck = new PrincipalPermission(
null, @"DomainName\WindowsGroup");
permCheck.Demand();
J Declarati/as :atributos pre/ios a las interfaces, clases y m-todos;
[PrincipalPermission(SecurityAction.Demand,
Role=@"DomainName\WindowsGroup)]
J Comro%aciones de &unciones e#l'citas. "uede reali1ar la comprobaci%n
de funciones mediante la interfa1 !Princial.
IPrincipal.IsInRole(@"DomainName\WindowsGroup");
J Funciones de Ser/icios Emresariales 0C-M12. "uede reali1ar la
comprobaci%n de funciones mediante pro$ramaci%n con la clase Conte#tUtil.
ContextUtil.IsCallerInRole("Manager")

Escenarios de uso
=tilice la autenticaci%n de )indo2s y la suplantaci%n cuando se den las si$uientes
condiciones8
J 7os usuarios de la aplicaci%n tienen cuentas de )indo2s (ue puede autenticar
el ser/idor.
J &s necesario transferir el contexto de se$uridad del llamador ori$inal al ni/el
medio o al ni/el de datos de la aplicaci%n )eb para admitir la autori1aci%n de
$ranularidad fina :por usuario;.
J Se re(uiere transferir el contexto de se$uridad del llamador ori$inal a los
ni/eles indirectos a fin de admitir la auditor'a de ni/el del sistema operati/o.
Antes de utili1ar la suplantaci%n con la aplicaci%n, ase$.rese de (ue comprende las
repercusiones de este enfo(ue en relaci%n con el empleo del modelo de subsistema
de confian1a. Se ha lle/ado a cabo un compendio de dichas repercusiones, (ue se
presentan en la secci%n KSeleccionar un modelo de acceso a los recursosK en el
cap'tulo ?, KAutenticaci%n y autori1aci%n.K
&ntre las des/enta,as de la suplantaci%n fi$uran8
J &scalabilidad reducida de la aplicaci%n debido a la imposibilidad de a$rupar
efecti/amente conexiones de bases de datos.
J Mayor esfuer1o de administraci%n por(ue las listas AC7 de los recursos
ser/idor deben confi$urarse para cada uno de los usuarios.
J 7a dele$aci%n exi$e la autenticaci%n <erberos y un entorno confi$urado
correctamente.

M+s in&ormaci,n
J Si desea obtener m#s informaci%n acerca de la autenticaci%n de )indo2s,
consulte la secci%n KAutenticaci%n de )indo2sK en este mismo cap'tulo.
J Si desea obtener m#s informaci%n acerca de la suplantaci%n, consulte el
apartado KSuplantaci%nK (ue fi$ura m#s adelante en este cap'tulo.
J Si desea obtener m#s informaci%n acerca de la autori1aci%n mediante
direcciones =07, consulte K*otas acerca de la autori1aci%n mediante
direcciones =07K en este mismo cap'tulo.
J Si desea obtener m#s informaci%n acerca de las funciones de Ser/icios
&mpresariales :COMS;, consulte el cap'tulo T, KSe$uridad de la aplicaci%n de
Ser/icios &mpresarialesK.
J Si desea obtener m#s informaci%n acerca de las peticiones
PrincialPermission, consulte el apartado K4dentidades y principalesK del
cap'tulo , KModelo de se$uridad para aplicaciones AS".*&+K.

Autenticaci,n de (indo)s sin sulantaci,n
7os si$uientes elementos de confi$uraci%n muestran c%mo habilitar la autenticaci%n
de )indo2s :44S; sin suplantaci%n de forma declarati/a en el archi/o )eb.confi$.
<authentication mode="Windows" />
<!-- The following setting is equivalent to having no identity element -->
<identity impersonate="false" />
Seguridad con&igura%le
&l empleo de la autenticaci%n de )indo2s sin la suplantaci%n ofrece las si$uientes
opciones de autori1aci%n8
J .istas AC. de (indo)s
J Recursos solicitados or los clientes. FileAuthorizationModule de
AS".*&+ reali1a comprobaciones de acceso para los tipos de archi/o
solicitados (ue se hayan asi$nado a la 4SA"4 de AS".*&+. A fin de reali1ar
dichas comprobaciones de acceso se utili1a el testi$o de acceso del
llamador ori$inal y la lista AC7 ad,untos a los recursos solicitados. *o se
re(uiere la suplantaci%n.
&n el caso de los tipos de archi/o est#ticos :no asi$nados a nin$una
extensi%n 4SA"4;, 44S reali1a comprobaciones de acceso mediante el
testi$o de acceso del llamador y la lista AC7 ad,untos al archi/o.
J Recursos a los que o%tiene acceso la alicaci,n. "uede confi$urar las
listas AC7 de )indo2s de los recursos a los (ue ten$a acceso la
aplicaci%n :archi/os, carpetas, cla/es de re$istro, ob,etos de Acti/e
Directory, etc.; con la identidad del proceso AS".*&+.

J Autorizaci,n mediante direcciones UR.. 7a autori1aci%n mediante
direcciones =07 se confi$ura en el archi/o )eb.confi$. Con la autenticaci%n
de )indo2s, los nombres de usuario adoptan la forma
Domain*ameR=ser*ame y las funciones se asi$nan una a una a los $rupos de
)indo2s.
<authorization>
<deny user="DomainName\UserName" />
<allow roles="DomainName\WindowsGroup" />
</authorization>

Seguridad mediante rogramaci,n
+iene a su disposici%n las si$uientes opciones de se$uridad mediante pro$ramaci%n8
J Peticiones de ermisos Princial
J 4mperati/as
PrincipalPermission permCheck = new PrincipalPermission(
null, @"DomainName\WindowsGroup");
permCheck.Demand();
J Declarati/as
[PrincipalPermission(SecurityAction.Demand,
Role=@"DomainName\WindowsGroup")]
J Comro%aciones de &unciones e#l'citas. "uede reali1ar la comprobaci%n
de funciones mediante la interfa1 !Princial.
IPrincipal.IsInRole(@"DomainName\WindowsGroup");

Escenarios de uso
=tilice la autenticaci%n de )indo2s sin suplantaci%n cuando se den las si$uientes
condiciones8
J 7os usuarios de la aplicaci%n tienen cuentas de )indo2s (ue puede autenticar
el ser/idor.
J Desea utili1ar una identidad fi,a para obtener acceso a los recursos indirectos
:bases de datos por e,emplo; a fin de admitir la a$rupaci%n de conexiones.

M+s in&ormaci,n
J Si desea obtener m#s informaci%n acerca de la autenticaci%n de )indo2s,
consulte la secci%n KAutenticaci%n de )indo2sK en este mismo cap'tulo.
J Si desea obtener m#s informaci%n acerca de la autori1aci%n mediante
direcciones =07, consulte O*otas acerca de la autori1aci%n mediante
direcciones =07K (ue encontrar# m#s adelante en este mismo cap'tulo.
J Si desea obtener m#s informaci%n acerca de las peticiones
PrincialPermission, consulte el apartado K"rincipalsK de la secci%n
O4ntroducci%nK de esta $u'a.

Autenticaci,n de (indo)s con identidad &i3a
&l elemento Fidentit$G del archi/o )eb.confi$ es compatible con los atributos
opcionales de nombre de usuario y contraseQa, lo cual permite confi$urar una
identidad fi,a espec'fica para (ue la aplicaci%n la suplante. &l si$uiente fra$mento del
archi/o de confi$uraci%n es una muestra de este enfo(ue.
<identity impersonate="true" userName="DomainName\UserName"
password="ClearTextPassword" />
Escenarios de uso
&ste enfo(ue no es recomendable para la /ersi%n actual :/ersi%n 6; de .*&+
3rame2ork en entornos se$uros por dos moti/os8
J 7os nombres de usuario y las contraseQas no deber'an almacenarse en
formato de texto sin cifrar en los archi/os de confi$uraci%n, en especial en los
archi/os de confi$uraci%n (ue se almacenan en los directorios /irtuales.
J &n )indo2s !!!, este enfo(ue obli$a a conceder a la cuenta de proceso
AS".*&+ el pri/ile$io OActuar como parte del sistema operati/oP. &sta
concesi%n reduce la se$uridad de la aplicaci%n )eb y aumenta el ries$o de la
amena1a en caso de (ue un intruso pudiera lle$ar a exponer el proceso de la
aplicaci%n )eb.
.*&+ 3rame2ork /ersi%n 6.6 incluir# una me,ora para este escenario en )indo2s
!!!8
J Se cifrar#n las credenciales.
J &l inicio de sesi%n lo lle/ar# a cabo el proceso 44S, de manera (ue AS".*&+ no
re(uiera el pri/ile$io OActuar como parte del sistema operati/oP.

Autenticaci,n mediante Formularios
7os si$uientes elementos de confi$uraci%n muestran c%mo habilitar la autenticaci%n
mediante 3ormularios mediante declaraciones en el archi/o )eb.confi$.
<authentication mode="Forms" >
<forms loginUrl="logon.aspx" name="AuthCookie" timeout="60" path="/">
</forms>
</authentication>
Seguridad con&igura%le
&l empleo de la autenticaci%n mediante 3ormularios pone a su disposici%n las
si$uientes opciones de autori1aci%n8
J 7istas AC7 de )indo2s
J Recursos solicitados or los clientes. 7os recursos solicitados exi$en
(ue las listas AC7 permitan el acceso de lectura a la cuenta an%nima de
usuario de 4nternet. :44S deber'a confi$urarse para permitir el acceso
an%nimo cuando se utili1a la autenticaci%n mediante 3ormularios.;
7a autori1aci%n de archi/os de AS".*&+ no est# disponible por(ue
re(uiere la autenticaci%n de )indo2s.
J Recursos a los que o%tiene acceso la alicaci,n. "ueden confi$urarse
las listas AC7 de )indo2s de los recursos a los (ue obten$a acceso la
aplicaci%n :archi/os, carpetas, cla/es de re$istro, ob,etos de Acti/e
Directory, etc.; con la identidad del proceso AS".*&+.

J Autorizaci,n mediante direcciones UR.
Confi$ure la autori1aci%n mediante direcciones =07 en el archi/o )eb.confi$.
Al utili1ar la autenticaci%n mediante 3ormularios, el formato de los nombres de
usuario /iene determinado por el almac-n de datos personali1ado8 una base
de datos de SC7 Ser/er o Acti/e Directory.
J Si utili1a un almac-n de datos de SC7 Ser/er8
<authorization>
<deny users="?" />
<allow users="Mary,Bob,Joe" roles="Manager,Sales" />
</authorization>
J Si utili1a Acti/e Directory como almac-n de datos, los nombres de usuario
y de los $rupos adoptar#n el formato U.A!!8
<authorization>
<deny users="someAccount@domain.corp.yourCompany.com" />
<allow roles ="CN=Smith James,CN=FTE_northamerica,CN=Users,
DC=domain,DC=corp,DC=yourCompany,DC=com" />
</authorization>

Seguridad mediante rogramaci,n
+iene a su disposici%n las si$uientes opciones de se$uridad mediante pro$ramaci%n8
J Peticiones de ermisos Princial
J 4mperati/as
PrincipalPermission permCheck = new PrincipalPermission(
null, "Manager");
permCheck.Demand();
J Declarati/as
[PrincipalPermission(SecurityAction.Demand,
Role="Manager")]
J Comro%aciones de &unciones e#l'citas. "uede reali1ar la comprobaci%n
de funciones mediante la interfa1 !Princial.
IPrincipal.IsInRole("Manager");

Escenarios de uso
7a autenticaci%n mediante 3ormularios resulta espec'ficamente id%nea para las
aplicaciones de 4nternet. =tilice la autenticaci%n mediante 3ormularios si8
J 7os usuarios de la aplicaci%n no tienen cuentas de )indo2s.
J Desea (ue los usuarios inicien sesi%n en la aplicaci%n escribiendo las
credenciales en un formulario 9+M7.

M+s in&ormaci,n
J Si desea obtener m#s informaci%n acerca de la autenticaci%n mediante
3ormularios, consulte la secci%n KAutenticaci%n mediante 3ormulariosK (ue
fi$ura m#s adelante en este mismo cap'tulo.
J Si desea obtener m#s informaci%n acerca de la autori1aci%n mediante
direcciones =07, consulte K*otas acerca de la autori1aci%n mediante
direcciones =07K en este mismo cap'tulo.

Autenticaci,n de Passort
7os si$uientes elementos de confi$uraci%n muestran c%mo habilitar la autenticaci%n
de "assport de forma declarati/a en el archi/o )eb.confi$.
<authentication mode="Passport" />
Escenarios de uso
7a autenticaci%n de "assport se utili1a en 4nternet cuando los usuarios de la
aplicaci%n no tienen cuentas de )indo2s y se desea implementar una soluci%n de
inicio de sesi%n .nico. 7os usuarios (ue hayan iniciado una sesi%n pre/iamente con
una cuenta "assport en un sitio de "assport no tendr#n (ue /ol/er a iniciar sesi%n en
su sitio si -ste se ha confi$urado para la autenticaci%n de "assport.
Con&igurar la seguridad
&n esta secci%n se presentan los pasos (ue deben reali1arse para confi$urar la
se$uridad de una aplicaci%n )eb de AS".*&+. 7a ilustraci%n 5.? resume estos
pasos.
!nsert "gure: C#$8 ) Con"guring ASP.NET Security.gi'(
4lustraci%n 5.?
Confgurar la seguridad de una aplicacin ASP.NET
Con&igurar los ar+metros de !!S
"ara confi$urar la se$uridad de 44S debe se$uir los si$uientes pasos8
6. Si lo desea, puede instalar un certificado de ser/idor )eb :si necesita SS7;.
Si desea obtener m#s informaci%n, consulte KC%mo confi$urar SS7 en un
ser/idor )ebK en la secci%n de referencia de este manual.
. Confi$ure la autenticaci%n de 44S
?. Si lo desea, confi$ure la asi$naci%n de certificados de cliente :si utili1a la
autenticaci%n mediante certificados;.
Si desea obtener m#s informaci%n acerca de la asi$naci%n de certificados de
cliente, consulte el art'culo C?6?!H!, O9o2 to Confi$ure Client Certificate
Mappin$s in 4nternet 4nformation Ser/ices :44S; A.!K :en in$l-s; (ue encontrar#
en la base de conocimiento Microsoft <no2led$e Nase.
@. Confi$ure los permisos *+3S para archi/os y carpetas. &ntre dichos recursos,
44S y FileAuthorizationModule de AS".*&+ comprueban (ue el usuario
autenticado :o la cuenta an%nima de usuario de 4nternet; dispon$a de los
derechos de acceso necesarios :se$.n la confi$uraci%n AC7; para obtener
acceso al archi/o solicitado.

Con&igurar los ar+metros de ASP.NET
7os par#metros de confi$uraci%n del ni/el de aplicaci%n se almacenan en los
archi/os )eb.confi$, ubicados en el directorio ra'1 /irtual de la aplicaci%n y, en
ocasiones, tambi-n en subcarpetas adicionales :esta confi$uraci%n puede suplantar
al$unas /eces la confi$uraci%n de la carpeta principal;.
6. Con&igurar la autenticaci,n. Deber'a confi$urarse en todos y cada uno de los
archi/os )eb.confi$ de las aplicaciones (ue se encuentran en el directorio ra'1
/irtual de la aplicaci%n :no en el archi/o Machine.confi$;.
<authentication mode="Windows|Forms|Passport|None" />
. Con&igurar la sulantaci,n. De manera predeterminada, las aplicaciones
AS".*&+ no aplican la suplantaci%n. 7as aplicaciones se e,ecutan mediante la
identidad del proceso confi$urada de AS".*&+ :(ue suele ser AS"*&+;,
utili1ada para obtener acceso a los recursos. 7a suplantaci%n s%lo resulta
necesaria en situaciones como las si$uientes8
J Cuando se utili1a Ser/icios &mpresariales y se desea utili1ar funciones de
Ser/icios &mpresariales :COMS; para autori1ar el acceso a las funciones
(ue ofrecen los componentes re/isados.
J 44S est# confi$urado para la autenticaci%n an%nima y se desea utili1ar la
cuenta an%nima de usuario de 4nternet para obtener acceso a los recursos.
Si desea obtener m#s informaci%n acerca de este enfo(ue, consulte el
apartado KObtener acceso a recursos de redK (ue fi$ura m#s adelante en
este cap'tulo.
J &s necesario transmitir el contexto de se$uridad del usuario autenticado al
si$uiente ni/el :la base de datos, por e,emplo;.
J 9a expuesto una aplicaci%n AS" cl#sica en AS".*&+ y desea el mismo
comportamiento de suplantaci%n. 7as aplicaciones AS" cl#sicas suplantan
al llamador de forma predeterminada.

"ara confi$urar la suplantaci%n de AS".*&+, utilice el si$uiente elemento
Fidentit$G del archi/o )eb.confi$ de la aplicaci%n.
<identity impersonate="true" />
?. Con&igurar la autorizaci,n. 7a autori1aci%n mediante direcciones =07
determina si un usuario o funci%n pueden emitir un /erbo 9++" :por e,emplo,
V&+, 9&AD y "OS+; para un archi/o espec'fico. "ara implementar la
autori1aci%n mediante direcciones =07 es preciso (ue lle/e cabo las
si$uientes tareas.
a. A$re$ue un elemento FauthorizationG al archi/o )eb.confi$ ubicado en el
directorio ra'1 /irtual de la aplicaci%n.
b. 0estrin,a el acceso a los usuarios y las funciones mediante los atributos
allo) y den$. &l si$uiente e,emplo del archi/o )eb.confi$ utili1a la
autenticaci%n de )indo2s y permite (ue tanto Nob como Mary obten$an
acceso, pero se lo denie$a al resto de los usuarios.
<authorization>
<allow users="DomainName\Bob, DomainName\Mary" />
<deny users="*" />
</authorization>
!mortante: es preciso a$re$ar Fden$ usersWKXKLG o Fden$ usersWKMKLG
al final del elemento FauthorizationGI de lo contrario, se conceder# el
acceso a todas las identidades autenticadas.
Notas acerca de la autorizaci,n mediante direcciones UR.
+en$a en cuenta los si$uientes aspectos cuando confi$ure la autori1aci%n mediante
direcciones =078
J KMK hace referencia a todas las identidades.
J KXK hace referencia a las identidades no autenticadas :es decir, la identidad
an%nima;.
J *o es necesario aplicar la suplantaci%n para (ue funcione la autori1aci%n
mediante direcciones =07.
J 7a confi$uraci%n de la autori1aci%n en el archi/o )eb.confi$ suele hacer
referencia a todos los archi/os del directorio actual, as' como a todos los
subdirectorios :excepto (ue un subdirectorio conten$a su propio archi/o
)eb.confi$ con un elemento FauthorizationG;. &n este caso, la confi$uraci%n
del subdirectorio sustituye la del directorio principal;.
Nota: la autori1aci%n mediante direcciones =07 s%lo se aplica a los tipos de
archi/os a los (ue 44S asi$na la extensi%n 4SA"4 de AS".*&+, aspnet>isapi.dll.
"uede utili1ar la eti(ueta FlocationG para (ue la confi$uraci%n de la
autori1aci%n se apli(ue a un archi/o o directorio espec'ficos. &l si$uiente
e,emplo muestra c%mo aplicar la autori1aci%n a un archi/o espec'fico
:"a$e.aspx;.
<location path="page.aspx" />
<authorization>
<allow users="DomainName\Bob, DomainName\Mary" />
<deny users="*" />
</authorization>
</location>
J 7os usuarios y las funciones de la autori1aci%n mediante direcciones =07 se
determinan mediante la confi$uraci%n de la autenticaci%n8
J Cuando se establece el elemento en Fauthentication modeWP)indo2sP
LG, se autori1a el acceso para las cuentas de usuario y los $rupos de
)indo2s.
7os nombres de usuario adoptan la forma
KDomain*ameR)indo2s=ser*ameK
:O*ombreDominioR*ombre=suario)indo2sP;.
7os nombres de las funciones adoptan la forma
KDomain*ameR)indo2sVroup*ameK
:O*ombreDominioR*ombreVrupo)indo2sP;.
Nota: el $rupo de administradores local se denomina
KN=47+4*RAdministratorsK. &l $rupo de usuarios local se denomina
KN=47+4*R=sersK.
J Cuando el elemento Fauthentication modeWP3ormsP LG se establece en la
autenticaci%n mediante 3ormularios, se autori1an los usuarios y las
funciones para el ob,eto !Princial almacenado en el contexto 9++"
actual. "or e,emplo, si utili1a formularios para autenticar usuarios con una
base de datos, estar# concediendo la autori1aci%n se$.n las funciones
obtenidas de la base de datos.
J Cuando el elemento del modo de autenticaci%n se establece en "assport
:Fauthentication modeWP"assportP LG;, la autori1aci%n se efect.a con
relaci%n al identificador del usuario de "assport :"=4D; o las funciones
obtenidas de un almac-n. "or e,emplo, puede asi$nar un "=4D a una
cuenta y con,unto de funciones determinados almacenados en una base
de datos SC7 Ser/er o en Acti/e Directory.
Nota: esta funci%n se inte$rar# en el sistema operati/o Microsoft )indo2s
Ser/er !!?.
J Cuando se establece el modo de autenticaci%n en nin$uno
:Fauthentication modeWP*oneP LG;, no se reali1a nin$una autori1aci%n.
K*oneK indica (ue no se desea reali1ar nin$una autenticaci%n o (ue no se
desea utili1ar nin$uno de los m%dulos de autenticaci%n .*&+ sino un
mecanismo personali1ado propio.
*o obstante, si utili1a la autenticaci%n personali1ada, deber'a crear un
ob,eto !Princial con funciones y almacenarlo en "ttConte#t.User.
Cuando, posteriormente, lle/e a cabo la autori1aci%n mediante direcciones
=07, -sta se e,ecutar# con el usuario y las funciones :independientemente
de c%mo se obten$an; almacenadas en el ob,eto !Princial.

E3emlos de la autorizaci,n mediante direcciones UR.
7a si$uiente lista muestra la sintaxis de al$unos e,emplos habituales de la
autori1aci%n mediante direcciones =07.
J Dene$ar el acceso a la cuenta an%nima.
<deny users="?" />
J Dene$ar el acceso a todos los usuarios.
<deny users="*" />
J Dene$ar el acceso a la funci%n Mana$er.
<deny roles="Manager"/>
J &,emplo de la autenticaci%n mediante 3ormularios
<configuration>
<system.web>
<authentication mode="Forms" >
<forms name=".ASPXUSERDEMO"
loginUrl="login.aspx"
protection="All" timeout="60" />
</authentication>
<authorization>
<deny users="jdoe@somewhere.com" />
<deny users="?" />
</authorization>
</system.web>
</configuration>

M+s in&ormaci,n
&l elemento FauthorizationG funciona con el ob,eto !Princial actual almacenado en
"ttConte#t.User y "ttConte#t.Request.RequestT$e.
Proteger recursos
6. =tilice listas AC7 de )indo2s para prote$er recursos, incluidos archi/os,
carpetas y cla/es de re$istro.
Si no utili1a la suplantaci%n, cual(uier recurso al (ue necesite obtener acceso
la aplicaci%n deber# disponer de una lista AC7 (ue conceda, como m'nimo, el
acceso de lectura a la cuenta de proceso de AS".*&+.
Si utili1a la suplantaci%n, los archi/os y las cla/es de re$istro deben contar con
listas AC7 (ue concedan, como m'nimo, acceso de lectura al usuario
autenticado :o a la cuenta an%nima de usuario de 4nternet, en caso de ser
efecti/a la autenticaci%n an%nima;.
. "rote,a los archi/os )eb.confi$ y Machine.confi$8
J Utilice las listas AC. correctas. Si AS".*&+ utili1a la suplantaci%n, la
identidad suplantada re(uerir# acceso de lectura. De lo contrario, ser# la
identidad del proceso AS".*&+ la (ue re(uerir# el acceso de lectura.
&specifi(ue los si$uientes ni/eles de permisos AC7 en los archi/os
)eb.confi$ y Machine.confi$.
Sistema8 Control total
Administradores8 Control total
4dentidad de proceso o identidad suplantada8 lectura
Si no utili1a la suplantaci%n para la cuenta an%nima de usuario de 4nternet
:4=S0>MAC94*&;, deber'a dene$ar el acceso a esta cuenta.
Nota: si su aplicaci%n se asi$na a un recurso compartido =*C, la
identidad =*C re(uerir# el acceso de lectura tambi-n para los archi/os de
confi$uraci%n.
J &limine los m%dulos 9++" no deseados. Machine.confi$ contiene una
serie de m%dulos 9++" predeterminados :incluidos en el elemento
FhttModulesG;. &stos m%dulos son8
J )indo2sAuthenticationModule
J 3ormsAuthenticationModule
J "assportAuthenticationModule
J =rlAuthori1ationModule
J 3ileAuthori1ationModule
J OutputCacheModule
J SessionStateModule

Si su aplicaci%n no utili1a nin$.n m%dulo en especial, elim'nelo para e/itar
en el futuro cual(uier posible problema de se$uridad asociado con un
determinado m%dulo debido a su explotaci%n por la aplicaci%n.

?. Si lo desea, blo(uee la confi$uraci%n mediante el elemento FlocationG y el
atributo allo)-/erride45&alse5, tal como se describe m#s aba,o.

6loquear los ar+metros de con&iguraci,n
7os par#metros de confi$uraci%n son ,er#r(uicos. 7a confi$uraci%n del archi/o
)eb.confi$ de los subdirectorios sustituye la confi$uraci%n del archi/o )eb.confi$ de
los directorios principales. Adem#s, la confi$uraci%n de )eb.confi$ tambi-n sustituye
a la de Machine.confi$.
"uede blo(uear la confi$uraci%n para impedir (ue sea sustituida en ni/eles inferiores
mediante el elemento FlocationG y el atributo allo)-/erride. "or e,emplo8
<location path="somepath" allowOverride="false" />
. . . arbitrary configuration settings . . .
</location>
+en$a en cuenta (ue la ruta de acceso puede hacer referencia a un sitio )eb o un
directorio /irtual y (ue se aplica al directorio desi$nado y a todos los subdirectorios.
Si establece el atributo allo)-/erride en el /alor OfalseP, e/itar# (ue los archi/os de
confi$uraci%n de ni/eles inferiores reemplacen la confi$uraci%n especificada en el
elemento FlocationG. 7a capacidad de blo(uear la confi$uraci%n puede aplicarse a
todos los tipos de confi$uraci%n, no s%lo a la confi$uraci%n de se$uridad de los
modos de autenticaci%n.
!medir que se descarguen los archi/os
"uede utili1ar la clase "ttFor%idden"andler para e/itar (ue se descar$uen
al$unos tipos de archi/os a tra/-s del )eb. &sta clase la utili1a internamente
AS".*&+ para e/itar la descar$a de al$unos archi/os de sistema :como por e,emplo
los archi/os de confi$uraci%n, incluido el archi/o )eb.confi$;. Si desea obtener una
lista completa de los tipos de archi/os (ue presentan este tipo de restricciones,
consulte la secci%n Fhtt"andlersG del archi/o Machine.confi$.
Considere la posibilidad de utili1ar "ttFor%idden"andler para los archi/os (ue la
aplicaci%n utili1a internamente pero (ue no se han concebido para la descar$a.
Nota: tambi-n deber'a prote$er los archi/os mediante listas AC7 de )indo2s a fin
de poder controlar los usuarios (ue obtienen acceso a los archi/os cuando inician
una sesi%n en el ser/idor )eb.
Para utilizar "ttFor%idden"andler con el &in de e/itar la descarga de un
determinado tio de archi/o
6. Cree una asi$naci%n de aplicaci%n en 44S para el tipo de archi/o en cuesti%n y
as'$nela a Aspnet>isapi.dll.
a. &n la barra de tareas, ha$a clic en el bot%n !nicio, seleccione Programas,
"erramientas administrati/as y, finalmente, seleccione Ser/icios de
4nternet 4nformation Ser/er.
b. Seleccione el directorio /irtual de la aplicaci%n, ha$a clic con el bot%n
secundario del mouse :rat%n; y ha$a clic en Proiedades.
c. Seleccione Con&iguraci,n de la alicaci,n y ha$a clic en
Con&iguraci,n.
d. 9a$a clic en Agregar para crear una nue/a asi$naci%n de aplicaciones.
e. 9a$a clic en E#aminar y seleccione
c8R2inntRMicrosoft.*&+R3rame2orkR/6.!.?H!ARaspnet>isapi.dll.
f. &scriba la extensi%n de archi/o correspondiente al tipo de archi/o cuya
descar$a desee e/itar :por e,emplo, .abc; en el campo E#tensi,n.
$. Compruebe (ue est-n seleccionadas las opciones Todos los /er%os y
Motor de secuencias de comandos y (ue la opci%n Comro%ar que
e#iste el archi/o est- seleccionada.
h. 9a$a clic en Acetar para cerrar el cuadro de di#lo$o Agregar7Modi&icar
asignaci,n de e#tensi,n de alicaci,n.
i. 9a$a clic en Acetar para cerrar el cuadro de di#lo$o Con&iguraci,n de
la alicaci,n y, a continuaci%n, ha$a clic en Acetar para cerrar el cuadro
de di#lo$o Proiedades.

. A$re$ue una asi$naci%n F"tt"andlerG al archi/o )eb.confi$ para el tipo de
archi/o especificado.
A continuaci%n encontrar# un e,emplo para el tipo de archi/o .abc.
<httpHandlers>
<add verb="*" path="*.abc"
type="System.Web.HttpForbiddenHandler"/>
</httpHandlers>

Comunicaci,n segura
=tilice una combinaci%n de SS7 y la Se$uridad del protocolo de 4nternet :4"Sec; para
prote$er la se$uridad de los /'nculos de comunicaci%n.
M+s in&ormaci,n
J "ara obtener m#s informaci%n acerca de c%mo utili1ar SS7 para prote$er el
/'nculo con el ser/idor de bases de datos, consulte KC%mo utili1ar SS7 para
proporcionar comunicaciones se$uras con SC7 Ser/er !!!.K
J "ara obtener informaci%n acerca de c%mo utili1ar 4"Sec entre dos e(uipos,
consulte KC%mo utili1ar 4"Sec para $aranti1ar una comunicaci%n se$ura entre
dos ser/idores.K

Programar la seguridad
=na /e1 establecida la confi$uraci%n de se$uridad confi$urable de la aplicaci%n )eb,
deber# me,orar y a,ustar la directi/a de autori1aci%n de la aplicaci%n )eb mediante
pro$ramaci%n. &ste proceso incluye atributos .*&+ declarati/os de los ensamblados
y la e,ecuci%n de comprobaciones de autori1aci%n imperati/as del c%di$o.
&sta secci%n describe los pasos b#sicos de pro$ramaci%n necesarios para lle/ar a
cabo la autori1aci%n en una aplicaci%n )eb AS".*&+.
Un modelo de autorizaci,n
A continuaci%n se describe bre/emente el modelo b#sico para la autori1aci%n de
usuarios en la aplicaci%n )eb8
6. 0ecuperar credenciales
. Validar credenciales
?. 4ncluir usuarios en las funciones
@. Crear un ob,eto !Princial
A. 4ncluir el ob,eto !Princial en el contexto 9++" actual
E. &,ecutar la autori1aci%n en funci%n de la identidad del usuario o la pertenencia
a funciones

!mortante: los pasos 6 a A los e,ecuta autom#ticamente AS".*&+ si se ha
confi$urado la autenticaci%n de )indo2s. &n el caso de utili1ar otros mecanismos
de autenticaci%n :mediante 3ormularios, de "assport o personali1ado; es preciso
escribir el c%di$o pertinente para lle/ar a cabo estos pasos, tal como se describe a
continuaci%n.
Recuerar credenciales
Debe empe1arse por recuperar un con,unto de credenciales :nombre de usuario y
contraseQa; del usuario. Si la aplicaci%n no utili1a la autenticaci%n de )indo2s,
deber# comprobar (ue se $arantice correctamente la se$uridad de las credenciales
de texto no cifrado en la red a tra/-s de SS7.
8alidar credenciales
&n caso de haber confi$urado la autenticaci%n de )indo2s, las credenciales se
/alidar#n autom#ticamente mediante los ser/icios subyacentes.
Si utili1a un mecanismo de autenticaci%n distinto, deber# escribir el c%di$o pertinente
para /alidar las credenciales con un almac-n de datos tal como una base de datos
SC7 Ser/er o Acti/e Directory.
Si desea obtener m#s informaci%n acerca de c%mo almacenar de forma se$ura las
credenciales de usuario en una base de datos SC7 Ser/er, consulte KAutenticar
usuarios en una base de datosK en el cap'tulo 6, KSe$uridad del acceso a datosK.
!ncluir usuarios en las &unciones
&l almac-n de datos de usuario tambi-n deber'a incluir una lista de las funciones de
cada usuario. &s preciso escribir el c%di$o adecuado para recuperar la lista de
funciones del usuario /alidado.
Crear un o%3eto !Princial
7a autori1aci%n se reali1a con un usuario autenticado, cuya identidad y lista de
funciones se almacena en un ob,eto !Princial :(ue se transmite ,unto con el
contexto de la solicitud )eb actual;.
&n caso de haber confi$urado la autenticaci%n de )indo2s, AS".*&+ crear#
autom#ticamente un ob,eto (indo)sPrincial. Dicho ob,eto contiene la identidad
del usuario autenticado adem#s de una lista de funciones, (ue e(ui/ale a la lista de
$rupos de )indo2s a los (ue pertenece el usuario.
Si utili1a la autenticaci%n mediante 3ormularios, de "assport o un mecanismo
personali1ado, deber# escribir el c%di$o necesario en el controlador de e/entos
Alication9AuthenticateRequest de Vlobal.asax para crear un ob,eto !Princial.
.*&+ 3rame2ork proporciona la clase *enericPrincial, (ue deber'a utili1arse en la
mayor'a de los escenarios.
!ncluir el o%3eto !Princial en el conte#to "TTP actual
Ad,unte el ob,eto !Princial al contexto 9++" actual :mediante la /ariable
9ttpConte#t.User;. AS".*&+ lo hace autom#ticamente cuando se utili1a la
autenticaci%n de )indo2s. De lo contrario, deber# ad,untar el ob,eto de forma
manual.
E3ecutar la autorizaci,n en &unci,n de la identidad del usuario o la
ertenencia a &unciones
=tilice las funciones de .*&+ de forma declarati/a :para obtener la autori1aci%n de
clases o m-todos; o imperati/a en el c%di$o si la aplicaci%n re(uiere una l%$ica de
autori1aci%n de mayor $ranularidad.
"uede utili1ar las peticiones de permisos principales declarati/as o imperati/as
:mediante la clase PrincialPermission;, o bien e,ecutar las comprobaciones de
funciones expl'citas llamando al m-todo !Princial.!s!nRole02.
&l si$uiente e,emplo presupone (ue se utili1a la autenticaci%n de )indo2s y esbo1a
una petici%n declarati/a de permisos principales. &l m-todo (ue transfiere el atributo
s%lo se e,ecutar# si el usuario autenticado es miembro del $rupo Manager de
)indo2s. Si el llamador no es miembro de este $rupo, se $enerara una excepci%n
Securit$E#cetion.
[PrincipalPermission(SecurityAction.Demand,
Role=@"DomainName\Manager")]
public void SomeMethod()
{
}
&l si$uiente e,emplo muestra una comprobaci%n de funci%n del c%di$o expl'cita. &l
e,emplo asume (ue se utili1a la autenticaci%n de )indo2s. &n caso de utili1arse un
mecanismo de autenticaci%n distinto de )indo2s, el c%di$o si$ue siendo similar. &n
/e1 de con/ertir el ob,eto User a un ob,eto (indo)sPrincial, deber'a con/ertirse a
un ob,eto *enericPrincial.
// Extract the authenticated user from the current HTTP context.
// The User variable is equivalent to HttpContext.Current.User if you are using
// an .aspx or .asmx page
WindowsPrincipal authenticatedUser = User as WindowsPrincipal;
if (null != authenticatedUser)
{
// Note: To retrieve the authenticated user's username, use the
// following line of code
// string username = authenticatedUser.Identity.Name;
// Perform a role check
if (authenticatedUser.IsInRole(@"DomainName\Manager") )
{
// User is authorized to perform manager functionality
}
}
else
{
// User is not authorized to perform manager functionality
}
M+s in&ormaci,n
Si desea conocer un caso pr#ctico de implementaci%n del modelo descrito para la
autenticaci%n mediante 3ormularios, consulte la secci%n KAutenticaci%n mediante
3ormulariosK (ue fi$ura m#s adelante en este mismo cap'tulo.
Crear una clase !Princial ersonalizada
.*&+ 3rame2ork proporciona la clase *enericPrincial (ue deber'a utili1arse en la
mayor'a de los escenarios (ue recurren a un mecanismo de autenticaci%n distinto de
)indo2s. &sta clase permite e,ecutar comprobaciones de funciones a tra/-s del
m-todo !Princial.!s!nRole.
&n al$unas ocasiones (ui1#s resulte necesario implementar una clase !Princial
propia. Al$unos de los moti/os para implementar una clase !Princial propia8
J Se desean ampliar las funciones para la comprobaci%n de funciones. Cui1#s
desee utili1ar m-todos (ue permitan comprobar si un determinado usuario es
miembro de /arias funciones. "or e,emplo8
CustomPrincipal.IsInAllRoles( "Role", "Role2", "Role3" )
CustomPrincipal.IsInAnyRole( "Role1", "Role2", "Role3" )
J Cui1#s desea implementar un m-todo o propiedad adicional (ue de/uel/a una
lista de funciones en una matri1. "or e,emplo8
string[] roles = CustomPrincipal.Roles;
J Desea (ue la aplicaci%n fuerce la l%$ica ,er#r(uica de funciones. "or e,emplo,
un director $eneral se sit.a en un lu$ar de la ,erar(u'a superior al (ue ocupa
un director e,ecuti/o. &sta diferencia puede comprobarse con ayuda de
m-todos como los (ue se indican a continuaci%n.
CustomPrincipal.IsInHigherRole("Manager");
CustomPrincipal.IsInLowerRole("Manager");
J Desea implementar una iniciali1aci%n lenta de las listas de funciones. "or
e,emplo, (ui1#s desee car$ar de forma din#mica la lista de funciones s%lo
cuando se solicite una comprobaci%n de funci%n.
J Desea implementar la interfa1 !!dentit$ para (ue el usuario se identifi(ue con
un certificado :;<=ClientCerti&icate. "or e,emplo8
CustomIdentity id = CustomPrincipal.Identity;
X509ClientCertificate cert = id.ClientCertificate;

M+s in&ormaci,n
"ara obtener m#s informaci%n acerca de c%mo crear una clase !Princial propia,
consulte KC%mo implementar una clase 4"rincipal personali1adaK en la secci%n de
referencia de este manual.
Autenticaci,n de (indo)s
=tilice la autenticaci%n de )indo2s cuando los usuarios de la aplicaci%n dispon$an
de cuentas de )indo2s (ue pueda autenticar el ser/idor :por e,emplo, en escenarios
de intranets;.
Si confi$ura AS".*&+ para la autenticaci%n de )indo2s, 44S reali1ar# la
autenticaci%n de los usuarios mediante el mecanismo de autenticaci%n confi$urado
de 44S. 7a ilustraci%n 5.@ refle,a este escenario.
!nsert "gure: C#$8 % !!S ) ASP.NET ,elations-ip.gi'(
4lustraci%n 5.@
La autenticacin de Windos en ASP.NET utili!a IIS para autenticar a los
lla"adores
&l testi$o de acceso del llamador autenticado :(ue puede ser la cuenta an%nima de
usuario de 4nternet si se ha confi$urado 44S para la autenticaci%n an%nima; se pone a
disposici%n de la aplicaci%n AS".*&+. +en$a en cuenta las si$uientes
consideraciones8
J &ste enfo(ue permite (ue FileAuthorizationModule de AS".*&+ realice
comprobaciones de acceso con los archi/os AS".*&+ solicitados mediante el
testi$o de acceso del llamador ori$inal.
!mortante: la autori1aci%n de archi/os de AS".*&+ reali1a comprobaciones
de acceso con los tipos de archi/o (ue se hayan asi$nado a la extensi%n
Aspnet>isapi.dll.
J 7a autori1aci%n de archi/os no exi$e suplantaci%n. Cuando est- habilitada la
suplantaci%n, cual(uier acceso (ue efect.e la aplicaci%n a un recurso se
lle/ar# a cabo mediante la identidad del llamador suplantado. &n estos casos,
compruebe (ue las listas AC7 ad,untas a los recursos incluyen una entrada de
control de acceso :AC&; (ue concede, como m'nimo, acceso de lectura a la
identidad del llamador ori$inal.

!denti&icar al usuario autenticado
AS".*&+ asocia el ob,eto (indo)sPrincial a la solicitud )eb actual. Dicho ob,eto
contiene la identidad del usuario de )indo2s autenticado adem#s de una lista de
funciones de las (ue es miembro el usuario. &n el caso de la autenticaci%n de
)indo2s, la lista de funciones consta de un con,unto de $rupos de )indo2s a los
(ue pertenece el usuario.
&l si$uiente fra$mento de c%di$o muestra c%mo obtener la identidad del usuario de
)indo2s autenticado y c%mo lle/ar a cabo una comprobaci%n de funciones simple
para la autori1aci%n.
WindowsPrincipal user = User as WindowsPrincipal;
if (null != user)
{
string username = user.Identity.Name;
// Perform a role check
if ( user.IsInRole(@"DomainName\Manager") )
{
// User is authorized to perform manager functionality
}
}
else
{
// Throw security exception as we don't have a WindowsPrincipal
}
Autenticaci,n mediante Formularios
7a ilustraci%n 5.A muestra la secuencia de e/entos (ue desencadena un usuario
autenticado (ue intenta obtener acceso a un archi/o o recurso se$uro cuando se
utili1a la autenticaci%n mediante 3ormularios :contexto en el (ue la autori1aci%n
mediante direcciones =07 denie$a el acceso de usuario;.
!nsert "gure: C#$8 % .orms aut- se/uence.gi'(
4lustraci%n 5.A
Secuencia de eventos de la autenticacin "ediante #or"ularios
A continuaci%n se describe la secuencia de e/entos esbo1ada en la ilustraci%n 5.A.
6. &l usuario en/'a una solicitud )eb para Default.aspx.
44S permite la solicitud por(ue est# acti/ado el acceso an%nimo. AS".*&+
comprueba los elementos FauthorizationG y busca un elemento Fden$
usersWXP LG.
. &l usuario se rediri$e a la p#$ina de inicio de sesi%n :7o$in.aspx;, tal como se
especifica en el atributo .oginUrl del elemento F&ormsG.
?. &l usuario proporciona las credenciales y en/'a el formulario de inicio de
sesi%n.
@. Se /alidan las credenciales con un almac-n :SC7 Ser/er o Acti/e Directory; y,
si se desea, se recuperan las funciones. &s preciso recuperar una lista de
funciones si se desea utili1ar la autori1aci%n basada en funciones.
A. Se crea una cookie mediante FormsAuthenticationTic>et y se en/'a de
/uelta al cliente. Si se desea, se pueden almacenar las funciones en el /ale. Al
almacenar la lista de funciones en el /ale se e/ita tener (ue obtener acceso a
la base de datos para /ol/er a recuperar la lista con cada solicitud )eb
posterior del mismo usuario.
E. &l usuario se rediri$e mediante la redirecci%n del cliente a la p#$ina solicitada
ori$inalmente :Default.aspx;.
H. &n el controlador de e/entos Alication9AuthenticateRequest :en
Vlobal.asax;, el /ale se utili1a para crear un ob,eto !Princial y se almacena
en "ttConte#t.User.
AS".*&+ comprueba los elementos FauthorizationG y busca un elemento
Fden$ usersWXP LG. *o obstante, esta /e1 s' (ue se autentica el usuario.
AS".*&+ comprueba los elementos FauthorizationG para $aranti1ar (ue el
usuario fi$ura en el elemento Fallo)G.
&l usuario recibe acceso a Default.aspx.

Pasos de desarrollo ara la autenticaci,n mediante
Formularios
7a lista (ue fi$ura a continuaci%n destaca los pasos b#sicos (ue deben efectuarse
para implementar la autenticaci%n mediante 3ormularios8
6. Confi$urar 44S para el acceso an%nimo
. Confi$urar AS".*&+ para la autenticaci%n mediante 3ormularios
?. Crear un formulario )eb de inicio de sesi%n y /alidar las credenciales
suministradas
@. 0ecuperar una lista de funciones del almac-n de datos personali1ado
A. Crear un /ale de autenticaci%n mediante 3ormularios :almacenar funciones en
el /ale;
E. Crear un ob,eto !Princial
H. 4ncluir el ob,eto !Princial en el contexto 9++" actual
5. Autori1ar a los usuarios en funci%n del nombre de usuario o la pertenencia a
funciones

Con&igurar !!S ara el acceso an,nimo
&l directorio /irtual de la aplicaci%n debe confi$urarse en 44S para el acceso an%nimo.
Para con&igurar !!S ara el acceso an,nimo
6. 4nicie la herramienta de administraci%n Ser/icios de 4nternet 4nformation
Ser/er.
. Seleccione el directorio /irtual de la aplicaci%n, ha$a clic con el bot%n
secundario del mouse :rat%n; y ha$a clic en Proiedades.
?. 9a$a clic en Seguridad de directorios.
@. &n el $rupo Control de autenticaci,n $ acceso an,nimo, ha$a clic en
Modi&icar.
A. Seleccione Acceso an,nimo.

Con&igurar ASP.NET ara la autenticaci,n mediante Formularios
A continuaci%n se incluye un fra$mento de c%di$o de muestra.
<authentication mode="Forms" >
<forms name="MyAppFormsAuth"
loginUrl="login.aspx"
protection="Encryption"
timeout="20"
path="/" >
</forms>
</authentication>
Crear un &ormulario (e% de inicio de sesi,n $ /alidar las
credenciales suministradas
7a /alidaci%n de las credenciales debe efectuarse con una base de datos SC7
Ser/er o Acti/e Directory.
M+s in&ormaci,n
J Consulte KC%mo utili1ar la autenticaci%n mediante 3ormularios con SC7 Ser/er
!!!K en la secci%n de referencia de este manual.
J Consulte KC%mo utili1ar la autenticaci%n mediante 3ormularios con Acti/e
DirectoryK en la secci%n de referencia de este manual.

Recuerar una lista de &unciones del almac?n de datos
ersonalizado
7as funciones deben obtenerse de una tabla de base de datos SC7 Ser/er, o bien
$ruposLlistas de distribuci%n confi$uradas en Acti/e Directory. Consulte los recursos
anteriores para obtener informaci%n m#s detallada.
Crear un /ale de la autenticaci,n mediante Formularios
7as funciones recuperadas se almacenan en el /ale. &l si$uiente fra$mento de
c%di$o ilustra este paso.
// This event handler executes when the user clicks the Logon button
// having supplied a set of credentials
private void Logon_Click(object sender, System.EventArgs e)
{
// Validate credentials against either a SQL Server database
// or Active Directory
bool isAuthenticated = IsAuthenticated( txtUserName.Text,
txtPassword.Text );
if (isAuthenticated == true )
{
// Retrieve the set of roles for this user from the SQL Server
// database or Active Directory. The roles are returned as a
// string that contains pipe separated role names
// for example "Manager|Employee|Sales|"
// This makes it easy to store them in the authentication ticket
string roles = RetrieveRoles( txtUserName.Text, txtPassword.Text );
// Create the authentication ticket and store the roles in the
// custom UserData property of the authentication ticket
FormsAuthenticationTicket authTicket = new
FormsAuthenticationTicket(
1, // version
txtUserName.Text, // user name
DateTime.Now, // creation
DateTime.Now.AddMinutes(20),// Expiration
false, // Persistent
roles ); // User data
// Encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
// Create a cookie and add the encrypted ticket to the
// cookie as data.
HttpCookie authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName,
encryptedTicket);
// Add the cookie to the outgoing cookies collection.
Response.Cookies.Add(authCookie);
// Redirect the user to the originally requested page
Response.Redirect( FormsAuthentication.GetRedirectUrl(
txtUserName.Text,
false ));
}
}
Crear un o%3eto !Princial
Cree el ob,eto !Princial en el controlador de e/entos
Alication9AuthenticationRequest de Vlobal.asax. =tilice la clase
*enericPrincial sal/o si precisa una funcionalidad basada en funciones ampliada.
De ser as', cree una clase personali1ada (ue implemente !Princial.
!ncluir el o%3eto !Princial en el conte#to "TTP actual
A continuaci%n se incluye el c%di$o (ue crea un ob,eto *enericPrincial.
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
// Extract the forms authentication cookie
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if(null == authCookie)
{
// There is no authentication cookie.
return;
}
FormsAuthenticationTicket authTicket = null;
try
{
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
}
catch(Exception ex)
{
// Log exception details (omitted for simplicity)
return;
}
if (null == authTicket)
{
// Cookie failed to decrypt.
return;
}
// When the ticket was created, the UserData property was assigned a
// pipe delimited string of role names.
string[] roles = authTicket.UserData.Split(new char[]{'|'});
// Create an Identity object
FormsIdentity id = new FormsIdentity( authTicket );
// This principal will flow throughout the request.
GenericPrincipal principal = new GenericPrincipal(id, roles);
// Attach the new principal object to the current HttpContext object
Context.User = principal;
}
Autorizar a los usuarios en &unci,n del nom%re de usuario o la
ertenencia a &unciones
=tilice peticiones de permisos principales declarati/as para restrin$ir el acceso a los
m-todos. =tilice peticiones de permisos principales imperati/as yLo comprobaciones
de funciones expl'citas :!Princial.!s!nRole; para lle/ar a cabo la autori1aci%n de
$ranularidad precisa desde los m-todos.
!nstrucciones ara la imlementaci,n de Formularios
J =tilice SS7 para la captura de credenciales mediante un formulario 9+M7.
Adem#s de utili1ar SS7 para la p#$ina de inicio de sesi%n, tambi-n deber'a
utili1ar SS7 para otras p#$inas siempre (ue las credenciales o la cookie de
autenticaci%n se en/'en a tra/-s de la red. De este modo se reduce la
amena1a asociada a los ata(ues de reproducci%n de la cookie.
J Autenti(ue a los usuarios con un almac-n de datos personali1ado. =tilice SC7
Ser/er o Acti/e Directory.
J 0ecupere una lista de funciones del almac-n de datos personali1ado y
almacene una lista delimitada de funciones en la propiedad User@ata de la
clase FormsAuthenticationTic>et. De este modo se me,ora el rendimiento
puesto (ue se elimina el acceso repetido al almac-n de datos para cada
solicitud )eb y se e/ita tener (ue almacenar las credenciales del usuario en la
cookie de autenticaci%n.
J Si la lista de funciones es muy amplia y existe el peli$ro de sobrepasar el
tamaQo l'mite de la cookie, almacene la informaci%n detallada de la cookie en
el ob,eto de cach- de AS".*&+ o en la base de datos y recupere las funciones
para cada solicitud (ue se efect.e.
J "ara cada solicitud y despu-s de reali1ar la autenticaci%n inicial8
J 0ecupere las funciones del /ale del controlador de e/entos
Alication9AuthenticateRequest.
J Cree un ob,eto !Princial y almac-nelo en el contexto 9++"
:"ttConte#t.User;. .*&+ 3rame2ork tambi-n asocia el ob,eto al
proceso .*&+ actual :Thread.CurrentPrincial;.
J =tilice la clase *enericPrincial sal/o si precisa crear una
implementaci%n !Princial personali1ada8 por e,emplo, para ofrecer
compatibilidad con operaciones de funciones me,oradas.

J =tilice dos cookies8 una para la personali1aci%n y otra para la autenticaci%n y
autori1aci%n se$uras. &stable1ca el car#cter persistente de la cookie de
personali1aci%n :ase$.rese de (ue no contiene informaci%n (ue pudiese
permitir a una solicitud e,ecutar una operaci%n restrin$ida como, por e,emplo,
incluir una orden en una ubicaci%n se$ura de un sitio;.
J =tilice un nombre de cookie :mediante el atributo Forms del elemento
F&ormsG; y una ruta de acceso independientes para cada aplicaci%n )eb.
&ste enfo(ue permite $aranti1ar (ue los usuarios (ue obtienen la autenticaci%n
de una aplicaci%n no reciban el trato de usuarios autenticados cuando utili1an
una se$unda aplicaci%n ubicada en el mismo ser/idor )eb.
J Ase$.rese de (ue las cookies est-n habilitadas en los exploradores cliente.
"odr# obtener informaci%n relati/a al enfo(ue de autenticaci%n mediante
3ormularios (ue no precisa cookies en la secci%n KAutenticaci%n mediante
3ormularios sin cookiesK (ue fi$ura m#s adelante en este mismo cap'tulo.

M+s in&ormaci,n
J Consulte KC%mo utili1ar la autenticaci%n mediante 3ormularios con SC7 Ser/er
!!!K en la secci%n de referencia de este manual.
J Consulte KC%mo utili1ar la autenticaci%n mediante 3ormularios con Acti/e
DirectoryK en la secci%n de referencia de este manual.
J Consulte KC%mo utili1ar la autenticaci%n mediante 3ormularios con ob,etos
Veneric"rincipalK en la secci%n 0eferencia de esta $u'a.

Alo3ar /arias alicaciones mediante la autenticaci,n
mediante Formularios
Si alo,a /arias aplicaciones )eb (ue utili1an la autenticaci%n mediante 3ormularios
en el mismo ser/idor )eb, los usuarios autenticados por una aplicaci%n podr#n
en/iar una solicitud a otra aplicaci%n sin ser rediri$idos a la p#$ina de inicio de sesi%n
de dicha aplicaci%n. 7as re$las de la autori1aci%n mediante direcciones =07 de la
se$unda aplicaci%n pueden dene$ar el acceso al usuario, sin brindarle la oportunidad
de proporcionar las credenciales de inicio de sesi%n a tra/-s del formulario de inicio
de sesi%n.
&stos casos s%lo pueden ocurrir si los atributos del nombre y la ruta de acceso del
elemento F&ormsG son id-nticos en di/ersas aplicaciones y si cada aplicaci%n utili1a
un elemento FmachineAe$G com.n en el archi/o )eb.confi$.
M+s in&ormaci,n
"ara obtener m#s informaci%n acerca de este enfo(ue, y conocer las t-cnicas de
resoluci%n, consulte los si$uientes art'culos de la <no2led$e Nase8
J C?6?66E, K"0N8 3orms Authentication 0e(uests Are *ot Directed to lo$in=rl
"a$eK :en in$l-s;.
J C?6!@6A, K"0N8 Mobile 3orms Authentication and Different )eb ApplicationsK
:en in$l-s;.

Autenticaci,n mediante Formularios sin coo>ies
Si necesita una soluci%n de autenticaci%n mediante 3ormularios sin cookies, sopese
la posibilidad de utili1ar el enfo(ue empleado por el kit de herramientas para 4nternet
de Microsoft Mobile :Microsoft Mobile 4nternet +oolkit;. 7a autenticaci%n mediante
3ormularios m%/il se basa en la autenticaci%n mediante 3ormularios pero se
diferencia en el hecho de (ue utili1a una cadena de consulta en /e1 de una cookie
para transmitir el /ale de autenticaci%n.
M+s in&ormaci,n
"ara obtener m#s informaci%n acerca de la autenticaci%n mediante 3ormularios,
consulte el art'culo C?66AE5, K4*3O8 9o2 +o =se Mobile 3orms Authentication 2ith
Microsoft Mobile 4nternet +oolkitK :en in$l-s; de la Microsoft <no2led$e Nase.

Autenticaci,n de Passort
=tilice la autenticaci%n de "assport cuando los usuarios de la aplicaci%n dispon$an
de cuentas de "assport y desee implementar una soluci%n de inicio de sesi%n .nico
con otros sitios habilitados para "assport.
Cuando AS".*&+ se confi$ura para la autenticaci%n de "assport, el sistema solicita
al usuario (ue inicie la sesi%n y lo rediri$e al sitio "assport. Despu-s de una
/alidaci%n de credenciales satisfactoria, el usuario se rediri$e de nue/o al sitio.
Con&igurar ASP.NET ara la autenticaci,n de Passort
"ara confi$urar AS".*&+ para la autenticaci%n de "assport, utilice la confi$uraci%n
del archi/o )eb.confi$ (ue se indica a continuaci%n.
<authentication mode="Passport">
<passport redirectUrl="internal" />
</authentication>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
Asignar una identidad Passort a las &unciones de *lo%al.asa#
"ara asi$nar una identidad "assport a las funciones, implemente el controlador de
e/entos PassortAuthentication9-nAuthentication en el archi/o Vlobal.asax, tal
como se indica a continuaci%n.
void PassportAuthentication_OnAuthenticate(Object sender,
PassportAuthenticationEventArgs e)
{
if(e.Identity.Name == "0000000000000001")
{
string[] roles = new String[]{"Developer", "Admin", "Tester"};
Context.User = new GenericPrincipal(e.Identity, roles);
}
}
Pro%ar la ertenencia a &unciones
&l fra$mento de c%di$o (ue fi$ura a continuaci%n muestra c%mo recuperar la
identidad "assport autenticada y c%mo comprobar la pertenencia a funciones en una
p#$ina aspx.
PassportIdentity passportId = Context.User.Identity as PassportIdentity;
if (null == passportId)
{
Response.Write("Not a PassportIdentity<br>");
return;
}
Response.Write("IsInRole: Develeoper? " + Context.User.IsInRole("Developer"));
Autenticaci,n ersonalizada
Si nin$uno de los m%dulos de autenticaci%n suministrados por .*&+ 3rame2ork
satisface sus necesidades espec'ficas de autenticaci%n, puede utili1ar la
autenticaci%n personali1ada e implementar un mecanismo de autenticaci%n propio.
"or e,emplo, en casos en los (ue su empresa ya cuenta con una estrate$ia de
autenticaci%n personali1ada (ue utili1an masi/amente otras aplicaciones.
"ara implementar una autenticaci%n personali1ada en AS".*&+8
J Confi$ure el modo de autenticaci%n en el archi/o )eb.confi$ tal como se
muestra a continuaci%n. &ste comando notifica a AS".*&+ (ue no in/o(ue
nin$uno de los m%dulos de autenticaci%n inte$rados.
<authentication mode="None" />
J Cree una clase (ue implemente la interfa1 S$stem.(e%.!"ttModule para
crear un m%dulo 9++" personali1ado. &ste m%dulo deber'a crear un enlace en
el e/ento "ttAlication.AuthenticateRequest y proporcionar un dele$ado
al (ue llamar con cada solicitud de la aplicaci%n cuando se precise la
autenticaci%n.
=n m%dulo de autenticaci%n debe8
J Obtener las credenciales del llamador
J Validar las credenciales con relaci%n a un almac-n
J Cree un ob,eto !Princial y almacenarlo en "ttConte#t.User
J Crear y prote$er un testi$o de autenticaci%n y en/iarlo de nue/o al usuario
:normalmente mediante una cadena de consulta, una cookie o un campo
de formulario oculto;.
J Obtener el testi$o de autenticaci%n en futuras solicitudes, /alidarlo y /ol/er
a en/iarlo

M+s in&ormaci,n
Si desea obtener m#s informaci%n acerca de la implementaci%n de un m%dulo 9++"
personali1ado, consulte el art'culo C?!HTTE, K9O) +O8 Create an AS".*&+ 9++"
Module =sin$ Visual CY .*&+K :en in$l-s; de la Microsoft <no2led$e Nase.
!dentidad del roceso ara ASP.NET
&,ecute AS".*&+ :en especial el proceso de traba,o Aspnet>2p.exe; mediante una
cuenta con pri/ile$ios m'nimos.
Utilizar una cuenta con ri/ilegios m'nimos
=tilice una cuenta con pri/ile$ios m'nimos para miti$ar la amena1a asociada con la
exposici%n de los procesos. Si un determinado intruso consi$ue poner en peli$ro el
proceso de AS".*&+ (ue e,ecuta la aplicaci%n )eb, podr'a heredar y explotar con
facilidad los pri/ile$ios y derechos de acceso concedidos a la cuenta de procesos.
=na cuenta confi$urada con pri/ile$ios m'nimos reduce los posibles daQos.
E/itar la e3ecuci,n como S!STEMA
*o utilice la cuenta S4S+&MA, (ue dispone de muchos pri/ile$ios, para e,ecutar
AS".*&+ ni conceda a la cuenta de proceso de AS".*&+ el pri/ile$io OActuar como
parte del sistema operati/oP. &s probable (ue cai$a en la tentaci%n de utili1ar dicha
cuenta o conceder el pri/ile$io para (ue el c%di$o pueda llamar a la A"4 .ogonUser
para obtener una identidad fi,a :lo (ue suele reali1arse para el acceso a los recursos
de red;. Si desea conocer otros enfo(ues, consulte el apartado KObtener acceso a
recursos de redK (ue fi$ura m#s adelante en este cap'tulo.
&ntre los moti/os para no optar por una e,ecuci%n con la cuenta S4S+&MA ni para
conceder el pri/ile$io OActuar como parte del sistema operati/oP fi$uran8
J Aumenta considerablemente los daQos (ue puede pro/ocar un intruso cuando
el sistema est# en peli$ro, pero no afecta a la capacidad de hallarse en esta
situaci%n.
J Con/ierte en inser/ible el principio de los pri/ile$ios m'nimos. 7a cuenta
AS"*&+ se ha confi$urado espec'ficamente como una cuenta con pri/ile$ios
m'nimos diseQada para e,ecutar aplicaciones )eb de AS".*&+.

M+s in&ormaci,n
"ara obtener m#s informaci%n acerca del pri/ile$io KActuar como parte del sistema
operati/oK, consulte la columna Security Nriefs de a$osto de 6TTT de Microsoft
Systems Journal :en in$l-s;.
Controladores de dominio $ la cuenta de roceso de ASP.NET
"or lo $eneral, no es recomendable e,ecutar el ser/idor )eb en un controlador de
dominios por(ue si el ser/idor se /e afectado, tambi-n se /e afectado todo el
dominio. Si necesita e,ecutar AS".*&+ en un controlador de dominio, deber#
conceder a la cuenta de proceso de AS".*&+ los pri/ile$ios adecuados, como se
describe en el art'culo C?6A6A5, KN=V8 AS".*&+ Does *ot )ork 2ith the Default
AS"*&+ Account on a Domain ControllerK :en in$l-s; de la Microsoft <no2led$e
Nase.
Utilizar la cuenta redeterminada de ASPNET
7a cuenta local de AS"*&+ se ha confi$urado espec'ficamente para e,ecutar
aplicaciones )eb de AS".*&+ con el menor con,unto de pri/ile$ios posible. =tilice
AS"*&+ siempre (ue sea posible.
De manera predeterminada, las aplicaciones )eb de AS".*&+ e,ecutan esta cuenta,
tal como lo especifica el elemento FrocessModelG del archi/o Machine.confi$.
<processModel userName="machine" password="AutoGenerate" />
Nota: el nombre de usuario machine se refiere a la cuenta AS"*&+. 7a cuenta se
crea con una contraseQa se$ura cripto$r#ficamente al instalar .*&+ 3rame2ork.
Adem#s de confi$urarse en la base de datos SAM :Security Account Manager;, la
contraseQa se almacena en la autoridad local del sistema :7SA; del e(uipo local.
&l sistema recupera la contraseQa de la 7SA cada (ue /e1 (ue inicia el proceso de
traba,o de AS".*&+.
Si la aplicaci%n obtiene acceso a recursos de red, la cuenta AS"*&+ debe ser capa1
de ser autenticada por el e(uipo remoto. &xisten dos posibilidades8
J 0establecer la contraseQa de la cuenta AS"*&+ con un /alor conocido y crear
a continuaci%n una cuenta duplicada :con el mismo nombre y la misma
contraseQa; en el e(uipo remoto. &ste enfo(ue es la .nica opci%n posible en
circunstancias como las (ue se describen acto se$uido8
J &l ser/idor )eb y el e(uipo remoto se hallan en dominios distintos y no
existe nin$una relaci%n de confian1a.
J &l ser/idor )eb y el e(uipo remoto se hallan separados por un ser/idor de
se$uridad y no se desea abrir los puertos necesarios para permitir la
autenticaci%n de )indo2s.

J Cuando se prima la facilidad de administraci%n, debe utili1arse una cuenta de
dominio con pri/ile$ios m'nimos.
"ara e/itar tener (ue actuali1ar y sincroni1ar las contraseQas manualmente,
utilice una cuenta de dominio con pri/ile$ios m'nimos para e,ecutar AS".*&+.
0esulta fundamental (ue la cuenta de dominio est- totalmente blo(ueada para
miti$ar la amena1a de exposici%n del proceso. Si un intruso lo$ra poner en
peli$ro el proceso de traba,o de AS".*&+, tendr# la posibilidad de obtener
acceso a los recursos del dominio, sal/o (ue la cuenta se haya blo(ueado por
completo.

Nota: si utili1a una cuenta local y -sta (ueda expuesta, los .nicos e(uipos su,etos
al ata(ue ser#n a(uellos en los (ue se hayan creado cuentas duplicadas. Si utili1a
una cuenta de dominio, -sta (uedar# /isible para todos los e(uipos del dominio.
*o obstante, si$ue siendo necesario (ue la cuenta dispon$a de permisos para
obtener acceso a dichos e(uipos.
El elemento BrocessModelC
&l elemento FrocessModelG del archi/o Machine.confi$ contiene los atributos de
userName y ass)ord (ue especifican la cuenta (ue deber'a utili1arse para
e,ecutar el proceso de traba,o de AS".*&+ :Aspnet>2p.exe;. &xisten una serie de
opciones para confi$urar este par#metro. "or e,emplo8
J 5machine5. &l proceso de traba,o se e,ecuta como la cuenta AS"*&+ con
pri/ile$ios m'nimos. 7a cuenta dispone de acceso a la red pero no puede ser
autenticada por nin$.n otro e(uipo de la red por(ue se trata de una cuenta
local del e(uipo y no existe nin$una autoridad (ue pueda responder por la
cuenta. &n la red, esta cuenta se representa como K*ombre&(uipoRAS"*&+K.
J 5s$stem5. &l proceso de traba,o se e,ecuta como la cuenta S4S+&MA local.
&sta cuenta dispone de numerosos pri/ile$ios en el e(uipo local, adem#s de la
posibilidad de obtener acceso a la red mediante las credenciales del e(uipo.
&n la red, esta cuenta se representa como K*ombreDominioR*ombre&(uipoZK.
J Credenciales esec'&icas. Cuando suministre las credenciales para
userName y ass)ord, recuerde el principio de los pri/ile$ios m'nimos. Si
especifica una cuenta local, la aplicaci%n )eb no podr# autenticarse en la red
sal/o (ue se cree una cuenta duplicada en el e(uipo remoto. Si selecciona
utili1ar una cuenta de dominio con pri/ile$ios m'nimos, ase$.rese de (ue no
sea una cuenta con permisos para obtener acceso a m#s e(uipos de la red de
los necesarios.
&n .*&+ 3rame2ork /ersi%n 6.6 tendr# la posibilidad de almacenar en el
re$istro atributos userName y ass)ord cifrados.

Nota: a diferencia de c%mo se e,ecutan las aplicaciones AS" cl#sicas, el c%di$o
AS".*&+ nunca se e,ecuta en el proceso dllhost.exe o como la cuenta
4)AM>MAC94*&*AM&, incluso si el ni/el de protecci%n de la aplicaci%n se
establece en Alto :Aislado2 en 44S.
7as solicitudes de AS".*&+ (ue se en/'an a 44S se enrutan directamente al
proceso de traba,o de AS".*&+ :Aspnet>2p.exe;. 7a extensi%n 4SA"4 de AS".*&+,
Aspnet>isapi.dll, se e,ecuta en el espacio de direcciones de proceso de 44S
:4netinfo.exe;. :7a entrada de la metabase !nProcess!saiAs controla este
proceso, por lo (ue no deber'a modificarse;. 7a extensi%n 4SA"4 es la responsable
de enrutar las solicitudes al proceso de traba,o de AS".*&+. 7as aplicaciones de
AS".*&+ se e,ecutan entonces en el proceso de traba,o AS".*&+, en el (ue los
dominios de la aplicaci%n ofrecen l'mites de aislamiento.
44S E permitir# aislar las aplicaciones de AS".*&+ mediante la confi$uraci%n de
$rupos de aplicaciones, confi$uraciones en las (ue cada $rupo tendr# su propia
instancia de aplicaci%n.

M+s in&ormaci,n
J Si desea obtener m#s informaci%n acerca del acceso a los recursos de red de
las aplicaciones )eb de AS".*&+, consulte el apartado KObtener acceso a
recursos de redK (ue fi$ura m#s adelante en este cap'tulo.
J "ara obtener informaci%n detallada acerca de c%mo crear una cuenta
personali1ada para la e,ecuci%n de AS".*&+, consulte KC%mo crear una cuenta
personali1ada para e,ecutar AS".*&+K en la secci%n de referencia de este
manual.

Sulantaci,n
Con la introducci%n del m%dulo FileAuthorizationModule, y con el empleo efica1 de
los e(uipos selectores y los l'mites de confian1a, la suplantaci%n puede resultar una
des/enta,a en lu$ar de una /enta,a de AS".*&+.
Sulantaci,n $ recursos locales
Si utili1a la suplantaci%n y obtiene acceso a los recursos locales desde el c%di$o de
la aplicaci%n )eb, deber# confi$urar las listas AC7 ad,untas a cada recurso se$uro
para (ue conten$a una AC& (ue conceda al usuario autenticado, como m'nimo,
acceso de lectura.
=n enfo(ue toda/'a me,or consiste en e/itar la suplantaci%n, conceder permisos a la
cuenta de proceso de AS".*&+ y utili1ar la autori1aci%n mediante direcciones =07,
la autori1aci%n de archi/os y una combinaci%n de comprobaciones declarati/as e
imperati/as basadas en funciones.
Sulantaci,n $ recursos remotos
Si se utili1a la suplantaci%n y se obtiene acceso a los recursos remotos desde el
c%di$o de la aplicaci%n )eb, el acceso no resultar# satisfactorio sal/o (ue se utilice
la autenticaci%n b#sica, mediante 3ormularios o <erberos. Si se utili1a la
autenticaci%n <erberos, las cuentas de usuario deben confi$urarse correctamente
para la dele$aci%n. Deben marcarse como OConfidencial y no puede dele$arseP en
Acti/e Directory.
M+s in&ormaci,n
"ara obtener m#s informaci%n acerca de c%mo confi$urar la dele$aci%n <erberos,
consulte8
J K+ransmitir el llamador ori$inalK en el cap'tulo A, KSe$uridad de intranetK.
J KC%mo implementar la dele$aci%n <erberos para )indo2s !!!K en la secci%n
de referencia de este manual.

Sulantaci,n $ su%rocesamiento
Si un subproceso (ue utili1a la suplantaci%n crea un nue/o subproceso, este nue/o
subproceso heredar# el contexto de se$uridad de la cuenta de proceso de AS".*&+,
no la cuenta suplantada.
-%tener acceso a recursos de sistema
De manera predeterminada, AS".*&+ no lle/a a cabo la suplantaci%n. Como
consecuencia, si la aplicaci%n )eb obtiene acceso a los recursos locales del
sistema, lo har# utili1ando el contexto de se$uridad asociado al proceso de traba,o
Aspnet>2p.exe. &l contexto de se$uridad /iene determinado por la cuenta utili1ada
para e,ecutar el proceso de traba,o.
-%tener acceso al registro de e/entos
7as cuentas con pri/ile$ios m'nimos disponen de los permisos necesarios para
escribir re$istros en el re$istro de e/entos con ayuda de los or'$enes de e/entos
existentes. Sin embar$o, no cuentan con los permisos suficientes para crear nue/os
or'$enes de e/entos. "ara ello es necesaria una nue/a entrada (ue debe ubicarse
,usto en el ni/el inferior del sub#rbol del re$istro.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\<log>
"ara e/itar este problema, cree los or'$enes de e/entos (ue utili1a la aplicaci%n
durante el proceso de instalaci%n, cuando est#n disponibles los pri/ile$ios de
administrador. =n buen enfo(ue consiste en utili1ar una clase de instalador .*&+ de
la (ue )indo2s 4nstaller pueda crear una instancia :si se utili1a la implementaci%n
.msi; o por la utilidad del sistema 4nstall=til.exe si no se utili1a dicha implementaci%n.
Si no puede crear or'$enes de e/entos durante la instalaci%n, deber# a$re$ar los
permisos necesarios a la si$uiente cla/e de re$istro y conceder acceso a la cuenta
de proceso de AS".*&+ :de cual(uier cuenta suplantada si la aplicaci%n utili1a la
suplantaci%n;.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
7as cuentas deben tener los si$uientes permisos m'nimos8
J Consultar los /alores de cla/es
J &stablecer /alores de cla/es
J Crear subcla/e
J &numerar subcla/es
J *otificar
J 7ectura

"uede utili1ar el si$uiente c%di$o para escribir en el re$istro de e/entos Application
de AS".*&+ una /e1 (ue se hayan aplicado los permisos al re$istro8
string source = "Your Application Source";
string logToWriteTo = "Application";
string eventText = "Sample Event";
if (!EventLog.SourceExists(source))
{
EventLog.CreateEventSource(source, logToWriteTo);
}
EventLog.WriteEntry(source, eventText, EventLogEntryType.Warning, 234);
-%tener acceso al registro
Cual(uier cla/e de re$istro a la (ue obten$a acceso la aplicaci%n re(uiere una AC&
:entrada de control de acceso; en la lista AC7 (ue concede :como m'nimo; acceso
de lectura a la cuenta de proceso de AS".*&+.
M+s in&ormaci,n
"ara obtener m#s informaci%n acerca de las clases del instalador y la utilidad
4nstall=til.exey, consulte las herramientas de .*&+ 3rame2ork en MSD*.
-%tener acceso a los o%3etos C-M
&n AS" com.n, las solicitudes se procesan mediante subprocesos del $rupo de
subprocesos S+A :Single Threaded Apartment, subprocesamiento controlado .nico;.
&n AS".*&+, las solicitudes se procesan con subprocesos del $rupo de subprocesos
M+A :Multithreaded Apartment, subprocesamiento controlado m.ltiple;. &sto puede
tener implicaciones para las aplicaciones )eb de AS".*&+ (ue llaman a ob,etos del
modelo de subprocesamiento controlado.
-%3etos del modelo de su%rocesamiento controlado
Cuando una aplicaci%n )eb de AS".*&+ llama un ob,eto de modelo de
subprocesamiento controlado :como por e,emplo un ob,eto COM de Visual Nasic E;,
existen dos aspectos (ue deben tenerse en cuenta8
J &s preciso marcar la p#$ina de AS".*&+ con la directi/a AsComat, como
se muestra a continuaci%n.
<%@ Page Language="C#" AspCompat="True" %>
J *o cree los ob,etos COM fuera de controladores de e/entos "a$e espec'ficos.
Cr-elos siempre en los controladores de e/entos "a$e :como Page9.oad y
Page9!nit;. *o cree los ob,etos COM en el constructor de la p#$ina.
-%ligaci,n de utilizar la directi/a AsComat
De manera predeterminada, AS".*&+ utili1a subprocesos M+A para procesar las
solicitudes. &l resultado se traduce en un cambio de subproceso cuando se llama el
ob,eto de modelo de subprocesamiento controlado desde AS".*&+, puesto (ue no
es posible obtener acceso a dicho ob,eto directamente desde los subprocesos M+A
:COM utili1ar'a un subproceso S+A;.
7a especificaci%n de AsComat pro/oca (ue la p#$ina se procese mediante un
subproceso S+A. De este modo se e/ita (ue un subproceso cambie de M+A a S+A.
&ste comportamiento resulta importante desde el punto de /ista de la se$uridad en
casos en los (ue la aplicaci%n )eb utili1a la suplantaci%n, puesto (ue un cambio de
subproceso da lu$ar a una p-rdida del testi$o de suplantaci%n. &l nue/o subproceso
no tendr'a el testi$o de suplantaci%n asociado.
7a directi/a AsComat no es compatible con los ser/icios )eb de AS".*&+. &sto
si$nifica (ue cuando se llaman ob,etos de modelo de subprocesamiento controlado
desde el c%di$o de un ser/icio )eb, se produce un cambio de subproceso y se
pierde el testi$o de suplantaci%n del subproceso. Como consecuencia suele
$enerarse una excepci%n de acceso dene$ado.
M+s in&ormaci,n
J Consulte los art'culos de la <no2led$e Nase (ue se indican a continuaci%n
para obtener m#s informaci%n8
J Art'culo C?!??HA, K4*3O8 UM7 )eb Ser/ices and Apartment Ob,ectsK :en
in$l-s;
J Art'culo C?AHT6, K"0N8 Access Denied &rror Messa$e Occurs )hen
4mpersonatin$ in AS".*&+ and Callin$ S+A COM ComponentsK :en in$l-s;
J Si desea obtener m#s informaci%n acerca de c%mo determinar la identidad del
c%di$o (ue se est- e,ecutando actualmente, consulte la secci%n K[Cui-n soyXK
del cap'tulo 6?, O0esoluci%n de problemas.K

No cree los o%3etos C-M &uera de controladores de e/entos Page
esec'&icos
*o cree los ob,etos COM fuera de controladores de e/entos "a$e espec'ficos. &l
si$uiente fra$mento de c%di$o muestra lo (ue no deber'a hacerse.
<%@ Page Language="C#" AspCompat="True" %>
<script runat="server">
// COM object created outside of Page events
YourComObject obj = new apartmentObject();
public void Page_Load()
{
obj.Foo()
}
</script>
Cuando se utili1an ob,etos del modelo de subprocesamiento controlado es
importante crear el ob,eto en los e/entos "a$e espec'ficos como Page9.oad, tal
como se indica a continuaci%n.
<%@ Page Language="C#" AspCompat="True" %>
<script runat="server">
public void Page_Load()
{
YourComObject obj = new apartmentObject();
obj.Foo()
}
</script>
M+s in&ormaci,n
"ara obtener m#s informaci%n, consulte el art'culo C?!5!TA, K"0N8 Creatin$ S+A
Components in the Constructor in AS".*&+ AS"COM"A+ Mode *e$ati/ely 4mpacts
"erformanceK :en in$l-s; de la Microsoft <no2led$e Nase.
-%3etos CD $ 86 .NET de C-M1
7a herramienta de desarrollo Microsoft CYB y el sistema de desarrollo Microsoft
Visual NasicB .*&+ son compatibles con todos los modelos de subproceso :libre,
neutral, ambos y subprocesamiento controlado;. De manera predeterminada, cuando
los ob,etos CY y Visual Nasic .*&+ se alo,an en COMS se marcan como Ambos.
Como consecuencia, cuando se llaman desde AS".*&+, el acceso es directo y no se
produce nin$.n cambio de subproceso.
-%tener acceso a recursos de red
&s posible (ue la aplicaci%n necesite obtener acceso a recursos de red. &n este
sentido, resulta importante identificar8
J 7os recursos a los (ue necesita obtener acceso la aplicaci%n.
"or e,emplo, archi/os de recursos compartidos de archi/os, bases de datos,
ser/idores DCOM, ob,etos Acti/e Directory, etc.
J 7a identidad utili1ada para reali1ar el acceso al recurso.
Si la aplicaci%n obtiene acceso a recursos remotos, los e(uipos remotos deben
poder ser capaces de autenticar dicha identidad.

Nota: si desea obtener informaci%n espec'fica acerca de c%mo obtener acceso a
las bases de datos SC7 Ser/er, consulte el cap'tulo 6, KSe$uridad del acceso a
datos.K
&l acceso a los recursos remotos desde una aplicaci%n AS".*&+ puede reali1arse
mediante cual(uiera de las t-cnicas (ue se detalla acto se$uido8
J =tili1ar la identidad de proceso de AS".*&+
J =tili1ar un componente re/isado
J =tili1ar una cuenta de usuario de 4nternet an%nimo :como, por e,emplo,
4=S0>MAC94*&;
J =tili1ar la A"4 .ogonUser y la suplantaci%n para una identidad de )indo2s
espec'fica
J =tili1ar el llamador ori$inal

Utilizar la identidad del roceso ASP.NET
Cuando la aplicaci%n no est# confi$urada para la suplantaci%n, la identidad del
proceso AS".*&+ proporciona la identidad predeterminada cuando la aplicaci%n
intenta obtener acceso a los recursos remotos. Si desea utili1ar la cuenta del proceso
AS".*&+ para el acceso a los recursos remotos, podr# ele$ir entre tres opciones8
J =tili1ar cuentas refle,adas
Se trata del enfo(ue m#s simple. Debe crearse una cuenta local con un
nombre de usuario y contraseQa coincidentes en el e(uipo remoto. &s
necesario cambiar la contraseQa de la cuenta AS".*&+ del administrador de
usuarios con un /alor conocido :utilice siempre una contraseQa se$ura;. A
continuaci%n, establ-1cala expl'citamente en el elemento FrocessModelG del
archi/o Machine.confi$ y sustituya el /alor KAuto*enerateK existente.
!mortante: si cambia la contraseQa AS"*&+ por un /alor conocido, la
contraseQa de 7SA de,ar# de coincidir con la contraseQa de la cuenta SAM. Si
necesita recuperar el /alor predeterminado KAuto*enerateK, si$a uno de los
si$uientes pasos8
&,ecute Aspnet>re$iis.exe para restablecer la confi$uraci%n predeterminada de
AS".*&+. "ara obtener m#s informaci%n, consulte el art'culo C?!E!!A,
K9O)+O8 0epair 44S Mappin$ After \ou 0emo/e and 0einstall 44SK :en in$l-s;
de la Microsoft <no2led$e Nase.
J Cree una cuenta local personali1ada con pri/ile$ios m'nimos para e,ecutar
AS".*&+ y cree una cuenta duplicada en el e(uipo remoto.
J &,ecute AS".*&+ mediante una cuenta de dominio con pri/ile$ios m'nimos.
&ste comportamiento asume (ue los e(uipos cliente y ser/idor se hallan en los
mismos dominios de confian1a.

M+s in&ormaci,n
"ara obtener m#s informaci%n acerca de c%mo confi$urar una cuenta de proceso
AS".*&+, consulte KC%mo crear una cuenta personali1ada para e,ecutar AS".*&+K
en la secci%n de referencia de este manual.
Utilizar un comonente re/isado
"uede utili1ar un componente re/isado (ue no est- funcionando, y (ue se haya
confi$urado para e,ecutarse como identidad fi,a, para obtener acceso a los recursos
de red. &ste enfo(ue (ueda refle,ado en la ilustraci%n 5.E.
!nsert "gure: Net0or+ Access 0it- Ser&iced Components.gi'(
4lustraci%n 5.E
$so de un co"ponente revisado que no est% &uncionando' y que se (aya
confgurado para e)ecutarse co"o identidad f)a' para o*tener acceso a los
recursos de red.
&l hecho de utili1ar un componente re/isado (ue no est- en funcionamiento :en una
aplicaci%n ser/idor de Ser/icios &mpresariales; reporta los si$uientes beneficios8
J 3lexibilidad en t-rminos de la identidad utili1ada. *o se conf'a .nicamente en
la identidad AS".*&+.
J "osibilidad de aislar el c%di$o de confian1a o con mayores pri/ile$ios de la
aplicaci%n )eb principal.
J =n salto de proceso adicional aumenta el ni/el desde el punto de /ista de la
se$uridad. As' resulta m#s dif'cil (ue un intruso pueda cru1ar el l'mite del
proceso y pasar a un proceso con pri/ile$ios aumentados.
J Si necesita combinar la suplantaci%n manual con llamadas a la A"4
.ogonUser, lo puede hacer en un proceso independiente de la aplicaci%n )eb
principal.
Nota: para llamar .ogonUser es preciso (ue la cuenta de proceso de
Ser/icios &mpresariales ten$a concedido el pri/ile$io OActuar como parte del
sistema operati/oP. Aumentar los pri/ile$ios de un proceso independiente de la
aplicaci%n )eb es un problema de se$uridad menor.
Utilizar la cuenta an,nima de usuario de !nternet
"uede utili1ar la cuenta an%nima de usuario de 4nternet para obtener acceso a los
recursos de red si 44S est# confi$urado para la autenticaci%n an%nima. ]ste es el
caso si se da al$una de estas dos condiciones8
J 7a aplicaci%n es compatible con el acceso an%nimo.
J 7a aplicaci%n utili1a la autenticaci%n mediante 3ormularios, de "assport o
personali1ada :cuando 44S est# confi$urado para el acceso an%nimo;.

Para utilizar la cuenta an,nima ara el acceso a recursos remotos
6. Confi$ure 44S para la autenticaci%n an%nima. "uede confi$urar el modo de
autenticaci%n de AS".*&+ en )indo2s, mediante 3ormularios, "assport o
nin$una en funci%n de los re(uisitos de autenticaci%n de la aplicaci%n.
. Confi$ure AS".*&+ para la suplantaci%n. =tilice la si$uiente confi$uraci%n del
archi/o )eb.confi$8
<identity impersonate="true" />
?. Confi$ure la cuenta an%nima como una cuenta de dominio con pri/ile$ios
m'nimos.
^ O bien ^
Dupli(ue la cuenta an%nima mediante el mismo nombre de usuario y
contraseQa del e(uipo remoto. &ste enfo(ue resulta necesario cuando se
reali1an llamadas a tra/-s de dominios (ue no son de confian1a o de
ser/idores de se$uridad (ue no tienen abiertos los puertos necesarios para
ofrecer compatibilidad con la autenticaci%n de )indo2s.
"ara $aranti1ar la compatibilidad con este enfo(ue tambi-n es preciso8
a. =tili1ar el Administrador de ser/icios de 4nternet para desacti/ar la casilla
de /erificaci%n Permitir que !!S controle la contraseEa para la cuenta
an%nima.
Si selecciona esta opci%n, la sesi%n de inicio creada con la cuenta
an%nima especificada terminar# con las credenciales de red *=77 :por lo
(ue no podr# utili1arse para obtener acceso a los recursos de red;. Si no
selecciona esta opci%n, la sesi%n de inicio ser# una sesi%n de inicio
interacti/a con las credenciales de red.
b. &stablecer las credenciales de la cuenta tanto en el administrador de
usuarios como en el administrador de ser/icios de 4nternet.

!mortante: si utili1a la suplantaci%n para la cuenta an%nima :por e,emplo,
4=S0>MAC94*&;, ser# necesario prote$er los recursos con esta cuenta :mediante
las listas AC7 confi$uradas correctamente;. 7os recursos a los (ue precisa obtener
acceso la aplicaci%n deben disponer de acceso de lectura :como m'nimo; a la
cuenta an%nima. &l resto de los recursos deber'an dene$ar el acceso a la cuenta
an%nima.
Alo3ar /arias alicaciones (e%
"uede utili1ar una cuenta an%nima de usuario de 4nternet para cada ra'1 /irtual del
sitio )eb. &n un entorno alo,ado, este enfo(ue permite reali1ar por separado tareas
como autori1ar, reali1ar un se$uimiento y efectuar auditor'as de solicitudes (ue se
ori$inan en aplicaciones )eb independientes. &ste enfo(ue (ueda refle,ado en la
ilustraci%n 5.H.
!nsert "gure: C#$8 % ASPNET !mpersonation % 1ultiple Anon Accounts.gi'(
4lustraci%n 5.H
Suplantacin de cuentas anni"as de usuario de Internet independientes para
cada aplicacin +v,dir-
Para con&igurar la cuenta an,nima de usuario de !nternet ara un
directorio /irtual esec'&ico
6. 4nicie el Administrador de ser/icios de !nternet desde el $rupo de
pro$ramas "erramientas administrati/as.
. Seleccione el directorio /irtual (ue desee confi$urar, ha$a clic con el bot%n
secundario del mouse :rat%n; y ha$a clic en Proiedades.
?. 9a$a clic en la pestaQa Seguridad de directorios.
@. 9a$a clic en la opci%n Modi&icar del $rupo Control de autenticaci,n $
acceso an,nimo.
A. Seleccione Acceso an,nimo y, a continuaci%n, ha$a clic en Modi&icar.
E. &scriba el nombre de usuario y la contraseQa de la cuenta (ue desee (ue
utilice 44S cuando los usuarios an%nimos se conecten al sitio.
H. Ase$.rese de (ue la opci%n Permitir que !!S controle la contraseEa *O est-
seleccionada.

Utilizar la AP! .ogonUser $ la sulantaci,n ara una
identidad de (indo)s esec'&ica
Se puede suplantar una identidad espec'fica mediante la confi$uraci%n de los
atributos de nombre de usuario y contraseQa del elemento Fidentit$G del archi/o
)eb.confi$, o bien llamando la A"4 .ogonUser de )in?B desde el c%di$o de la
aplicaci%n.

!mortante: estos enfo(ues no son recomendables. Deber'an e/itarse en
ser/idores )indo2s !!!, por(ue obli$an a conceder a la cuenta del proceso
AS".*&+ el pri/ile$io OActuar como parte del sistema operati/oP. Como
consecuencia, se reduce notablemente la se$uridad de la aplicaci%n )eb.
&sta restricci%n de,ar# de existir en )indo2s Ser/er !!?.
Utilizar el llamador original
"ara utili1ar la identidad del llamador ori$inal para el acceso a los recursos remotos
es preciso dele$ar el contexto de se$uridad del llamador desde el ser/idor )eb al
e(uipo remoto.
Ad/ertencia 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, se producir#
un efecto importante en la capacidad de escalabilidad de la aplicaci%n debido a
(ue la a$rupaci%n de conexiones de la base de datos de,ar# de ser efecti/a. &l
contexto de se$uridad de las conexiones de bases de datos es diferente para cada
usuario.
7os es(uemas de autenticaci%n (ue se indican acto se$uido son compatibles con la
dele$aci%n8
J Aer%eros. Si desea obtener m#s informaci%n, consulte KC%mo implementar la
dele$aci%n <erberos para )indo2s !!!K en la secci%n de referencia de este
manual.
J Certi&icados de cliente asignados a cuentas de (indo)s. 7a asi$naci%n
debe lle/arla a cabo 44S.
J 6+sica. 7a autenticaci%n b#sica es compatible con el acceso a los recursos
remotos por(ue las credenciales del llamador ori$inal est#n disponibles en
formato de texto sin cifrar en el ser/idor )eb. Adem#s, pueden utili1arse para
responder a los desaf'os de autenticaci%n de los e(uipos remotos.
Debe recurrirse a la autenticaci%n b#sica cuando se utilice una sesi%n
interacti/a o de inicio de sesi%n por lotes. &l tipo de sesi%n de inicio resultante
de la autenticaci%n b#sica puede confi$urarse en la metabase de 44S. Si desea
obtener m#s informaci%n, consulte el art'culo "latform SD<8 4nternet
4nformation Ser/ices A.6 :en in$l-s; en MSD*.

!mortante: la autenticaci%n b#sica constituye el enfo(ue menos se$uro de
todos los compatibles con la dele$aci%n. &l moti/o es la transferencia del
nombre de usuario y la contraseQa en formato de texto sin cifrar del explorador
al ser/idor a tra/-s de la red y su almacenamiento en la cach- del ser/idor
)eb. "uede utili1ar SS7 para prote$er las credenciales durante su
transferencia, pero deber'a e/itarse en la medida de lo posible almacenar en
la memoria cach- del ser/idor )eb las credenciales en formato de texto sin
cifrar.
Para utilizar el llamador original ara el acceso a recursos remotos
6. Confi$ure 44S para la autenticaci%n de )indo2s inte$rada :<erberos;,
mediante certificados :con asi$naci%n de certificados de 44S; o b#sica.
. Confi$ure AS".*&+ para la autenticaci%n de )indo2s y la suplantaci%n.
<authentication mode="Window" />
<identity impersonate="true" />
?. Si utili1a la dele$aci%n <erberos, confi$ure las cuentas de Acti/e Directory para
la dele$aci%n.

M+s in&ormaci,n
J "ara obtener m#s informaci%n acerca de la confi$uraci%n de la dele$aci%n
<erberos, consulte KC%mo implementar la dele$aci%n <erberos para )indo2s
!!!K en la secci%n de referencia de este manual.
J Si desea obtener m#s informaci%n acerca de la asi$naci%n de certificados 44S,
consulte http8LL222.microsoft.comLtechnetLtree/ie2Ldefault.aspX
urlWLtechnetLprodtechnolLadL2indo2s!!!Lho2toLmapcerts.asp. :en in$l-s;
J "ara obtener m#s informaci%n acerca de la suplantaci%n de AS".*&+, consulte
el art'culo .*&+ 3rame2ork De/elopers Vuide :en in$l-s; de MSD*.
-%tener acceso a archi/os de un recurso comartido de
archi/os UNC
Si su aplicaci%n necesita obtener acceso a archi/os de un recurso compartido de
archi/os =*C :Con/enci%n de nomenclatura uni/ersal; mediante AS".*&+, es
importante a$re$ar permisos *+3S a la carpeta de recurso compartido. +ambi-n
deber# establecer los permisos del recurso compartido para conceder como m'nimo
acceso de lectura a la cuenta de proceso AS".*&+ o a la identidad suplantada :si la
aplicaci%n se ha confi$urado para la suplantaci%n;.
-%tener acceso a recursos de red distintos de (indo)s
Si la aplicaci%n necesita obtener acceso a recursos (ue no sean de )indo2s, tales
como bases de datos de plataformas distintas de )indo2s o aplicaciones de $ran
sistema, deber# considerar los si$uientes aspectos8
J 7os e(uipos selectores y l'mites de confian1a asociados al recurso.
J 7as credenciales necesarias para la autenticaci%n.
J *ecesidad de (ue el recurso cono1ca la identidad del llamador ori$inal o si la
aplicaci%n (ue efect.a la llamada es de confian1a :mediante un proceso o
identidad de ser/icio fi,os;.
J Costo de rendimiento asociado a las conexiones (ue se establecen. Si el costo
es importante (ui1#s necesite implementar una a$rupaci%n de conexionesI por
e,emplo, mediante la funci%n de a$rupaci%n de ob,etos de Ser/icios
&mpresariales.

Si el recurso necesita poder autenticar el llamador ori$inal :y no existe la opci%n de
autenticaci%n de )indo2s;, dispondr# de las si$uientes opciones8
J "asar las credenciales mediante par#metros :llamada de m-todo;.
J "asar las credenciales de una cadena de conexi%n. =tilice SS7 o 4"Sec para
prote$er las credenciales de texto sin cifrar (ue se transfieren a tra/-s de la
red.
Almacene las credenciales de forma se$ura en la aplicaci%n, por e,emplo
mediante D"A"4. "ara obtener m#s informaci%n acerca de c%mo almacenar de
forma se$ura cadenas de conexi%n a bases de datos, consulte KAlmacenar
cadenas de conexi%n a bases de datos de forma se$uraK en el cap'tulo 6,
KSe$uridad del acceso a datosK.
J =tilice un almac-n de datos centrali1ado para la autenticaci%n al (ue puedan
obtener acceso ambas plataformasI por e,emplo, un directorio 7DA".
Comunicaci,n segura
=tilice SS7 para prote$er el enlace de comunicaci%n entre el explorador y el ser/idor
)eb. SS7 proporciona confidencialidad e inte$ridad para los mensa,es. =tilice SS7 o
4"Sec para disponer de un canal se$uro entre el ser/idor )eb y el ser/idor de
aplicaciones o bases de datos.
M+s in&ormaci,n
"ara obtener m#s informaci%n acerca de la comunicaci%n se$ura, consulte el
cap'tulo @, KComunicaci%n se$uraK.
Almacenar secretos
&s habitual (ue las aplicaciones )eb necesiten almacenar secretos. &sta necesidad
debe prote$erse ante administradores (ue no son de confian1a y usuarios )eb
malintencionados como, por e,emplo8
J Administradores que no son de con&ianza. 7os administradores y otros
usuarios sin escr.pulos no deber'an poder /er informaci%n pri/ile$iada. "or
e,emplo, el administrador del ser/idor )eb no deber'a poder leer la contraseQa
de una cuenta de inicio de sesi%n SC7 Ser/er de un e(uipo SC7 Ser/er
ubicado en la red.
J Usuarios (e% malintencionados. Aun(ue existen componentes :como
FileAuthorizationModule; (ue e/itan (ue los usuarios obten$an acceso a los
archi/os con pri/ile$ios, para a(uellos casos en los (ue un intruso pueda lle$ar
a obtener acceso a un archi/o de confi$uraci%n, el secreto del archi/o no
deber'a incluirse en texto sin cifrar.

A continuaci%n fi$uran al$unos e,emplos habituales de secretos8
J Cadenas de cone#i,n de SF.. =n error habitual consiste en almacenar el
nombre de usuario y la contraseQa en formato de texto sin cifrar. "or ello, es
recomendable utili1ar la autenticaci%n de )indo2s en /e1 de la autenticaci%n
de SC7. Si no puede utili1ar la autenticaci%n de )indo2s, consulte las
si$uientes secciones del cap'tulo 6, KSe$uridad del acceso a datos,K (ue
constituyen alternati/as se$uras8
J KAlmacenar cadenas de conexi%n a bases de datos de forma se$uraK
J KComunicaci%n se$uraK

J Credenciales utilizadas ara las &unciones de alicaci,n de SF.. 7as
funciones de aplicaci%n de SC7 deben acti/arse con un procedimiento
almacenado (ue precisa el nombre de la funci%n y la contraseQa asociada.
"ara obtener m#s informaci%n, consulte la secci%n KAutori1aci%nK del cap'tulo
6, KSe$uridad del acceso a datosK.
J !dentidades &i3as de (e%.con&ig. "or e,emplo8
<identity impersonate=true userName="bob" password="inClearText"/>
&n .*&+ 3rame2ork /ersi%n 6.6, AS".*&+ ofrecer# la posibilidad de cifrar el
nombre de usuario y la contraseQa y almacenarlos de forma se$ura en la cla/e
del re$istro.
J !dentidad del roceso de Machine.con&ig. "or e,emplo8
<process userName="cUsTuMUzerName" password=kUsTumPazzWerD >
De forma predeterminada, AS".*&+ administra el uso del nombre de usuario
KMachineK y de la contraseQa KAutoVenerateK.
&n .*&+ 3rame2ork /ersi%n 6.6, AS".*&+ ofrecer# la posibilidad de cifrar el
nombre de usuario y la contraseQa y almacenarlos de forma se$ura en la cla/e
del re$istro.
J Cla/es utilizadas ara almacenar datos de &orma segura. &s imposible
almacenar cla/es de forma se$ura en el soft2are. *o obstante, existen
al$unas tareas (ue permiten reducir este ries$o. =n e,emplo consiste en crear
un controlador de secci%n de confi$uraci%n personali1ada (ue utilice un cifrado
asim-trico para cifrar una cla/e de sesi%n. 7a cla/e de sesi%n puede
almacenarse en un archi/o de confi$uraci%n.
J Estado de sesi,n de SF. Ser/er. "ara utili1ar SC7 Ser/er para administrar
el estado de sesi%n de la aplicaci%n )eb de AS".*&+, utilice la si$uiente
confi$uraci%n para el archi/o )eb.confi$.
<sessionState stateConnectionString=tcpip=127.0.0.1:42424
sqlConnectionString=data source=127.0.0.1;
user id=UserName;password=MyPassword />
&n .*&+ 3rame2ork 6.6, AS".*&+ incluir# la capacidad de cifrar esta
informaci%n.
J ContraseEas utilizadas ara la autenticaci,n mediante Formularios con
una %ase de datos.
Si su aplicaci%n /alida las credenciales de autenticaci%n con una base de
datos, no almacene las contraseQas en la base de datos. =tilice un al$oritmo
hash de la contraseQa con un /alor salt y compare los hash.
"ara obtener m#s informaci%n, consulte KAutenticar usuarios en una base de
datosK en el cap'tulo 6, KSe$uridad del acceso a datosK.
-ciones ara almacenar secretos en ASP.NET
7os desarrolladores de aplicaciones )eb .*&+ tienen a su disposici%n una serie de
enfo(ues distintos para almacenar secretos. &ntre dichos m%dulos fi$uran8
J Clases de critogra&'a de .NET. .*&+ 3rame2ork incluye clases (ue pueden
utili1arse para el cifrado y el descifrado. &stos enfo(ues precisan almacenar
de forma se$ura la cla/e de cifrado.
J AP! de rotecci,n de datos 0@PAP!2. D"A"4 est# formada por un par de A"4
de )in? (ue cifran y descifran datos mediante una cla/e obtenida a partir de
la contraseQa del usuario. &l uso de D"A"4 permite poder despreocuparse de
la administraci%n de cla/es. &s el sistema operati/o el (ue administra la cla/e,
(ue es la contraseQa del usuario.
J Cadenas constructoras C-M1. Si la aplicaci%n utili1a componentes
re/isados, puede almacenar el secreto en una cadena de construcci%n de
ob,etos. 7a cadena se almacena en el cat#lo$o COMS en formato de texto sin
cifrar.
J CAP!C-M. Ob,eto de Microsoft COM (ue ofrece acceso basado en COM a la
Crypto A"4 subyacente.
J Cr$to AP!. Con,unto de A"4 de )in? de ni/el inferior (ue e,ecutan cifrado y
descifrado.
M+s in&ormaci,n
Si desea obtener m#s informaci%n, consulte la entrada de Crypto$raphy, CryptoA"4
and CA"4COM :en in$l-s; en la "latform SD< de MSD*.
Posi%ilidad de almacenar secretos en archi/os de
/olGmenes l,gicos indeendientes
"lant-ese la posibilidad de instalar directorios de aplicaciones )eb en /ol.menes
l%$icos independientes del sistema operati/o :por e,emplo, &8 en lu$ar de C8;. &sto
si$nifica (ue Machine.confi$ :ubicado en C8R)4**+RMicrosoft.*&+; y probablemente
otros archi/os (ue contienen secretos, como pueden ser los archi/os =D7 :=ni/ersal
Data 7ink;, se ubican en /ol.menes l%$icos independientes de los directorios de la
aplicaci%n )eb.
7a l%$ica de este enfo(ue consiste en e/itar la posible canoni1aci%n y errores
trans/ersales de directorio debido a8
J &rrores de canoni1aci%n de archi/os (ue pueden exponer los archi/os de las
carpetas de la aplicaci%n )eb.
Nota8 las rutinas de canoni1aci%n de archi/os recuperan la forma can%nica de
la ruta de acceso de los archi/os. Suele ser el nombre completo de la ruta de
acceso en el (ue se han resuelto todas las referencias relati/as y referencias
al directorio actual.
J &rrores trans/ersales de directorio (ue pueden exponer los archi/os de otras
carpetas del mismo /olumen l%$ico.

+oda/'a no se han publicado errores de este tipo (ue hayan expuesto los archi/os de
otros /ol.menes l%$icos.
Proteger los estados de sesi,n $ /ista
7as aplicaciones )eb deben administrar /arios tipos de estados, incluidos el estado
de /ista y el estado de sesi%n. &n esta secci%n se describe la administraci%n se$ura
de estados para las aplicaciones )eb de AS".*&+.
Proteger el estado de /ista
Si la aplicaci%n )eb de AS".*&+ utili1a el estado de /ista8
J Varantice la inte$ridad del estado de /ista :para $aranti1ar (ue no se /ea
alterado de nin$.n modo durante la transferencia; estableciendo
ena%le8ie)StateMac en el /alor true, tal como se indica a continuaci%n. De
este modo, AS".*&+ $enera un c%di$o MAC :Message Authentication Code;
en el estado de /ista de la p#$ina cuando -sta se expone de nue/o desde el
cliente.
<% @ Page enableViewStateMac=true >
J Confi$ure el atributo /alidation del elemento FmachineAe$G del archi/o
Machine.confi$ para especificar el tipo de cifrado (ue debe utili1arse para la
/alidaci%n de los datos. +en$a en cuenta las si$uientes consideraciones8
J &l al$oritmo hash se$uro 6 :S9A6; $enera un tamaQo de hash superior al
de Messa$e Di$est A :MDA;, por lo (ue se considera m#s se$uro. Sin
embar$o, el estado de /ista prote$ido mediante S9A6 o MDA puede
descodificarse durante la transferencia o bien en el cliente y puede lle$ar a
/isuali1arse en formato de texto sin cifrar.
J =tilice ? Data &ncryption Standard :?D&S; para detectar cambios en el
estado de /ista, as' como para e,ecutar el cifrado durante la transferencia.
&n este estado, incluso si se lle$a a descodificar el estado de /ista, no
puede /isuali1arse en formato de texto sin cifrar.

Proteger las coo>ies
7as cookies (ue contienen datos de autenticaci%n o autori1aci%n, o cual(uier otro
tipo de datos importantes, deber'an prote$erse mediante SS7 para las
transferencias. 7a autenticaci%n mediante 3ormularios permite utili1ar el m-todo
FormsAuthentication.Encr$t para cifrar el /ale de autenticaci%n, (ue se transfiere
del cliente al ser/idor por medio de una cookie.
Proteger el estado de sesi,n de SF.
&l controlador de estado de sesi%n de AS".*&+ predeterminado :en proceso;
presenta al$unas limitaciones. "or e,emplo, no puede funcionar entre /arios e(uipos
de bater'as de ser/idores )eb. "ara superar esta limitaci%n, AS".*&+ permite
almacenar los estados de sesi%n en una base de datos SC7 Ser/er.
&l estado de sesi%n de SCl puede confi$urarse en los archi/os Machine.confi$ o
)eb.confi$. A continuaci%n se muestra la confi$uraci%n predeterminada del archi/o
Machine.confi$.
<sessionState mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
stateNetworkTimeout="10"
sqlConnectionString="data source=127.0.0.1;user id=sa;password="
cookieless="false" timeout="20"/>
De forma predeterminada, la secuencia de comandos 4nstallS(lState.s(l de SC7,
utili1ada para crear la base de datos para el estado de sesi%n de SC7 se instala en8
C:\WINNT\Microsoft.NET\Framework\v1.0.3705
&l uso del estado de sesi%n de SC7 pro/oca dos problemas8
J Debe prote$erse la cadena de conexi%n a la base de datos.
J Debe prote$erse el estado de sesi%n durante su transferencia por la red.

Proteger la cadena de cone#i,n a %ases de datos
Si utili1a la autenticaci%n de SC7 para conectarse al ser/idor, la informaci%n del 4d.
del usuario y la contraseQa se almacena en el archi/o )eb.confi$ en formato de
texto sin cifrar, como se muestra a continuaci%n8
<sessionState
cookieless="false"
timeout="20"
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString=
"data source=127.0.0.1;user id=UserName;password=ClearTxtPassword" />
De forma predeterminada, "ttFor%idden"andler e/ita (ue se descar$uen los
archi/os de confi$uraci%n. Sin embar$o, cual(uier usuario (ue dispon$a de acceso
directo a las carpetas (ue almacenan los archi/os de confi$uraci%n puede /er el
nombre de usuario y la contraseQa. "or ello, resulta m#s aconse,able utili1ar la
autenticaci%n de )indo2s en /e1 de la autenticaci%n de SC7.
Para utilizar la autenticaci,n de (indo)sH uede utilizar la identidad del
roceso ASP.NET 0que suele ser ASPNET2.
6. Cree una cuenta duplicada :con el mismo nombre de usuario y contraseQa; en
la base de datos del ser/idor.
. Cree un inicio de sesi%n SC7 para la cuenta.
?. Cree un usuario de base de datos nue/o en la base de datos ASPState y
as'$nele el inicio de sesi%n SC7.
7a base de datos ASPState se crea con la secuencia de comandos
4nstallSC7State.s(l.
A. Cree una nue/a funci%n de base de datos definida por el usuario y a$re$ue el
usuario de base de datos a la funci%n.
E. Confi$ure permisos de la base de datos para la funci%n de base de datos.

Si lo desea, puede cambiar la cadena de conexi%n para utili1ar una conexi%n de
confian1a, como se muestra acto se$uido8
sqlConnectionString="server=127.0.0.1;
database=StateDatabase;
Integrated Security=SSPI;"
Proteger el estado de sesi,n en la red
Cui1#s necesite prote$er el estado de sesi%n durante su transferencia a tra/-s de la
red hasta la base de datos SC7 Ser/er. Dicha necesidad depende del ni/el de
se$uridad del alo,amiento de red para el ser/idor )eb y el ser/idor de datos. Si la
base de datos est# prote$ida f'sicamente en un entorno de confian1a, es posible (ue
pueda prescindir de esta medida de se$uridad adicional.
"uede utili1ar 4"Sec para prote$er todo el tr#fico 4" existente entre los ser/idores
)eb y SC7 Ser/erI asimismo, tambi-n puede utili1ar SS7 para prote$er el enlace
con SC7 Ser/er. &ste enfo(ue ofrece la opci%n de cifrar .nicamente la conexi%n
utili1ada para el estado de sesi%n, no todo el tr#fico (ue fluye entre los e(uipos.
M+s in&ormaci,n
J "ara obtener m#s informaci%n acerca de c%mo confi$urar el estado de sesi%n
de SC7, consulte el art'culo C?6HE!@, K9O) +O8 Confi$ure SC7 Ser/er to
Store AS".*&+ Session StateK :en in$l-s; en la Microsoft <no2led$e Nase.
J "ara obtener m#s informaci%n acerca de c%mo utili1ar SS7 para SC7 Ser/er,
consulte KC%mo utili1ar SS7 para proporcionar comunicaciones se$uras con
SC7 Ser/er !!!K en la secci%n de referencia de este manual.
J "ara obtener m#s informaci%n acerca del uso de 4"Sec, consulte KC%mo
utili1ar 4"Sec para $aranti1ar una comunicaci%n se$ura entre dos ser/idoresK
en la secci%n de referencia de este manual.

Consideraciones acerca de las %ater'as de
ser/idores (e%
7os escenarios de bater'as de ser/idores )eb no ofrecen $arant'a de (ue solicitudes
sucesi/as de un mismo cliente reciban ser/icio del mismo ser/idor )eb. &sto podr'a
tener implicaciones para la administraci%n del estado y para cual(uier cifrado (ue se
base en los atributos del elemento FmachineAe$G del archi/o Machine.confi$.
Estado de sesi,n
&l control de estados de sesi%n en proceso predeterminado de AS".*&+ :(ue refle,a
la funcionalidad anterior de AS"; da lu$ar a la afinidad de ser/idores y no puede
utili1arse en escenarios de bater'as de ser/idores )eb. 7as implementaciones de
bater'as de ser/idores )eb exi$en un almacenamiento externo al proceso sea en el
ser/icio de estado de AS".*&+ sea en una base de datos SC7 Ser/er, como se ha
descrito anteriormente.
Nota: el estado de la aplicaci%n no es de confian1a para almacenar los contadores
$lobales o los /alores exclusi/os de escenarios de bater'as de ser/idores )eb :la
aplicaci%n )eb confi$urada para e,ecutarse en /arios ser/idores; o bos(ue )eb
:aplicaci%n )eb confi$urada para e,ecutarse en /arios procesadores; por(ue el
estado de la aplicaci%n no se puede compartir entre /arios procesos o e(uipos.
@PAP!
D"A"4 puede funcionar bien con el almac-n del e(uipo o del usuario :(ue re(uiere
un perfil de usuario car$ado;. Si utili1a D"A"4 con el almac-n del e(uipo, la cadena
cifrada es espec'fica de un e(uipo determinado y, por lo tanto, es necesario $enerar
los datos cifrados en cada e(uipo. *o copie los datos cifrados de un e(uipo a otro de
una bater'a de ser/idores )eb o cl.ster.
Si se utili1a D"A"4 con el almac-n del usuario, puede descifrar los datos en cual(uier
e(uipo (ue dispon$a de un perfil de usuario itinerante.
M+s in&ormaci,n
"ara obtener m#s informaci%n acerca de D"A"4, consulte el cap'tulo 6, KSe$uridad
del acceso a datos.K
Utilizar la autenticaci,n mediante Formularios en una
%ater'a de ser/idores (e%
Si utili1a la autenticaci%n mediante 3ormularios, resulta fundamental (ue todos los
ser/idores de la bater'a de ser/idores )eb compartan una cla/e de e(uipo, (ue se
utili1a para el cifrado, descifrado y la /alidaci%n del /ale de autenticaci%n.
7a cla/e de e(uipo se almacena en el elemento FmachineAe$G del archi/o
Machine.confi$. Se muestra la confi$uraci%n predeterminada a continuaci%n.
<machineKey validationKey="AutoGenerate"
decryptionKey="AutoGenerate"
validation="SHA1"/>
&sta confi$uraci%n pro/oca (ue cada e(uipo $enere una cla/e de /alidaci%n y
descifrado distinta. &s necesario cambiar el elemento FmachineAe$G e incluir
/alores de cla/e comunes en todos los ser/idores de la bater'a de ser/idores )eb.
El elemento BmachineAe$C
&l elemento FmachineAe$G ubicado en el archi/o Machine.confi$ se utili1a para
confi$urar las cla/es empleadas para el cifrado y el descifrado de los datos de la
cookie de autenticaci%n mediante 3ormularios y del estado de /ista.
Cuando se llaman los m-todos FormsAuthentication.Encr$t o
FormsAuthentication.@ecr$t, y cuando se crea o recupera el estado de /ista, se
consultan los /alores del elemento FmachineAe$G.
<machineKey validationKey="autogenerate|value"
decryptionKey="autogenerate|value"
validation="SHA1|MD5|3DES" />
El atri%uto /alidationAe$
&l /alor del atributo /alidationAe$ se utili1a para crear y /alidar c%di$os MAC del
estado de /ista y los /ales de autenticaci%n mediante 3ormularios. &l atributo de
/alidaci%n determina el al$oritmo (ue debe utili1arse para la creaci%n del c%di$o
MAC. +en$a en cuenta las si$uientes consideraciones8
J Al utili1ar la autenticaci%n mediante 3ormularios, esta cla/e funciona ,unto con
el atributo F&ormsG rotection. Si se establece el atributo de protecci%n en
8alidation y se llama el m-todo FormsAuthentication.Encr$t, se utili1ar#n
el /alor del /ale y /alidationAe$ para calcular el c%di$o MAC (ue debe
ad,untarse a la cookie. Cuando se llama el m-todo
FormsAuthentication.@ecr$t, el c%di$o MAC se calcula y compara con el
c%di$o MAC (ue se ad,unta al /ale.
J Con el estado de /ista se utili1an el /alor del estado de /ista de un control y
/alidationAe$ para calcular el c%di$o MAC, (ue se ad,unta al estado de /ista.
Cuando se expone de nue/o el estado de /ista desde el cliente, se /uel/e a
calcular el c%di$o MAC y se compara con el MAC ad,unto al estado de /ista.

El atri%uto decr$tionAe$
&l /alor del atributo decr$tionAe$ se utili1a para cifrar y descifrar /ales de
autenticaci%n mediante 3ormularios y estados de /ista. &n cuanto a al$oritmos, se
utili1an D&S o +riple D&S :?D&S;. &l al$oritmo exacto depende de si se ha instalado
el pack de cifrado alto de )indo2s !!!. Si est# instalado se utili1ar# ?D&SI de lo
contrario, D&S. +en$a en cuenta las si$uientes consideraciones8
J Al utili1ar la autenticaci%n mediante 3ormularios, esta cla/e funciona ,unto con
el atributo F&ormsG rotection. Si se establece el atributo rotection en el
/alor Encr$tion, y se llaman los m-todos FormsAuthentication.Encr$t o
@ecr$t, el /alor del /ale se cifra o descifra con el /alor decr$tionAe$
especificado.
J Al utili1ar la /ista de estado, el /alor de un estado de /ista de controles se cifra
mediante el /alor decr$tionAe$ cuando se en/'a al cliente y se descifra
cuando el cliente /uel/e a exponer los datos en el ser/idor.

El atri%uto 8alidation
&ste atributo determina el al$oritmo (ue debe utili1arse para la /alidaci%n, el cifrado
o el descifrado. "uede adoptar los /alores S9A6, MDA o ?D&S. Dichos /alores se
describen a continuaci%n8
J S"AI. &l al$oritmo 9MACS9A6 se utili1a cuando la confi$uraci%n es S9A6.
Venera un al$oritmo hash de 6E! bits :! bytes; o un compendio de la
entrada. 9MACS9A6 es un al$oritmo hash de cla/es. 7a cla/e utili1ada como
entrada para este al$oritmo se especifica mediante el atributo /alidationAe$.
S9A6 es un al$oritmo de $ran aceptaci%n por su mayor tamaQo de compendio
en comparaci%n con otros al$oritmos.
J M@;. Venera un al$oritmo hash de ! bytes mediante el al$oritmo MDA.
J J@ES. Cifra los datos mediante el al$oritmo +riple D&S :?D&S;.
Nota: cuando el atributo de /alidaci%n se establece en ?D&S, no se utili1a
para la autenticaci%n mediante 3ormularios. &n ese caso se utili1a S9A6.
M+s in&ormaci,n
J Si desea obtener m#s informaci%n acerca de c%mo crear las cla/es adecuadas
e incluirlas en el archi/o Machine.confi$, consulte el art'culo C?6T!E, K9O)
+O8 Create <eys 2L CY .*&+ for =se in 3orms AuthenticationK :en in$l-s; de la
Microsoft <no2led$e Nase.
J "ara obtener m#s informaci%n acerca del pa(uete de cifrado alto de )indo2s
!!!, consulte
http8LL222.microsoft.comL2indo2s!!!Ldo2nloadsLrecommendedLencryptionL
:en in$l-s;.

Resumen
&n este cap'tulo se describen una serie de t-cnicas y enfo(ues para la protecci%n de
aplicaciones )eb de AS".*&+. Muchos de los conse,os y las recomendaciones de
este cap'tulo tambi-n pueden resultar .tiles para desarrollar ser/icios )eb AS".*&+
y ob,etos *&+ 0emotin$ alo,ados en AS".*&+. &n resumen8
Si su aplicaci%n utili1a la autenticaci%n mediante 3ormularios y el rendimiento es
un aspecto (ue no se desea descuidar a la hora de autenticar los usuarios,
recupere una lista de funciones y almac-nela en el /ale de autenticaci%n.
J Si utili1a la autenticaci%n mediante 3ormularios, cree siempre un ob,eto
principal y $u#rdelo en el contexto de cada solicitud.
J Si existen demasiadas funciones para almacenar en la cookie de
autenticaci%n, utilice la memoria cach- $lobal de la aplicaci%n para almacenar
las funciones.
J *o cree una cuenta con pri/ile$ios m'nimos personali1ada para e,ecutar
AS".*&+. &n su lu$ar, cambie la contraseQa de la cuenta de AS"*&+ y cree
una cuenta duplicada en cual(uier ser/idor )indo2s remoto al (ue deba
obtener acceso la aplicaci%n.
J Si debe crear una cuenta personali1ada para e,ecutar AS".*&+, utilice el
principio de los pri/ile$ios m'nimos. "or e,emplo8
J =tilice una cuenta de dominio con pri/ile$ios m'nimos si la administraci%n
es un problema importante.
J Si utili1a una cuenta local, cree una cuenta duplicada en cual(uier e(uipo
remoto al (ue debe obtener acceso la aplicaci%n )eb. =tilice cuentas
locales cuando la aplicaci%n necesite obtener acceso a recursos ubicados
en dominios (ue no son de confian1a, o si un ser/idor de se$uridad impide
la autenticaci%n de )indo2s.
J *o e,ecute AS".*&+ mediante la cuenta S4S+&MA local.
J *o conceda a la cuenta AS"*&+ el pri/ile$io OActuar como parte del
sistema operati/oP.
J =tilice SS7 si8
J Se transfiere informaci%n importante de se$uridad entre el explorador y el
ser/idor )eb.
J Se utili1a la autenticaci%n b#sica :para prote$er las credenciales;.
J Se utili1a la autenticaci%n mediante 3ormularios para la autenticaci%n :a
diferencia de la personali1aci%n;.
J &/ite almacenar secretos en formato de texto sin cifrar.

También podría gustarte