<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Yo sólo pasaba por aquí pero ya que estoy....</title><subtitle type="html">Blog de Ibon Landa - MVP Windows Azure</subtitle><id>http://geeks.ms/blogs/ilanda/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.ms/blogs/ilanda/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.ms/blogs/ilanda/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2012-11-21T09:21:00Z</updated><entry><title>Cómo hacer uso del tenant de WAAD de Office 365 junto con ACS</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/05/16/c-243-mo-hacer-uso-del-tenant-de-waad-de-office-365-junto-con-acs.aspx" /><id>/blogs/ilanda/archive/2013/05/16/c-243-mo-hacer-uso-del-tenant-de-waad-de-office-365-junto-con-acs.aspx</id><published>2013-05-16T13:48:00Z</published><updated>2013-05-16T13:48:00Z</updated><content type="html">&lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/usando-acs-y-tokens-jwt-para-securizar-aplicaciones-web/" target="_blank"&gt;Cómo securizar aplicaciones web usando ACS y tokens JWT.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/desplegar-aplicaciones-web-en-windows-azure-websites-que-hagan-uso-de-wif" target="_blank"&gt;Desplegar aplicaciones web en Windows Azure WebSites que hagan uso de WIF.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/cmo-securizar-servicios-webapi-usando-acs-y-tokens-jwt" target="_blank"&gt;Cómo securizar servicios WebAPI usando ACS y tokens JWT.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/cmo-securizar-una-aplicacin-que-contenga-tanto-aplicaciones-web-como-servicios-webapi" target="_blank"&gt;Cómo securizar una aplicación MVC que contenga tanto aplicaciones web como servicios WebAPI.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/securizar-aplicaciones-web-usando-windows-azure-active-directory" target="_blank"&gt;Cómo securizar aplicaciones web usando Windows Azure Active Directory ( WAAD ).&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Cómo hacer uso del tenant de WAAD de Office 365 para securizar aplicaciones web con ACS. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Como ya comentaba en el post anterior, Office 365 hace uso de Windows Azure Active Directory para la autenticación, por lo que si posees ya una cuenta de Office 365 ya dispones de un tenant de WAAD para securizar tus aplicaciones.&lt;/p&gt;  &lt;p&gt;Si por ejemplo estás autenticado en tu subscripción de Office 365 y vas a &lt;a title="http://activedirectory.windowsazure.com" href="http://activedirectory.windowsazure.com"&gt;http://activedirectory.windowsazure.com&lt;/a&gt; podrás ver la información y configuración de tu tenant de WAAD, pero…¿Se puede ver dentro del portal de Windows Azure como veíamos en el post anterior?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS37_5F00_18306062.png"&gt;&lt;img title="DemoACS37" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DemoACS37" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS37_5F00_thumb_5F00_5CFC8496.png" width="964" height="609" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sí, se puede ver dentro del portal de Windows Azure, de dos maneras:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Creando una subscripción de Windows Azure asociada al administrador de la subscripción de Windows Azure.&lt;/li&gt;    &lt;li&gt;Llamando a centro de soporte para que asocien una subscripción que ya tenga con el usuario administrador de Office 365.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Una vez hecho uno de estos pasos, si estas autenticado en Office 365 con el usuario administrador y vamos al portal de Windows Azure, podremos ver el tenant de WAAD tal y como veíamos en el post anterior.&lt;/p&gt;  &lt;p&gt;Sea como sea, en este post vamos a ver cómo podemos usar el tenant de WAAD de Office 365 como un proveedor de identidad de ACS, para lo cuál no necesitamos que el tenant se vea en el portal de Windows Azure.&lt;/p&gt;  &lt;p&gt;¿Qué conseguimos con esto?&lt;/p&gt;  &lt;p&gt;Si configuramos este proveedor de identidad, podríamos securizar una aplicación web o WebAPI, tal y como ya hemos visto, desplegarlas en Windows Azure y usar los usuarios de Office 365 para autenticarse en todas las aplicaciones, con Single Sign On entre ellas claro.&lt;/p&gt;  &lt;p&gt;Si además nos encontramos en un escenario real corporativo, seguramente tendremos el Office 365 sincronizado con nuestro dominio corporativo, por lo que es una manera de usar nuestras credenciales corporativas para logearnos en cualquier aplicación, ya esté en Office 365 o desplegada directamente en Windows Azure.&lt;/p&gt;  &lt;p&gt;Desde el portal de Windows Azure, desde el namespace de ACS que hemos estado usando en el resto de ejemplo, añadiremos un nuevo proveedor de identidad de tipo “WS-Federation”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS49_5F00_45EE035A.png"&gt;&lt;img title="DemoACS49" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS49" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS49_5F00_thumb_5F00_44A96A7B.png" width="669" height="369" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;E indicaremos la URL dónde están los metadatos:&lt;/p&gt;  &lt;p&gt;&lt;a title="https://accounts.accesscontrol.windows.net/microsoftdevdiv.onmicrosoft.com/FederationMetadata/2007-06/FederationMetadata.xml" href="https://accounts.accesscontrol.windows.net/nombredeltenant.onmicrosoft.com/FederationMetadata/2007-06/FederationMetadata.xml"&gt;https://accounts.accesscontrol.windows.net/nombredeltenant.onmicrosoft.com/FederationMetadata/2007-06/FederationMetadata.xml&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS50_5F00_71522454.png"&gt;&lt;img title="DemoACS50" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS50" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS50_5F00_thumb_5F00_0FBC653E.png" width="887" height="472" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Así mismo, podremos configurar las diferentes aplicaciones para que usen los proveedores de identidad que queramos. Hasta ahora habíamos usado siempre Windows Live ID.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS51_5F00_152AD5E2.png"&gt;&lt;img title="DemoACS51" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS51" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS51_5F00_thumb_5F00_14526FF8.png" width="558" height="144" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Por último, tenemos que configurar el tenant de Office 365 para que permite conexiones del ACS para la autenticación.&lt;/p&gt;  &lt;p&gt;Para poder hacer esta configuración no tenemos interfaz de usuario y necesitamos hacer uso las “&lt;a href="http://technet.microsoft.com/en-us/library/jj151815.aspx" target="_blank"&gt;Windows Azure Active Directory Module for Windows Powershell&lt;/a&gt;” para poder lanzar estos comandos y realizar la configuración:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;connect-msolservice 
import-module msonlineextended –force 
$replyUrl = New-MsolServicePrincipalAddresses -Address &lt;span class="str"&gt;&amp;quot;https://[yournamespace].accesscontrol.windows.net/&amp;quot;&lt;/span&gt; 
New-MsolServicePrincipal -ServicePrincipalNames @(&lt;span class="str"&gt;&amp;quot;https://[yournamespace].accesscontrol.windows.net/&amp;quot;&lt;/span&gt;)  -DisplayName &lt;span class="str"&gt;&amp;quot;[displayName]&amp;quot;&lt;/span&gt; -Addresses $replyUrl&lt;/pre&gt;


&lt;ul&gt;&lt;/ul&gt;



&lt;p&gt;Y con estos pasos, ya podremos usar las credenciales que estuviéramos usando en Office 365 para autenticarnos.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS47_5F00_178457E0.png"&gt;&lt;img title="DemoACS47" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS47" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS47_5F00_thumb_5F00_1D5EFB79.png" width="694" height="470" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=209370" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="WIF" scheme="http://geeks.ms/blogs/ilanda/archive/tags/WIF/default.aspx" /><category term="Access Control" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Access+Control/default.aspx" /><category term="Windows Azure Active Directory" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure+Active+Directory/default.aspx" /></entry><entry><title>Securizar aplicaciones web usando Windows Azure Active Directory</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/05/14/securizar-aplicaciones-web-usando-windows-azure-active-directory.aspx" /><id>/blogs/ilanda/archive/2013/05/14/securizar-aplicaciones-web-usando-windows-azure-active-directory.aspx</id><published>2013-05-14T10:33:00Z</published><updated>2013-05-14T10:33:00Z</updated><content type="html">&lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/usando-acs-y-tokens-jwt-para-securizar-aplicaciones-web/" target="_blank"&gt;Cómo securizar aplicaciones web usando ACS y tokens JWT.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/desplegar-aplicaciones-web-en-windows-azure-websites-que-hagan-uso-de-wif" target="_blank"&gt;Desplegar aplicaciones web en Windows Azure WebSites que hagan uso de WIF.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/cmo-securizar-servicios-webapi-usando-acs-y-tokens-jwt" target="_blank"&gt;Cómo securizar servicios WebAPI usando ACS y tokens JWT.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/cmo-securizar-una-aplicacin-que-contenga-tanto-aplicaciones-web-como-servicios-webapi" target="_blank"&gt;Cómo securizar una aplicación MVC que contenga tanto aplicaciones web como servicios WebAPI.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Cómo securizar aplicaciones web usando Windows Azure Active Directory ( WAAD ). &lt;/li&gt;    &lt;li&gt;Cómo hacer uso del tenant de WAAD de Office 365 para securizar aplicaciones web con ACS.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Hasta ahora hemos visto varios ejemplos de securización de aplicaciones dónde siempre hemos hecho uso de Windows Azure Access Control. En este post hablaremos de &lt;strong&gt;Windows Azure Active Directory&lt;/strong&gt; el cuál puede usarse de forma independiente a ACS o como un proveedor de identidad más de ACS.&lt;/p&gt;  &lt;p&gt;Como en los ejemplos anteriores, partiremos de una aplicación ASP.NET MVC 4, en la cuál queremos incluir un mecanismo de seguridad basado en WAAD.&lt;/p&gt;  &lt;p&gt;Para ello, lo primero, necesitaremos crear a través del portal de Windows Azure un tenant de WAAD. Tened en cuenta que los tenant van asociados a los usuarios, no a la subscripción, y sólo se permite uno por usuario. Además, a día de hoy no se puede borrar una vez creado…&lt;/p&gt;  &lt;p&gt;Comentar que Office 365 usa WAAD, por lo que si ya tenéis una cuenta de Office 365 ya tenéis un tenant de WAAD que podrías usar, tal y como veremos en el siguiente post.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS38_5F00_7924B8B0.png"&gt;&lt;img title="DemoACS38" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS38" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS38_5F00_thumb_5F00_0309AA1C.png" width="926" height="270" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Desde este menú podremos crear nuestro tenant, indicando los datos del mismo.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS39_5F00_4FCD70B2.png"&gt;&lt;img title="DemoACS39" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS39" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS39_5F00_thumb_5F00_40B691D8.png" width="542" height="489" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez creado, podremos crear usuarios, usuarios que son los que usaremos para autenticarnos en la aplicación.&lt;/p&gt;  &lt;p&gt;Y si lo preferimos, podemos &lt;strong&gt;sincronizar el tenant&lt;/strong&gt; que acabamos de crear con un Active Directory que tengamos on-premise y así usar los mismos usuarios que tengamos ya creados. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS40_5F00_747E8829.png"&gt;&lt;img title="DemoACS40" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS40" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS40_5F00_thumb_5F00_6567A94F.png" width="846" height="258" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez que tenemos los usuarios, podemos dar de alta las aplicaciones que queremos securizar.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS43_5F00_5650CA75.png"&gt;&lt;img title="DemoACS43" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS43" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS43_5F00_thumb_5F00_69FDB409.png" width="646" height="459" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;e indicar el identificar único de la aplicación, como la URL dónde está desplegado. Si estamos probando en local la URL será algo como &lt;a title="http://localhost:29350/" href="http://localhost:29350/"&gt;http://localhost:29350/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS44_5F00_21CFF82D.png"&gt;&lt;img title="DemoACS44" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS44" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS44_5F00_thumb_5F00_79BD490D.png" width="639" height="462" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez hecho estos pasos iremos a la aplicación web y volveremos a hacer uso de la herramienta que nos permite configurar la seguridad basada en WIF.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS45_5F00_14896F1A.png"&gt;&lt;img title="DemoACS45" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS45" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS45_5F00_thumb_5F00_13B10930.png" width="485" height="131" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En este caso, indicaremos que queremos usar Windows Azure Active Directory, indicando el identificador único de la aplicación que hemos puesto anteriormente, así cómo la URL a los metadatos del STS. Esta URL se obtiene desde el portal de Windows Azure, dentro de la aplicación que hemos creado.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS46_5F00_12D8A346.png"&gt;&lt;img title="DemoACS46" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS46" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS46_5F00_thumb_5F00_438BAAF1.png" width="766" height="697" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS42_5F00_5B42E257.png"&gt;&lt;img title="DemoACS42" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS42" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS42_5F00_thumb_5F00_67D08F73.png" width="513" height="588" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Y una vez hecho estos pasos, si ejecutamos la aplicación (F5) veremos cómo se nos redirige a la página de login dónde deberemos introducir las credenciales del un usuario de WAAD o de nuestro dominio si es que lo tuviéramos sincronizado.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS47_5F00_317F6764.png"&gt;&lt;img title="DemoACS47" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS47" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS47_5F00_thumb_5F00_65475DB5.png" width="694" height="470" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=209369" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="WIF" scheme="http://geeks.ms/blogs/ilanda/archive/tags/WIF/default.aspx" /><category term="Access Control" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Access+Control/default.aspx" /><category term="Windows Azure Active Directory" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure+Active+Directory/default.aspx" /></entry><entry><title>Cómo securizar una aplicación que contenga tanto aplicaciones web como servicios WebAPI</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/05/09/c-243-mo-securizar-una-aplicaci-243-n-que-contenga-tanto-aplicaciones-web-como-servicios-webapi.aspx" /><id>/blogs/ilanda/archive/2013/05/09/c-243-mo-securizar-una-aplicaci-243-n-que-contenga-tanto-aplicaciones-web-como-servicios-webapi.aspx</id><published>2013-05-09T13:02:00Z</published><updated>2013-05-09T13:02:00Z</updated><content type="html">&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.estoyenlanube.com/usando-acs-y-tokens-jwt-para-securizar-aplicaciones-web/"&gt;C&amp;oacute;mo securizar aplicaciones web usando ACS y tokens JWT.&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.estoyenlanube.com/desplegar-aplicaciones-web-en-windows-azure-websites-que-hagan-uso-de-wif"&gt;Desplegar aplicaciones web en Windows Azure WebSites que hagan uso de WIF.&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.estoyenlanube.com/cmo-securizar-servicios-webapi-usando-acs-y-tokens-jwt"&gt;C&amp;oacute;mo securizar servicios WebAPI usando ACS y tokens JWT.&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;C&amp;oacute;mo securizar una aplicaci&amp;oacute;n MVC que contenga tanto aplicaciones web como servicios WebAPI. &lt;/li&gt;
&lt;li&gt;C&amp;oacute;mo securizar aplicaciones web usando Windows Azure Active Directory ( WAAD ). &lt;/li&gt;
&lt;li&gt;C&amp;oacute;mo hacer uso del tenant de WAAD de Office 365 para securizar aplicaciones web &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En los ejemplos anteriores hemos visto c&amp;oacute;mo securizar una aplicaci&amp;oacute;n ASP.NET MVC y una aplicaci&amp;oacute;n WebAPI haciendo uso de ACS y tokens JWT. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Pero qu&amp;eacute; pasa si en el mismo proyecto tenemos las dos cosas?&lt;/strong&gt; Una aplicaci&amp;oacute;n web a la cu&amp;aacute;l un usuario puede acceder a trav&amp;eacute;s del navegador y un servicio WebAPI que se usa tanto desde el javascript de la aplicaci&amp;oacute;n web, como desde otros clientes como pueden ser una aplicaci&amp;oacute;n Windows 8 o Windows Phone.&lt;/p&gt;
&lt;p&gt;En este caso, tendremos que hacer los pasos vistos en los dos post anteriores, pero veremos c&amp;oacute;mo una vez juntos no van a funcionar las llamadas al servicio WebAPI, salvo las propias que podamos hacer desde el javascript de la aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Cuando hacemos uso de WIF para autenticar la aplicaci&amp;oacute;n web, &lt;strong&gt;TODAS&lt;/strong&gt; las llamadas que se realizar deben estar autenticadas. En caso de no estar autenticadas, se nos redirige a la pantalla de login para que podamos introducir las credenciales.&lt;/p&gt;
&lt;p&gt;Si las llamadas las intentamos realizar por c&amp;oacute;digo, por ejemplo desde una aplicaci&amp;oacute;n Windows 8 haciendo uso de httpClient, estas llamadas ser&amp;aacute;n igualmente redirigidas a la pantalla de login, aunque mandemos en las cabeceras el token de seguridad.&lt;/p&gt;
&lt;p&gt;Soluci&amp;oacute;n? En mi caso lo he solucionado de la siguiente manera:&lt;/p&gt;
&lt;p&gt;Lo primero es a&amp;ntilde;adir la posibilidad de llamar a los servicios WebAPI a trav&amp;eacute;s de dos rutas diferentes. Una de las rutas ser&amp;aacute; usada por la aplicaci&amp;oacute;n web, cuando desde el c&amp;oacute;digo JavaScript quiera llamar a estos servicios, mientras la otra ruta ser&amp;aacute; usada para el resto de clientes; Windows 8, Windows Phone&amp;hellip;&lt;/p&gt;
&lt;pre class="csharpcode"&gt;            config.Routes.MapHttpRoute(
                name: &lt;span class="str"&gt;&amp;quot;DefaultApi&amp;quot;&lt;/span&gt;,
                routeTemplate: &lt;span class="str"&gt;&amp;quot;api/{controller}/{id}&amp;quot;&lt;/span&gt;,
                defaults: &lt;span class="kwrd"&gt;new&lt;/span&gt; { id = RouteParameter.Optional }
            );

            config.Routes.MapHttpRoute(
                name: &lt;span class="str"&gt;&amp;quot;DefaultApiJs&amp;quot;&lt;/span&gt;,
                routeTemplate: &lt;span class="str"&gt;&amp;quot;apijs/{controller}/{id}&amp;quot;&lt;/span&gt;,
                defaults: &lt;span class="kwrd"&gt;new&lt;/span&gt; { id = RouteParameter.Optional }
            );&lt;/pre&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;En el fichero de configuraci&amp;oacute;n establezco que la ruta que va a ser usada por las &amp;ldquo;aplicaciones externas&amp;rdquo; permita llamadas an&amp;oacute;nimas.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;location&lt;/span&gt; &lt;span class="attr"&gt;path&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;api&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;system.web&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;authorization&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;allow&lt;/span&gt; &lt;span class="attr"&gt;users&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;authorization&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;system.web&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;location&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;y por &amp;uacute;ltimo, en el DelegationHandler har&amp;eacute; que s&amp;oacute;lo se valide el token si la llamada no es autenticada.&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; (Thread.CurrentPrincipal.Identity.IsAuthenticated)
            {
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.SendAsync(request, cancellationToken);
            }&lt;/pre&gt;
&lt;pre class="csharpcode"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;De esta manera conseguimos:&lt;/p&gt;
&lt;p&gt;Si un usuario accede a trav&amp;eacute;s del navegador se le pedir&amp;aacute;n las credenciales para poder entrar en la web. Una vez autenticado, todas las llamadas que se hagan desde el JavaScript ya estar&amp;aacute;n autenticadas, por lo que no es necesario que el DelegationHandler haga nada.&lt;/p&gt;
&lt;p&gt;Cuando hacemos por c&amp;oacute;digo desde una aplicaci&amp;oacute;n externa, haremos uso de la ruta que permite llamada an&amp;oacute;nimas y as&amp;iacute; evitar que se nos mande a la p&amp;aacute;gina de login. En este caso, el DelagationHandler s&amp;iacute; tendr&amp;aacute; que validar el token de seguridad y establecer la identidad en la llamada.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=209368" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="WIF" scheme="http://geeks.ms/blogs/ilanda/archive/tags/WIF/default.aspx" /><category term="Access Control" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Access+Control/default.aspx" /><category term="Windows Azure Active Directory" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure+Active+Directory/default.aspx" /></entry><entry><title>Cómo securizar servicios WebAPI usando ACS y tokens JWT</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/05/07/c-243-mo-securizar-servicios-webapi-usando-acs-y-tokens-jwt.aspx" /><id>/blogs/ilanda/archive/2013/05/07/c-243-mo-securizar-servicios-webapi-usando-acs-y-tokens-jwt.aspx</id><published>2013-05-07T15:48:00Z</published><updated>2013-05-07T15:48:00Z</updated><content type="html">&lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/usando-acs-y-tokens-jwt-para-securizar-aplicaciones-web/" target="_blank"&gt;Cómo securizar aplicaciones web usando ACS y tokens JWT.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/desplegar-aplicaciones-web-en-windows-azure-websites-que-hagan-uso-de-wif" target="_blank"&gt;Desplegar aplicaciones web en Windows Azure WebSites que hagan uso de WIF.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Cómo securizar servicios WebAPI usando ACS y tokens JWT. &lt;/li&gt;    &lt;li&gt;Cómo securizar una aplicación MVC que contenga tanto aplicaciones web como servicios WebAPI. &lt;/li&gt;    &lt;li&gt;Cómo securizar aplicaciones web usando Windows Azure Active Directory ( WAAD ). &lt;/li&gt;    &lt;li&gt;Cómo hacer uso del tenant de WAAD de Office 365 para securizar aplicaciones web &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;En el primer post de la serie veíamos cómo es posible securizar una aplicación web ASP.NET MVC como ACS y token JWT. En este post haremos un ejemplo similar, pero securizando un servicio ASP.NET WebAPI al cuál queremos llamar desde un cliente de forma segura.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS23_5F00_4B7066F5.png"&gt;&lt;img title="DemoACS23" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS23" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS23_5F00_thumb_5F00_57FE1411.png" width="680" height="619" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez creada, veremos cómo ésta aplicación tiene unos controladores de ejemplo que podemos usar para el ejemplo que estamos mostrando, ya que lo que nos importante en este caso es cómo securizar el acceso.&lt;/p&gt;  &lt;p&gt;Con el proyecto de ejemplo, si ejecutamos la aplicación con F5 podemos acceder a los controladores WebAPI a través del protocolo GET desde el propio navegador y ver los resultados que devuelve. Al no tener seguridad cualquiera puede consultarlos.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS24_5F00_24C1DAA8.png"&gt;&lt;img title="DemoACS24" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS24" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS24_5F00_thumb_5F00_6E70B298.png" width="778" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS25_5F00_0627E9FF.png"&gt;&lt;img title="DemoACS25" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS25" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS25_5F00_thumb_5F00_52EBB095.png" width="477" height="224" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez que tenemos la aplicación de ejemplo, &lt;a href="http://www.estoyenlanube.com/usando-acs-y-tokens-jwt-para-securizar-aplicaciones-web/" target="_blank"&gt;como en caso anterior&lt;/a&gt;, será necesario crear un namespace de ACS así como una relaying party con las URLs dónde estamos desplegando el servicio WebAPI en local. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS26_5F00_38AB4771.png"&gt;&lt;img title="DemoACS26" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS26" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS26_5F00_thumb_5F00_16DF6EE0.png" width="699" height="745" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para seguir con el ejempo, el siguiente paso será añadir una referencia a &lt;strong&gt;System.IdentityModel&lt;/strong&gt;, así como instalar a través de Nuget “&lt;a href="https://nuget.org/packages/Microsoft.IdentityModel.Tokens.JWT"&gt;JSON Web Token Handler For the Microsoft .Net Framework 4.5&lt;/a&gt;”, paquete que va a proporcionarnos diferentes clases para el manejo de tokens JWT.&lt;/p&gt;  &lt;p&gt;Una vez realizado estos pasos, la principal diferencia con el ejemplo de MVC es que aquí no podremos hacer uso de la herramienta “Identity and Access…” que veíamos en el post anterior y la cuál nos permitía configurar nuestra aplicación para hacer uso de ACS.&lt;/p&gt;  &lt;p&gt;En este caso tendremos que desarrollar nuestro propio &lt;strong&gt;DelegatingHandler&lt;/strong&gt; para que poder validar en todas las peticiones que se realicen al servicio WebAPI que el&amp;#160; cliente está debidamente autenticado contra el proveedor de identidad y STS que tengamos configurado en nuestro ACS.&lt;/p&gt;  &lt;p&gt;A través del Global.asax añadiremos nuestro validador personalizado, el cuál se encarga de asegurarse de que el token se envían en las cabeceras de todas las peticiones, que el token es correcto y es establecer la identidad para que desde los controladores WebAPI pueda acceder a toda la información del usuario autenticado, por ejemplo, los claims.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;GlobalConfiguration.Configuration.MessageHandlers.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; TokenValidationHandler());&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;El código de nuestro handler sería el siguiente:&lt;/pre&gt;

&lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TokenValidationHandler : DelegatingHandler
    {
        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; Task&amp;lt;HttpResponseMessage&amp;gt; SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            HttpStatusCode statusCode;
            &lt;span class="kwrd"&gt;string&lt;/span&gt; token;

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!TryRetrieveToken(request, &lt;span class="kwrd"&gt;out&lt;/span&gt; token))
            {
                statusCode = HttpStatusCode.Unauthorized;
                &lt;span class="kwrd"&gt;return&lt;/span&gt; Task&amp;lt;HttpResponseMessage&amp;gt;.Factory.StartNew(() =&amp;gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; HttpResponseMessage(statusCode));
            }

            &lt;span class="kwrd"&gt;try&lt;/span&gt;
            {
                &lt;span class="rem"&gt;// Use JWTSecurityTokenHandler to validate the JWT token&lt;/span&gt;
                JWTSecurityTokenHandler tokenHandler = &lt;span class="kwrd"&gt;new&lt;/span&gt; JWTSecurityTokenHandler();

                List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; issuers = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();
                issuers.AddRange(ConfigurationManager.AppSettings[&lt;span class="str"&gt;&amp;quot;Issuers&amp;quot;&lt;/span&gt;].Split(&lt;span class="kwrd"&gt;new&lt;/span&gt;[] { &lt;span class="str"&gt;&amp;#39;,&amp;#39;&lt;/span&gt; }));

                &lt;span class="rem"&gt;// Set the expected properties of the JWT token in the TokenValidationParameters&lt;/span&gt;
                TokenValidationParameters validationParameters = &lt;span class="kwrd"&gt;new&lt;/span&gt; TokenValidationParameters()
                {
                    AllowedAudience = ConfigurationManager.AppSettings[&lt;span class="str"&gt;&amp;quot;AllowedAudience&amp;quot;&lt;/span&gt;],
                    ValidIssuers = issuers,

                    &lt;span class="rem"&gt;// Fetch the signing token from the FederationMetadata document of the tenant.&lt;/span&gt;
                    SigningToken =
                    &lt;span class="kwrd"&gt;new&lt;/span&gt; X509SecurityToken(&lt;span class="kwrd"&gt;new&lt;/span&gt; X509Certificate2(GetSigningCertificate(ConfigurationManager.AppSettings[&lt;span class="str"&gt;&amp;quot;ida:FederationMetadataLocation&amp;quot;&lt;/span&gt;])))
                };

                Thread.CurrentPrincipal = tokenHandler.ValidateToken(token, validationParameters);
                HttpContext.Current.User = Thread.CurrentPrincipal;

                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.SendAsync(request, cancellationToken);
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (SecurityTokenValidationException)
            {
                statusCode = HttpStatusCode.Unauthorized;
            }
            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception)
            {
                statusCode = HttpStatusCode.InternalServerError;
            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; Task&amp;lt;HttpResponseMessage&amp;gt;.Factory.StartNew(() =&amp;gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; HttpResponseMessage(statusCode));
        }

        &lt;span class="rem"&gt;// This function retrieves ACS token (in format of OAuth 2.0 Bearer Token type) from &lt;/span&gt;
        &lt;span class="rem"&gt;// the Authorization header in the incoming HTTP request from the ShipperClient.&lt;/span&gt;
        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; TryRetrieveToken(HttpRequestMessage request, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; token)
        {
            token = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
            IEnumerable&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; authzHeaders;
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (!request.Headers.TryGetValues(&lt;span class="str"&gt;&amp;quot;Authorization&amp;quot;&lt;/span&gt;, &lt;span class="kwrd"&gt;out&lt;/span&gt; authzHeaders) || authzHeaders.Count() &amp;gt; 1)
            {
                &lt;span class="rem"&gt;// Fail if no Authorization header or more than one Authorization headers &lt;/span&gt;
                &lt;span class="rem"&gt;// are found in the HTTP request &lt;/span&gt;
                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;
            }

            &lt;span class="rem"&gt;// Remove the bearer token scheme prefix and return the rest as ACS token &lt;/span&gt;
            var bearerToken = authzHeaders.ElementAt(0);
            token = bearerToken.StartsWith(&lt;span class="str"&gt;&amp;quot;Bearer &amp;quot;&lt;/span&gt;) ? bearerToken.Substring(7) : bearerToken;
            token = bearerToken.StartsWith(&lt;span class="str"&gt;&amp;quot;Authorization Bearer &amp;quot;&lt;/span&gt;) ? bearerToken.Substring(21) : bearerToken;
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] GetSigningCertificate(&lt;span class="kwrd"&gt;string&lt;/span&gt; metadataAddress)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (metadataAddress == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentNullException(metadataAddress);
            }

            &lt;span class="kwrd"&gt;using&lt;/span&gt; (XmlReader metadataReader = XmlReader.Create(metadataAddress))
            {
                MetadataSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; MetadataSerializer()
                {
                    CertificateValidationMode = X509CertificateValidationMode.None
                };

                EntityDescriptor metadata = serializer.ReadMetadata(metadataReader) &lt;span class="kwrd"&gt;as&lt;/span&gt; EntityDescriptor;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (metadata != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    SecurityTokenServiceDescriptor stsd = metadata.RoleDescriptors.OfType&amp;lt;SecurityTokenServiceDescriptor&amp;gt;().First();

                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (stsd != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                    {
                        X509RawDataKeyIdentifierClause clause = stsd.Keys.First().KeyInfo.OfType&amp;lt;X509RawDataKeyIdentifierClause&amp;gt;().First();

                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (clause != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                        {
                            &lt;span class="kwrd"&gt;return&lt;/span&gt; clause.GetX509RawData();
                        }
                        &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;&amp;quot;The SecurityTokenServiceDescriptor in the metadata does not contain the Signing Certificate in the &amp;lt;X509Certificate&amp;gt; element&amp;quot;&lt;/span&gt;);
                    }
                    &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;&amp;quot;The Federation Metadata document does not contain a SecurityTokenServiceDescriptor&amp;quot;&lt;/span&gt;);
                }
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;&amp;quot;Invalid Federation Metadata document&amp;quot;&lt;/span&gt;);
            }
        }

    }&lt;/pre&gt;


&lt;p&gt;Si una vez realizado estos cambios, volvemos a ejecutar la aplicación y realizamos una llamada desde el navegador, veremos cómo todas las llamadas pasan por nuestro validador personalizado, el cuál rechazará todas las llamadas que no contenga un token de seguridad validado.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS31_5F00_7513964E.png"&gt;&lt;img title="DemoACS31" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS31" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS31_5F00_thumb_5F00_340516EA.png" width="779" height="240" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El último paso del ejemplo será realizar un cliente C# que sea capaz de llamar al servicio WebAPI pasando un token de seguridad válido para nuestro STS.&lt;/p&gt;

&lt;p&gt;En este caso he creado un proyecto de Test, al que he añadid el paquete &lt;strong&gt;“Windows Azure Authentication Library&lt;/strong&gt;”, el cuál simplifica enormemente el trabajo con WIF, ya sea con ACS o con Windows Azure Active Directory.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS32_5F00_5E051512.png"&gt;&lt;img title="DemoACS32" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS32" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS32_5F00_thumb_5F00_74973D8C.png" width="1036" height="558" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El siguiente código muestra cómo es posible realizar una llamada al servicio WebAPI.&lt;/p&gt;

&lt;p&gt;En el ejemplo se hace uso de la clase AuthenticationContext disponible en WAAL, en la cuál indicamos el namespace de ACS con el que estemos trabajando, así como el nombre de la relaying party para el cuál queremos obtener un token de seguridad.&lt;/p&gt;

&lt;p&gt;El método AcquireToken nos mostraré una interfaz de usuario en función del proveedor o proveedores configurados en ACS, para que podamos autenticarnos.&lt;/p&gt;

&lt;p&gt;Una vez autenticados, podremos generar un token para poder mandarlo en las cabeceras de autenticación. En este caso, el delegationHandler que hemos desarrollado anteriormente validará correctamente el token y establecerá la identidad en la llamada. &lt;/p&gt;

&lt;pre class="csharpcode"&gt;[TestClass]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DemoWebAPITests
    {
        [TestMethod]
        [TestCategory(&lt;span class="str"&gt;&amp;quot;Integration&amp;quot;&lt;/span&gt;)]
        &lt;span class="kwrd"&gt;public&lt;/span&gt; async Task TestWebAPIService()
        {
            var authContext = &lt;span class="kwrd"&gt;new&lt;/span&gt; AuthenticationContext(&lt;span class="str"&gt;&amp;quot;https://estoyenlanube.accesscontrol.windows.net&amp;quot;&lt;/span&gt;);
            AssertionCredential credential = authContext.AcquireToken(&lt;span class="str"&gt;&amp;quot;http://localhost:29350/&amp;quot;&lt;/span&gt;);
            var token = credential.CreateAuthorizationHeader();

            HttpClient httpClient = &lt;span class="kwrd"&gt;new&lt;/span&gt; HttpClient();
            httpClient.DefaultRequestHeaders.Accept.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; MediaTypeWithQualityHeaderValue(&lt;span class="str"&gt;&amp;quot;application/json&amp;quot;&lt;/span&gt;));
            httpClient.DefaultRequestHeaders.Authorization = &lt;span class="kwrd"&gt;new&lt;/span&gt; AuthenticationHeaderValue(&lt;span class="str"&gt;&amp;quot;Authorization&amp;quot;&lt;/span&gt;, token);

            var response = await httpClient.GetStringAsync(&lt;span class="str"&gt;&amp;quot;http://localhost:29350/api/values&amp;quot;&lt;/span&gt;);

        }
    }&lt;/pre&gt;


&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS34_5F00_04C30586.png"&gt;&lt;img title="DemoACS34" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS34" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS34_5F00_thumb_5F00_23997964.png" width="569" height="550" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS36_5F00_426FED42.png"&gt;&lt;img title="DemoACS36" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS36" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS36_5F00_thumb_5F00_0F33B3D9.png" width="824" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=209367" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="WIF" scheme="http://geeks.ms/blogs/ilanda/archive/tags/WIF/default.aspx" /><category term="Access Control" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Access+Control/default.aspx" /><category term="Windows Azure Active Directory" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure+Active+Directory/default.aspx" /></entry><entry><title>Desplegar aplicaciones web en Windows Azure WebSites que hagan uso de WIF</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/05/02/desplegar-aplicaciones-web-en-windows-azure-websites-que-hagan-uso-de-wif.aspx" /><id>/blogs/ilanda/archive/2013/05/02/desplegar-aplicaciones-web-en-windows-azure-websites-que-hagan-uso-de-wif.aspx</id><published>2013-05-02T13:18:00Z</published><updated>2013-05-02T13:18:00Z</updated><content type="html">&lt;p&gt;Siguiente con la serie de posts dedicada a la securización de aplicaciones, este post veremos cómo desplegar en Windows Azure Web Sites la aplicación web desarrollada en el post anterior y un par de puntos que tendremos que tener en cuenta para que todo funcione sin problemas.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.estoyenlanube.com/usando-acs-y-tokens-jwt-para-securizar-aplicaciones-web/" target="_blank"&gt;Cómo securizar aplicaciones web usando ACS y tokens JWT.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Desplegar aplicaciones web en Windows Azure WebSites que hagan uso de WIF. &lt;/li&gt;    &lt;li&gt;Cómo securizar servicios WebAPI usando ACS y tokens KWT. &lt;/li&gt;    &lt;li&gt;Cómo securizar una aplicación MVC que contenga tanto aplicaciones web como servicios WebAPI. &lt;/li&gt;    &lt;li&gt;Cómo securizar aplicaciones web usando Windows Azure Active Directory ( WAAD ). &lt;/li&gt;    &lt;li&gt;Cómo hacer uso del tenant de WAAD de Office 365 para securizar aplicaciones web &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;El primer paso es crear un nuevo Web Site desde el portal de WIndows Azure dónde desplegaremos la aplicación ASP.NET desarrollada en el post anterior y que hace uso de ACS y tokens JWT.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS17_5F00_0A4D0FA1.png"&gt;&lt;img title="DemoACS17" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DemoACS17" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS17_5F00_thumb_5F00_21981412.png" width="1105" height="345" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez creado el site, modificaremos en namespace de ACS para que en lugar de hacer uso las URL locales, haga uso de las URL de WIndows Azure dónde desplegaremos la aplicación.&lt;/p&gt;  &lt;p&gt;En este caso estamos modificando la misma relaying party que teníamos ya, pero en un escenario real os recomendaría tener dos “relaying party”, una configurada para funcionar en local y otra para funcionar cuando esté desplegada en Windows Azure y hacer uso de las transformaciones que soporta web.config para que cuando ésta se despliega en Windows Azure la configuración sea modificada para tener la configuración adecuada.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS20_5F00_596A5835.png"&gt;&lt;img title="DemoACS20" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DemoACS20" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS20_5F00_thumb_5F00_3157A916.png" width="533" height="205" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;El siguiente paso, será utilizar el wizard de publicación que nos proporciona el Sdk de Windows Azure para publicar de manera directamente desde Visual Studio.&lt;/p&gt;  &lt;p&gt;Este wizard de forma sencilla nos permite indicar las credenciales de nuestra subscripción Windows Azure, así como indicar el servicio sobre el que se quiere desplegar la aplicación, tal y como se ve en las imágenes siguientes:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS18_5F00_4C23CF22.png"&gt;&lt;img title="DemoACS18" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DemoACS18" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS18_5F00_thumb_5F00_24112003.png" width="716" height="565" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS19_5F00_29EBC39C.png"&gt;&lt;img title="DemoACS19" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DemoACS19" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS19_5F00_thumb_5F00_53EBC1C4.png" width="622" height="403" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Y una vez desplegada, si lo hacemos con los errores remotos activados ( &amp;lt;customErrors mode=&amp;quot;Off&amp;quot;&amp;gt;&amp;lt;/customErrors&amp;gt; ) veremos el siguiente error!!&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread&amp;#39;s user context, which may be the case when the thread is impersonating. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS21_5F00_40CA9518.png"&gt;&lt;img title="DemoACS21" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DemoACS21" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS21_5F00_thumb_5F00_31B3B63E.png" width="804" height="222" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Este error se produce por el uso DAPI, método por defecto para proteger las cookies en aplicaciones WIF y el cuál no está disponible en Windows Azure Web Sites.&lt;/p&gt;  &lt;p&gt;Cambiarlo es sencillo, ya que la propia herramienta nos permite indicar que queremos usar un método alternativo, chequeando la opción “&lt;strong&gt;Enable Web farm ready cookies”&lt;/strong&gt; en el pestaña de configuración del asistente “Identity and Access…”.&lt;/p&gt;  &lt;p&gt;Sino podemos cambiar manualmente estas entradas en el fichero de configuración:&lt;/p&gt;  &lt;pre class="csharpcode"&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;securityTokenHandlers&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;  
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;remove&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;add&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS17_5F00_2_5F00_657BAC8F.png"&gt;&lt;img title="DemoACS17_2" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="DemoACS17_2" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS17_5F00_2_5F00_thumb_5F00_4F45913D.png" width="766" height="697" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=209365" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="WIF" scheme="http://geeks.ms/blogs/ilanda/archive/tags/WIF/default.aspx" /><category term="Access Control" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Access+Control/default.aspx" /><category term="Windows Azure Active Directory" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure+Active+Directory/default.aspx" /></entry><entry><title>Barrica Tech Day en Logroño!</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/05/02/barrica-tech-day-en-logro-241-o.aspx" /><id>/blogs/ilanda/archive/2013/05/02/barrica-tech-day-en-logro-241-o.aspx</id><published>2013-05-02T10:04:00Z</published><updated>2013-05-02T10:04:00Z</updated><content type="html">&lt;p&gt;El pr&amp;oacute;ximo 25 de mayo celebraremos un evento en Logro&amp;ntilde;o d&amp;oacute;nde todos los que quer&amp;aacute;is est&amp;aacute;is invitados a venir! Aqu&amp;iacute; os dejo todos los detalles del mismo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Registro: &lt;a href="http://barricatechday.eventbrite.com/" title="http://barricatechday.eventbrite.com/"&gt;http://barricatechday.eventbrite.com/&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10:00 &amp;ndash; 10:50 Desarrollo de aplicaciones web con Silex &lt;/strong&gt;por Asier Marques (@asiermarques) de Simettric&lt;/p&gt;
&lt;p&gt;Silex es un framework &amp;aacute;gil y muy profesional para desarrollar aplicaciones web con PHP. Silex reduce el tiempo de desarrollo de aplicaciones peque&amp;ntilde;as a horas y el de aplicaciones medianas a d&amp;iacute;as. &lt;/p&gt;
&lt;p&gt;Durante la sesi&amp;oacute;n podremos ver:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;iquest;Por qu&amp;eacute; Silex?&lt;/li&gt;
&lt;li&gt;C&amp;oacute;mo trabajar con Silex.&lt;/li&gt;
&lt;li&gt;C&amp;oacute;mo escalar Silex.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;10:00 &amp;ndash; 10:50 Git &lt;/strong&gt;por Fernando Perez&amp;nbsp; (@ferpega_) de Plain Concepts&lt;/p&gt;
&lt;p&gt;Los repositorios de c&amp;oacute;digo se han convertido en una pieza fundamental del desarrollo de software hoy d&amp;iacute;a.&amp;nbsp; Usarlos es esencial para cualquier proyecto, sea del tama&amp;ntilde;o que sea y est&amp;eacute; formado por una sola persona o por varios equipos.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;En esta sesi&amp;oacute;n veremos las diferencias entre repositorios de c&amp;oacute;digo centralizados y descentralizados y ahondaremos en la terminolog&amp;iacute;a y particularidades que han hecho de GIT el repositorio que cuenta con un mayor crecimiento hoy d&amp;iacute;a, pasando despu&amp;eacute;s por &lt;strong&gt;una introducci&amp;oacute;n a los comandos b&amp;aacute;sicos de GIT y algunas utilidades gr&amp;aacute;ficas&lt;/strong&gt; que pueden facilitarnos la vida en nuestros inicios con este fant&amp;aacute;stico gestor de c&amp;oacute;digo fuente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;12:00 &amp;ndash; 12:50&lt;/strong&gt; Montando un escenario de integraci&amp;oacute;n contin&amp;uacute;a&lt;/strong&gt; por Ibon Landa (@ibonilm) de Plain Concepts&lt;/p&gt;
&lt;p&gt;Durante esta sesi&amp;oacute;n se mostrar&amp;aacute; de forma pr&amp;aacute;ctica c&amp;oacute;mo es posible montar un escenario de integraci&amp;oacute;n continua d&amp;oacute;nde se pueda construir el software cada vez que se realiza alguna modificaci&amp;oacute;n y pasar las pruebas de forma automatizada, a la vez que se hace uso de una plataforma de Cloud Computing para desplegarla durante el proceso.&lt;/p&gt;
&lt;p&gt;Durante la sesi&amp;oacute;n se emplear&amp;aacute; &lt;strong&gt;Azure WebSites&lt;/strong&gt; como plataforma de Cloud Computing d&amp;oacute;nde desplegar las aplicaciones, plataforma que permite trabajar con &lt;strong&gt;GitHub, TFS Service, Bitbucket o CodePlex&lt;/strong&gt; para crear escenarios de integraci&amp;oacute;n continua.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;13:00 &amp;ndash; 13:50 Pruebas funcionales en la web con CasperJS &lt;/strong&gt;por Vicen&amp;ccedil; Garcia (@vgaltes) de Plain Concepts&lt;/p&gt;
&lt;p&gt;Las pruebas funcionales son un mal necesario cuando estamos desarrollando software. As&amp;iacute; como las pruebas unitarias nos ayudan a asegurar que estamos haciendo las cosas correctamente, las pruebas funcionales nos ayudar&amp;aacute;n a asegurar que estamos haciendo las cosas correctas. &lt;/p&gt;
&lt;p&gt;Como toda prueba de nuestro sistema, es necesario que la podamos pasar tantas veces como sea necesario y con el menor coste para nosotros como sea posible, as&amp;iacute; que automatizarlas se antoja vital. &lt;/p&gt;
&lt;p&gt;En esta sesi&amp;oacute;n veremos cuando puede ser interesante hacer este tipo de pruebas y veremos c&amp;oacute;mo podemos apoyarnos en CasperJS para codificarlas.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img height="33" width="175" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/40714830/simettric.png" style="margin:5px 5px 5px 0px;" alt="" /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img height="87" width="404" src="https://evbdn.eventbrite.com/s3-s3/eventlogos/40714830/plainconcepts.png" style="margin:5px 5px 5px 0px;" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=209373" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Evento" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Evento/default.aspx" /></entry><entry><title>Usando ACS y tokens JWT para securizar aplicaciones web</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/05/01/usando-acs-y-tokens-jwt-para-securizar-aplicaciones-web.aspx" /><id>/blogs/ilanda/archive/2013/05/01/usando-acs-y-tokens-jwt-para-securizar-aplicaciones-web.aspx</id><published>2013-05-01T14:50:14Z</published><updated>2013-05-01T14:50:14Z</updated><content type="html">&lt;p&gt;El objetivo de este post y alguno que intentaré ir escribiendo más adelante es intentar explicar en detalle cómo es posible securizar tanto aplicaciones web ASP.NET MVC como servicios WebAPI empleando &lt;strong&gt;Windows Azure Access Control y&amp;#160; token JWT&lt;/strong&gt;. Así mismo entraré en escenarios dónde se haga uso del nuevo servicio &lt;strong&gt;Windows Azure Active Directory.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;En esta serie trataré los siguientes temás:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Cómo securizar aplicaciones web usando ACS y tokens JWT. &lt;/li&gt;    &lt;li&gt;Desplegar aplicaciones web en Windows Azure WebSites que hagan uso de ACS. &lt;/li&gt;    &lt;li&gt;Cómo securizar servicios WebAPI usando ACS y tokens KWT. &lt;/li&gt;    &lt;li&gt;Cómo securizar una aplicación MVC que contenga tanto aplicaciones web como servicios WebAPI. &lt;/li&gt;    &lt;li&gt;Cómo securizar aplicaciones web usando Windows Azure Active Directory ( WAAD ). &lt;/li&gt;    &lt;li&gt;Cómo hacer uso del tenant de WAAD de Office 365 para securizar aplicaciones web. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;En este primer post trataré el primero de los temas, sobre cómo es posible securizar una aplicación &lt;strong&gt;ASP.NET MVC&lt;/strong&gt; haciendo uso de ACS y token JWT. &lt;/p&gt;  &lt;p&gt;El primer paso para este ejemplo será crear un namespace de ACS desde el portal de Windows Azure. Una vez que hemos accedido a nuestra subscripción de Windows Azure tendremos que crear un namespace como se ve en la siguiente imagen:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS3_5F00_2423A5A6.png"&gt;&lt;img title="DemoACS3" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS3" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS3_5F00_thumb_5F00_65DADB34.png" width="920" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez que tenemos el namespace podemos acceder a la administración del namespace y realizar la configuración que necesitemos para nuestra aplicación. En este caso, para simplificar el ejemplo, usaremos Windows Live Id como proveedor de identidad, pero como seguramente ya sabréis, es posible configurar múltiples proveedor, como un tenant de Windows Azure Active Directory (WAAD), un ADFS de un dominio on-premise o un tenant de Office 365 como veremos en post posteriores.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS4_5F00_003ACE4C.png"&gt;&lt;img title="DemoACS4" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS4" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS4_5F00_thumb_5F00_380D126F.png" width="506" height="417" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez que tenemos en namespace configurado, crearé una aplicación de ejemplo ASP.NET MVC 4 usando la plantilla de aplicación Internet.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS2_5F00_04D0D906.png"&gt;&lt;img title="DemoACS2" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS2" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS2_5F00_thumb_5F00_559EED6E.png" width="682" height="619" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para seguir con el ejemplo es importante asegurarnos de que en nuestro equipo de desarrollo tenemos instalado &lt;a href="http://www.microsoft.com/es-es/download/details.aspx?id=4451"&gt;Windows Identity Foundation&lt;/a&gt; así como las herramientas para trabajar con Windows Azure Active Directory; &lt;a title="Microsoft ASP.NET Tools for Windows Azure Active Directory – Visual Studio 2012" href="http://go.microsoft.com/fwlink/?LinkID=282306"&gt;Microsoft ASP.NET Tools for Windows Azure Active Directory – Visual Studio 2012&lt;/a&gt;. También antes de instalar las herramientas es necesario instalar &lt;a href="http://go.microsoft.com/fwlink/?LinkId=282650"&gt;ASP.NET and Web Tools 2012.2 Update&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez instalado estos componentes, si seleccionamos el proyecto web que acabamos de crear, veremos una nueva opción de menú &lt;strong&gt;“Identiy and Access…”&lt;/strong&gt; que nos ayudará a securizar las aplicaciones web de una forma rápida y “sencilla”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS5_5F00_3B5E844A.png"&gt;&lt;img title="DemoACS5" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS5" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS5_5F00_thumb_5F00_01030E69.png" width="528" height="615" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Este asistente nos permite indicar el tipo de seguridad que queremos aplicar a la aplicación web, ya sea haciendo uso de ACS, de WAAD o de un STS local que podamos haber desarrollado nosotros. En el ejemplo que estamos desarrollando en este post elegiremos la última de las tres opciones que se nos presentan.&lt;/p&gt;  &lt;p&gt;Una vez selecciona la opción de ACS tendremos que indicar el nombre de nuestro namespace, así como la key de administración que obtenemos del portal de Windows Azure. Indicando el nombre del namespace así como la key de administración el propio wizard podrá conocer los proveedores de identidad que tenemos configurados así como crear una “&lt;strong&gt;relaying party&lt;/strong&gt;” para la aplicación que estamos desarrollando.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS7_5F00_18BA45CF.png"&gt;&lt;img title="DemoACS7" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS7" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS7_5F00_thumb_5F00_5ECB02E2.png" width="487" height="315" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS6_5F00_61FCEACA.png"&gt;&lt;img title="DemoACS6" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS6" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS6_5F00_thumb_5F00_1C77EA9F.png" width="766" height="697" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En este caso, como estamos desarrollando en nuestro entorno local, indicaremos las URL dónde nuestra aplicación ASP.NET MVC se hostea en nuestro servidor local. En&amp;#160; mi caso, &lt;a href="http://localhost:28732/"&gt;http://localhost:28732/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Esta operación, entre otras cosas, lo que hace es crear una “relaying party” en namespace de ACS, en la cuál podremos configurar el tipo de token que queremos emplear, que como hemos comentado anteriormente, serán &lt;strong&gt;JSON Web Token&amp;#160; (JWT),&lt;/strong&gt; un formato compacto que está cogiendo bastante popularidad gracias al hecho de que se puede usar desde diferentes lenguajes y plataformas…así como que es usando por empresas como Amazon (Fusion Middleware), Google (App Engine Security Module) o SalesForce en alguno de sus productos.&lt;/p&gt;  &lt;p&gt;Así mismo, JWT es el formato que usa Windows Azure Active Directory y que también está soportado en modo Beta en Access Control, escenario que estamos viendo en este post.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS8_5F00_7F2292D4.png"&gt;&lt;img title="DemoACS8" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS8" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS8_5F00_thumb_5F00_04FD366E.png" width="390" height="233" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS9_5F00_18AA2002.png"&gt;&lt;img title="DemoACS9" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS9" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS9_5F00_thumb_5F00_3B8AE1B2.png" width="847" height="257" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Otro paso importante que no debemos olvidar es crear las reglas de ACS que queremos aplicar, para que a nuestra aplicación web puedan llegar los claims que nos interesen desde el proveedor de identidad.&lt;/p&gt;  &lt;p&gt;En este caso estamos usando Windows Live ID, por lo que veremos que al generar las reglas únicamente se nos creará una nueva regla que hará que llegue a la aplicación en nameidentifier del usuario autenticado. El número y tipo de claims depende de cada proveedor de identidad.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS10_5F00_1A2B3C16.png"&gt;&lt;img title="DemoACS10" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS10" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS10_5F00_thumb_5F00_752D7B9C.png" width="454" height="167" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez realizados estos pasos si intentamos ejecutar la aplicación (F5) veremos cómo una vez nos autenticamos en la aplicación con unas credenciales válidas de Windows Live ID nos encontramos con el siguiente error, que viene por el uso de JWT como formato de token.&lt;/p&gt;  &lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;ID4014: A SecurityTokenHandler is not registered to read security token (&amp;#39;BinarySecurityToken&amp;#39;, &amp;#39;&lt;/strong&gt;&lt;/font&gt;&lt;a href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&amp;#39;)"&gt;&lt;font color="#ff0000"&gt;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&amp;#39;)&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;. &lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS11_5F00_785F6384.png"&gt;&lt;img title="DemoACS11" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS11" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS11_5F00_thumb_5F00_25081D5E.png" width="752" height="253" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Para poder solucionar este problema, &lt;strong&gt;necesitaremos crear nuestro propio SecurityTokenHandler que soporte token de tipo JWT.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;El primero paso será añadir una referencia a &lt;strong&gt;System.IdentityModel&lt;/strong&gt;, así como instalar a través de Nuget “&lt;a href="https://nuget.org/packages/Microsoft.IdentityModel.Tokens.JWT"&gt;JSON Web Token Handler For the Microsoft .Net Framework 4.5&lt;/a&gt;”, paquete que va a proporcionarnos diferentes clases para el manejo de tokens JWT.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS13_5F00_75D631C6.png"&gt;&lt;img title="DemoACS13" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS13" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS13_5F00_thumb_5F00_0F9A4229.png" width="1042" height="560" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez que lo tengamos instalado, tenemos que crear una nueva clases que herede de &lt;strong&gt;JWTSecurityTokenHandler&lt;/strong&gt;.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;  &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; CustomJwtSecurityTokenHandler : JWTSecurityTokenHandler
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; ClaimsPrincipal ValidateToken(JWTSecurityToken jwt, TokenValidationParameters validationParameters)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; ((validationParameters.ValidIssuer == &lt;span class="kwrd"&gt;null&lt;/span&gt;) &amp;amp;&amp;amp;
                (validationParameters.ValidIssuers == &lt;span class="kwrd"&gt;null&lt;/span&gt; || !validationParameters.ValidIssuers.Any()))
            {
                validationParameters.ValidIssuers = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; { ((ConfigurationBasedIssuerNameRegistry)Configuration.IssuerNameRegistry)
                    .ConfiguredTrustedIssuers.First().Value };
            }

            &lt;span class="kwrd"&gt;if&lt;/span&gt; (validationParameters.SigningToken == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                validationParameters.SigningToken = &lt;span class="kwrd"&gt;new&lt;/span&gt; X509SecurityToken(&lt;span class="kwrd"&gt;new&lt;/span&gt; X509Certificate2(
                    GetSigningCertificate(ConfigurationManager.AppSettings[&lt;span class="str"&gt;&amp;quot;ida:FederationMetadataLocation&amp;quot;&lt;/span&gt;])));

            }
            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;base&lt;/span&gt;.ValidateToken(jwt, validationParameters);
        }

        &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; NameIdentifierClaimType(JWTSecurityToken jwt)
        {
            &lt;span class="kwrd"&gt;return&lt;/span&gt; ClaimTypes.GivenName;
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;byte&lt;/span&gt;[] GetSigningCertificate(&lt;span class="kwrd"&gt;string&lt;/span&gt; metadataAddress)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (metadataAddress == &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentNullException(metadataAddress);
            }

            &lt;span class="kwrd"&gt;using&lt;/span&gt; (XmlReader metadataReader = XmlReader.Create(metadataAddress))
            {
                MetadataSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; MetadataSerializer()
                {
                    CertificateValidationMode = X509CertificateValidationMode.None
                };

                EntityDescriptor metadata = serializer.ReadMetadata(metadataReader) &lt;span class="kwrd"&gt;as&lt;/span&gt; EntityDescriptor;

                &lt;span class="kwrd"&gt;if&lt;/span&gt; (metadata != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                {
                    SecurityTokenServiceDescriptor stsd = metadata.RoleDescriptors.OfType&amp;lt;SecurityTokenServiceDescriptor&amp;gt;().First();

                    &lt;span class="kwrd"&gt;if&lt;/span&gt; (stsd != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                    {
                        X509RawDataKeyIdentifierClause clause = stsd.Keys.First().KeyInfo.OfType&amp;lt;X509RawDataKeyIdentifierClause&amp;gt;().First();

                        &lt;span class="kwrd"&gt;if&lt;/span&gt; (clause != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
                        {
                            &lt;span class="kwrd"&gt;return&lt;/span&gt; clause.GetX509RawData();
                        }
                        &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;&amp;quot;The SecurityTokenServiceDescriptor in the metadata does not contain the Signing Certificate in the &amp;lt;X509Certificate&amp;gt; element&amp;quot;&lt;/span&gt;);
                    }
                    &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;&amp;quot;The Federation Metadata document does not contain a SecurityTokenServiceDescriptor&amp;quot;&lt;/span&gt;);
                }
                &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; Exception(&lt;span class="str"&gt;&amp;quot;Invalid Federation Metadata document&amp;quot;&lt;/span&gt;);
            }
        }
    } &lt;/pre&gt;


&lt;p&gt;Una vez que tenemos la clase creada, a través del fichero de configuración, tendremos que hacer las modificaciones necesarias para que haga uso de la nueva clase que acabamos de crear: (sección securitytokenHandlers)&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS16_5F00_5466665D.png"&gt;&lt;img title="DemoACS16" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS16" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS16_5F00_thumb_5F00_45DB446B.png" width="1113" height="471" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;y ahora sí, si ejecutamos la aplicación con F5 e introducimos unas credenciales válidas, veremos llegamos a ver la aplicación ASP.NET MVC!!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS15_5F00_3658329C.png"&gt;&lt;img title="DemoACS15" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="DemoACS15" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/DemoACS15_5F00_thumb_5F00_00FEFA6A.png" width="1083" height="417" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=209364" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="WIF" scheme="http://geeks.ms/blogs/ilanda/archive/tags/WIF/default.aspx" /><category term="Access Control" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Access+Control/default.aspx" /><category term="Windows Azure Active Directory" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure+Active+Directory/default.aspx" /></entry><entry><title>WebCast de Windows Azure</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/04/02/webcast-de-windows-azure.aspx" /><id>/blogs/ilanda/archive/2013/04/02/webcast-de-windows-azure.aspx</id><published>2013-04-02T07:55:33Z</published><updated>2013-04-02T07:55:33Z</updated><content type="html">&lt;p&gt;Por segundo año consecutivo, tendrá lugar el &lt;a href="http://msdn.microsoft.com/es-es/dn144953" target="_blank"&gt;Megathon Windows 8&lt;/a&gt;, un evento que se celebra de manera simultánea en varias ciudades, donde tendrás la oportunidad de crear apps para Windows 8 y Windows Phone, aprender y conocer a otros programadores y ganar fabulosos premios.&lt;/p&gt;  &lt;p&gt;Previo a este evento se están celebrando una serie de WebCast para permitir a las personas que quieran participar ponerse las pilas en diversas tecnologías.&lt;/p&gt;  &lt;p&gt;Entre las sesiones que se impartirán habrá cuatro dedicadas a Windows Azure, en dos de las cuáles tendré el placer de participar. Aquí os dejo la información.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2 de Abril de 2013 de 19&amp;#39;00 a 19&amp;#39;40 - &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_EAC=300089973"&gt;Azure Mobile Services: Autenticación de usuarios con servicios de internet&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Veremos cómo incorporar servicios de autenticación de internet en nuestras aplicaciones. Nuestros usuarios podrán registrarse con sus identidades de twitter, Facebook, google o Microsoft Id.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4 de Abril de 2013 de 19&amp;#39;00 a 19&amp;#39;40 - &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_EAC=300089974"&gt;Azure Mobile Services: Almacenando datos de apps en la nube&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;La nube nos permite almacenar de forma centralizada la información para compartirla entre usuarios o entre dispositivos, haremos un ejercicio para entender la forma más sencilla de almacenar y recuperar datos de apps en Windows azure.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;9 de Abril de 2013 de 19&amp;#39;00 a 19&amp;#39;40 -&lt;/strong&gt; &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_EAC=300089975"&gt;Azure Mobile Services: Personalizando el servidor&lt;/a&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Windows Azure Mobile Services nos permite añadir nuestro código para extender la funcionalidad por defecto y adaptarlo a nuestras necesidades, por ejemplo realizando validaciones sobre los datos que van a almacenarse&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;11 de Abril de 2013 de 19&amp;#39;00 a 19&amp;#39;40 - &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_EAC=300089976"&gt;Azure Mobile Services: Notificaciones push a dispositivos&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Las notificaciones nos permiten tener un mayor nivel de interacción con los usuarios de nuestras apps, pero los diferentes dispositivos dificultan el desarrollo de los módulos de . notificaciones. Windows Azure Mobile Services ofrece un servicio unificado de notificaciones para diferentes dispositivos (Win8, WinPhone, Android e IOS)&lt;/p&gt;  &lt;p&gt;También habrá sesiones de Windows 8, Windows Phone 8 o TFS, las cuáles podéis &lt;a href="http://msdn.microsoft.com/es-es/dn130126#wa" target="_blank"&gt;ver aquí.&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=209021" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Evento" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Evento/default.aspx" /><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /></entry><entry><title>Mejoras en el plugin de Eclipse</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/03/02/mejoras-en-el-plugin-de-eclipse.aspx" /><id>/blogs/ilanda/archive/2013/03/02/mejoras-en-el-plugin-de-eclipse.aspx</id><published>2013-03-02T10:14:11Z</published><updated>2013-03-02T10:14:11Z</updated><content type="html">&lt;p&gt;Si habéis desplegado alguna vez una aplicación Java en Windows Azure os habréis dado cuenta que el empaquetado que genera Eclipse es bastante grande, ya que dentro del mismo además de los ficheros de la aplicación se debe incluir la versión del jdk y el servidor de aplicación correspondiente.&lt;/p&gt;  &lt;p&gt;El hecho de que el empaquetado fuese grande implica que los procesos de despliegue sean bastante más tediosos de lo podrían ser, ya que además del proceso de subida del fichero dentro del proceso de despliegue Windows Azure hace varias copias internas que claro está, a más tamaño, son más lentas.&lt;/p&gt;  &lt;p&gt;Pues nada, con la última actualización del plugin de Eclipse ya tenemos una alternativa, que no es otra que desplegar el jsdk y el servidor de aplicación desde el Windows Azure Storage. Así que si estáis trabajando con Java os recomiendo que uséis esta opción.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/Javafromstorage_5F00_6929854A.png"&gt;&lt;img title="Javafromstorage" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="Javafromstorage" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/Javafromstorage_5F00_thumb_5F00_3BC7EF7A.png" width="636" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208723" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="Java" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Java/default.aspx" /></entry><entry><title>Plugin de Eclipse para TFS</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/01/31/plugin-de-eclipse-para-tfs.aspx" /><id>/blogs/ilanda/archive/2013/01/31/plugin-de-eclipse-para-tfs.aspx</id><published>2013-01-31T13:23:00Z</published><updated>2013-01-31T13:23:00Z</updated><content type="html">&lt;p&gt;En un &lt;a href="http://www.estoyenlanube.com/windows-azure-java-y-eclipse/"&gt;post anterior&lt;/a&gt; veíamos como era posible instalar y usar el plugin de Windows Azure para Eclipse, para poder desplegar aplicaciones Java en Windows Azure de una forma relativamente sencilla.&lt;/p&gt;  &lt;p&gt;En este post os comentaré otro plugin que nos permite trabajar con &lt;strong&gt;Team Foundation Server&lt;/strong&gt; de forma sencilla desde Eclipse, para cualquier tipo de aplicación, y teniendo una experiencia prácticamente igual a la que se puede tener desde Visual Studio.&lt;/p&gt;  &lt;p&gt;Este plugin permite trabajar tanto con un TFS propio, como &lt;strong&gt;la versión en la nube que podéis llegar a usar de forma gratuita desde &lt;/strong&gt;&lt;a title="http://tfs.visualstudio.com/" href="http://tfs.visualstudio.com/"&gt;http://tfs.visualstudio.com/&lt;/a&gt; ; gestor de fuentes, sistema de integración continua, workitems, informes etc… todo en cuestión de minutos y hasta 5 usuarios de forma gratuita!!&lt;/p&gt;  &lt;p&gt;La instalación se realizar desde la opción de instalación de nuevo software, indicando el repositorio dónde éste se encuentra.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/01_2D00_TFS_5F00_770C88E2.png"&gt;&lt;img title="01-TFS" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="01-TFS" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/01_2D00_TFS_5F00_thumb_5F00_2EDECD06.png" width="559" height="437" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/02_2D00_TFS_5F00_38C3BE71.png"&gt;&lt;img title="02-TFS" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="02-TFS" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/02_2D00_TFS_5F00_thumb_5F00_25A291C5.png" width="449" height="171" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez indicado el repositorio podemos ver el plugin y proceder con la instalación.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/03_2D00_TFS_5F00_64941260.png"&gt;&lt;img title="03-TFS" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="03-TFS" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/03_2D00_TFS_5F00_thumb_5F00_30EBA602.png" width="559" height="504" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/04_2D00_TFS_5F00_4F55E6EB.png"&gt;&lt;img title="04-TFS" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="04-TFS" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/04_2D00_TFS_5F00_thumb_5F00_66A0EB5C.png" width="549" height="580" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Una vez instalado podemos añadir a la perspectiva el Team Explorer, que como veréis es prácticamente idéntico al que os podéis encontrar en Visual Studio.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/05_2D00_TFS_5F00_7DEBEFCD.png"&gt;&lt;img title="05-TFS" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="05-TFS" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/05_2D00_TFS_5F00_thumb_5F00_6ACAC321.png" width="311" height="439" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/06_2D00_TFS_5F00_14CAC14A.png"&gt;&lt;img title="06-TFS" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="06-TFS" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/06_2D00_TFS_5F00_thumb_5F00_08C8D116.png" width="427" height="284" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Desde esta ventana podréis indicar la dirección de vuestro TFS, os podéis conectar al proyecto que queráis y empezar a trabajar con los servicios que necesitéis…subir vuestro código fuente, crear vuestras builds de integración continua, añadir vuestras historias de usuario, tareas etc…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/08_2D00_TFS_5F00_39E80BB6.png"&gt;&lt;img title="08-TFS" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="08-TFS" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/08_2D00_TFS_5F00_thumb_5F00_06ABD24D.png" width="640" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/09_2D00_TFS_5F00_04FB0679.png"&gt;&lt;img title="09-TFS" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="09-TFS" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/09_2D00_TFS_5F00_thumb_5F00_4B0BC38C.png" width="204" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208226" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Team Server" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Team+Server/default.aspx" /><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /></entry><entry><title>Windows Azure Command Line Tools</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/01/30/windows-azure-command-line-tools.aspx" /><id>/blogs/ilanda/archive/2013/01/30/windows-azure-command-line-tools.aspx</id><published>2013-01-30T13:02:00Z</published><updated>2013-01-30T13:02:00Z</updated><content type="html">&lt;p&gt;Una de las principales herramientas de interoperabilidad que tenemos son las herramientas de l&amp;iacute;neas de comandos de windows Azure, las cu&amp;aacute;les est&amp;aacute;n disponibles para Windows, Linux y MAC.&lt;/p&gt;
&lt;p&gt;Esta herramienta la podemos descargar desde el portal de Windows Azure ( &lt;a href="http://www.windowsazure.com/en-us/manage/downloads/" title="http://www.windowsazure.com/en-us/manage/downloads/"&gt;http://www.windowsazure.com/en-us/manage/downloads/&lt;/a&gt; ) o desde el repositorio de GitHub &lt;a href="https://github.com/windowsazure/azure-sdk-tools-xplat" title="https://github.com/windowsazure/azure-sdk-tools-xplat"&gt;https://github.com/windowsazure/azure-sdk-tools-xplat&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Esta herramienta nos va a permitir realizar diferentes labores administrativas sobre los servicios de Windows Azure; m&amp;aacute;quinas virtuales, websites, mobile services etc&amp;hellip;&lt;strong&gt;todo desde l&amp;iacute;nea de comandos y desde cualquier sistema operativo.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esta herramienta est&amp;aacute; hecha en node.js y lo podemos instalar desde el package manager.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;npm install azure-cli &amp;ndash;g&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Eso s&amp;iacute;, importante revisar que tenemos la versi&amp;oacute;n adecuada de node.js. Por ejemplo, la versi&amp;oacute;n que se instala desde el software manager de Ubuntu 12.10 instala una versi&amp;oacute;n que no cumple con los requisitos m&amp;iacute;nimos, por lo que es recomendable acudir a la m&amp;aacute;quina principal de node.js ( &lt;a href="http://nodejs.org/" title="http://nodejs.org/"&gt;http://nodejs.org/&lt;/a&gt; ) e instalar la &amp;uacute;ltima release disponible, en este momento, &lt;strong&gt;la v.0.8.17.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una vez instalada la herramienta, podemos ver los diferentes commandos disponibles poniendo el nombre del nombre,&lt;strong&gt; &amp;ldquo;azure&amp;rdquo;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/01_2D00_cli_5F00_6D47ECAE.png"&gt;&lt;img height="465" width="725" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/01_2D00_cli_5F00_thumb_5F00_4B0FE128.png" alt="01-cli" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" title="01-cli" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La sintaxis sigue el siguiente formato: (los comandos cogerlos a modo de referencia ya que se van a&amp;ntilde;adiendo nuevas funcionalidades de forma peri&amp;oacute;dica)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/5633_5F00_SyntaxDiagram_5F00_png_2D00_550x0_5F00_2FF7121A.png"&gt;&lt;img height="454" width="550" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/5633_5F00_SyntaxDiagram_5F00_png_2D00_550x0_5F00_thumb_5F00_6D37C6E1.png" alt="5633_SyntaxDiagram_png-550x0" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" title="5633_SyntaxDiagram_png-550x0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez instalada, si queremos empezar a trabajar con nuestra subscripci&amp;oacute;n, ser&amp;aacute; establecer las credencial de la cuenta o cuentas de Windows Azure que queremos administrar. &lt;/p&gt;
&lt;p&gt;Para ello podemos invocar al comando&lt;strong&gt; azure account download.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Abriendo esta URL desde el navegador e introduciendo las credenciales de nuestra subscripci&amp;oacute;n Windows Azure nos podemos descargar un fichero que contiene toda la informaci&amp;oacute;n de seguridad necesaria para poder administrar la subscripci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Una vez descargado el comando &lt;strong&gt;azure account import &amp;lt;file&amp;gt;&lt;/strong&gt; nos permitir&amp;aacute; importar las credenciales y empezar a administrar la subscripci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/02_2D00_cli_5F00_7C8B28F0.png"&gt;&lt;img height="100" width="704" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/02_2D00_cli_5F00_thumb_5F00_624ABFCC.png" alt="02-cli" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" title="02-cli" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez tenemos las credenciales, ya podemos usar la herramienta para ver nuestros servicios, crear nuevos servicios, modificar su estado etc&amp;hellip;.&lt;/p&gt;
&lt;p&gt;Por ejemplo, podemos administrar nuestros web sites. Con el par&amp;aacute;metro &amp;ndash;h podemos ver la ayuda y los comandos disponibles.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/05_2D00_cli_5F00_2F0E8663.png"&gt;&lt;img height="699" width="613" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/05_2D00_cli_5F00_thumb_5F00_0CD67ADD.png" alt="05-cli" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" title="05-cli" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si queremos crear un nuevo web site, podremos hacer &lt;strong&gt;azure site create&lt;/strong&gt;. Si no indicamos m&amp;aacute;s par&amp;aacute;metros, la herramienta nos pedir&amp;aacute; la informaci&amp;oacute;n que falta, como el datacenter o el nombre del servicio.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/03_2D00_cli_5F00_039A3F9C.png"&gt;&lt;img height="274" width="606" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/03_2D00_cli_5F00_thumb_5F00_493EC9BA.png" alt="03-cli" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" title="03-cli" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si listamos los sites veremos el nuevo site.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/04_2D00_cli_5F00_79F1D165.png"&gt;&lt;img height="167" width="553" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/04_2D00_cli_5F00_thumb_5F00_18C84544.png" alt="04-cli" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" title="04-cli" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/06_2D00_cli_5F00_7E87DC1F.png"&gt;&lt;img height="131" width="729" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/06_2D00_cli_5F00_thumb_5F00_163F1386.png" alt="06-cli" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" title="06-cli" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;y si te interesa saber m&amp;aacute;s sobre interoperabilidad, te animo a que vengas al Cloud Tour &lt;a href="http://www.plainconcepts.com/cloudtour/"&gt;http://www.plainconcepts.com/cloudtour/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208225" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /></entry><entry><title>Windows Azure Store</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/01/24/windows-azure-store.aspx" /><id>/blogs/ilanda/archive/2013/01/24/windows-azure-store.aspx</id><published>2013-01-24T12:31:00Z</published><updated>2013-01-24T12:31:00Z</updated><content type="html">&lt;p&gt;Windows Azure dispone de un montón de funcionalidades “de serie”, pero en más de una ocasión utilizamos herramientas hechas por terceros ya sea para obtener más servicios que los que ofrece la plataforma o para disponer de nuevo funcionalidad no existente en la plataforma.&lt;/p&gt;  &lt;p&gt;El disponer de estas herramientas no es algo nuevo, pero lo que sí es nuevo es que ahora las tenemos integradas dentro del portal de administración. Podemos disponer de un catálogo de aplicaciones, comprarlas, usarlas etc…todo desde el portal.&lt;/p&gt;  &lt;p&gt;A través del portal de administración podemos acceder a la opción “ADD-ONS”, la cuál nos dará acceso a un catálogo de aplicaciones hechas por terceros a las cuáles podemos acceder, ya sea de forma gratuita o de pago.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/01_2D00_AppStore_5F00_1B3E8707.png"&gt;&lt;img title="01-AppStore" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="01-AppStore" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/01_2D00_AppStore_5F00_thumb_5F00_1A66211D.png" width="280" height="173" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Podemos ver herramientas de monitorización con &lt;strong&gt;AppDynamics o NewRelic, servicios para trabajar con MySQL, MongoDB, SendGrid&lt;/strong&gt;….como se puede ver en las siguientes pantallas.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/02_2D00_AppStore_5F00_477B0DEB.png"&gt;&lt;img title="02-AppStore" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="02-AppStore" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/02_2D00_AppStore_5F00_thumb_5F00_581308D9.png" width="640" height="443" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/03_2D00_AppStore_5F00_162C238B.png"&gt;&lt;img title="03-AppStore" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="03-AppStore" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/03_2D00_AppStore_5F00_thumb_5F00_4987E6E7.png" width="640" height="444" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/04_2D00_AppStore_5F00_60D2EB58.png"&gt;&lt;img title="04-AppStore" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="04-AppStore" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/04_2D00_AppStore_5F00_thumb_5F00_514FD989.png" width="640" height="420" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Comentar por último, comentar que este servicio todavía no está disponible para todas las subscripciones y es posible que te encuentren con un mensaje con este…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/05_2D00_AppStore_5F00_08B5EAB8.png"&gt;&lt;img title="05-AppStore" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="05-AppStore" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/05_2D00_AppStore_5F00_thumb_5F00_3C7DE109.png" width="726" height="143" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208224" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="Windows Azure Store" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure+Store/default.aspx" /></entry><entry><title>Windows Azure y Java: Afinidad de sesión</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/01/22/windows-azure-y-java-afinidad-de-sesi-243-n.aspx" /><id>/blogs/ilanda/archive/2013/01/22/windows-azure-y-java-afinidad-de-sesi-243-n.aspx</id><published>2013-01-22T08:58:00Z</published><updated>2013-01-22T08:58:00Z</updated><content type="html">&lt;p&gt;Como ve&amp;iacute;amos en un &lt;a href="http://www.estoyenlanube.com/windows-azure-java-y-eclipse/"&gt;post anterior&lt;/a&gt; es posible trabajar de forma sencilla con Windows Azure y Java empleando el plugin de Eclipse. Vimos c&amp;oacute;mo crear una aplicaci&amp;oacute;n Java y c&amp;oacute;mo desplegarla junto con las versiones del JDK y Tomcat que necesita la aplicaci&amp;oacute;n web.&lt;/p&gt;
&lt;p&gt;Una caso con el que habitualmente te suelen encontrar desplegando aplicaciones Java, al menos con las que yo me he encontrado, es que se necesita &lt;strong&gt;afinidad de sesi&amp;oacute;n&lt;/strong&gt;&amp;hellip;que si despliego la aplicaci&amp;oacute;n en m&amp;uacute;ltiples servidores quiero que las diferentes peticiones que se hagan desde la misma m&amp;aacute;quina se hagan siempre usando el mismo servidor.&lt;/p&gt;
&lt;p&gt;Abro el navegador, empiezo a navegar por la aplicaci&amp;oacute;n y todas las peticiones de la sesi&amp;oacute;n se tienen que hacer siempre usando el mismo servidor&amp;hellip;.y &amp;iquest;esto lo permite por defecto Windows Azure? NO, pero hay soluciones.&lt;/p&gt;
&lt;p&gt;Cuando hay m&amp;aacute;s de una instancia de un rol desplegado en Cloud Services Windows Azure se encarga de realizar de forma autom&amp;aacute;tica el balanceo de carga, pero no hace un balanceo por afinidad de sesi&amp;oacute;n ni nos permite establecer la configuraci&amp;oacute;n de c&amp;oacute;mo queremos que se comporte, es una cosa transparente para nosotros.&lt;/p&gt;
&lt;p&gt;Para este tipo de escenarios el plugin de Eclipse dispone de una opci&amp;oacute;n que nos permite indicar si queremos disponer de afinidad de sesi&amp;oacute;n (sticky sessions) en la aplicaci&amp;oacute;n que vamos a desplegar, &amp;ldquo;tan sencillo como marcar un check&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/13_2D00_Eclipse_5F00_258E3B53.png"&gt;&lt;img height="555" width="802" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/13_2D00_Eclipse_5F00_thumb_5F00_3D4572B9.png" alt="13-Eclipse" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" title="13-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;iquest;Qu&amp;eacute; hace? &lt;/p&gt;
&lt;p&gt;Pues disponer de afinidad de sesi&amp;oacute;n usando el m&amp;oacute;dulo &lt;strong&gt;ARR (Application Request Routing) de Internet Information Server&lt;/strong&gt;, el cu&amp;aacute;l permite disponer de afinidad por sesi&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Cuando marcamos esta opci&amp;oacute;n, el plugin modificar los ficheros de arranque del proyecto de Windows Azure para que se instale el m&amp;oacute;dulo de ARR en las instancias que desplegamos. El m&amp;oacute;dulo de ARR se puede instalar por l&amp;iacute;nea de comandos de forma sencilla, utilizando el Microsoft Web Platform Installer.&lt;/p&gt;
&lt;p&gt;Cuando no tenemos esta opci&amp;oacute;n activada, cuando realizamos una petici&amp;oacute;n a la aplicaci&amp;oacute;n el balanceador de Windows Azure decide el servidor que tiene que atender la petici&amp;oacute;n y se la env&amp;iacute;a directamente al Tomcat que tenemos desplegado en la m&amp;aacute;quina, en el puerto que tengamos configurado.&lt;/p&gt;
&lt;p&gt;Cuando activamos la opci&amp;oacute;n, &lt;strong&gt;el m&amp;oacute;dulo de ARR de IIS se pone por medio&lt;/strong&gt;. El balanceador manda las peticiones al servidor que &amp;eacute;l considera, pero estas peticiones le llega al ARR y &amp;eacute;ste la redirecciona de nuevo al servidor Tomcat que toque teniendo en cuenta la afinidad de sesi&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Esto se consigue poniendo el IIS y el Tomcan el puerto diferentes,&lt;/strong&gt; por ejemplo el IIS en el puerto 80 y el Tomcat en el 8080. Windows Azure manda todas las peticiones al puerto 80, el m&amp;oacute;dulo de ARR decide qu&amp;eacute; servidor tiene que tratar la petici&amp;oacute;n y lo redirecciona por el puerto 8080 para que le llegue al Tomcat&amp;hellip;eso s&amp;iacute;, el ARR en su l&amp;oacute;gica de decisi&amp;oacute;n mantiene la afinidad de sesi&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Claro est&amp;aacute;, esto no es una cosa propia de aplicaciones Java, pero en este plugin de Eclipse est&amp;aacute; bastante bien solucionado, mejor incluso que Visual Studio d&amp;oacute;nde no tenemos esta opci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Eso s&amp;iacute;, si queremos hacer aplicaciones escalables, es mejor evitar siempre la afinidad de sesi&amp;oacute;n, no es una buena pr&amp;aacute;ctica.&lt;/p&gt;
&lt;p&gt;PD: y si te interesa saber m&amp;aacute;s sobre interoperabilidad, te animo a que vengas al Cloud Tour &lt;a href="http://www.plainconcepts.com/cloudtour/"&gt;http://www.plainconcepts.com/cloudtour/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208221" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="Java" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Java/default.aspx" /><category term="Cloud Services" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Cloud+Services/default.aspx" /></entry><entry><title>Windows Azure, Java y Eclipse</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/01/15/windows-azure-java-y-eclipse.aspx" /><id>/blogs/ilanda/archive/2013/01/15/windows-azure-java-y-eclipse.aspx</id><published>2013-01-15T11:16:00Z</published><updated>2013-01-15T11:16:00Z</updated><content type="html">&lt;p&gt;Como ya he comentado en m&amp;aacute;s de una ocasi&amp;oacute;n Windows Azure es una plataforma abierta para trabajar con diferentes tecnolog&amp;iacute;as y sistemas operativos, disponiendo de diferentes herramientas y SDKs para cada ocasi&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;En este post quiero ense&amp;ntilde;aros una de las opciones que hay de interoperabilidad, que no es otra que el &lt;strong&gt;plugin de Eclipse&lt;/strong&gt; para trabajar con Java y poder desplegar este tipo de aplicaciones en un &lt;strong&gt;Cloud Service&lt;/strong&gt;, en la parte de plataforma como servicio de &lt;strong&gt;Windows Azure&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Para poder instalar este plugin en Eclipse es necesario tener instalado el Sdk de Windows Azure (1.8 o superior), el JDK 1.6 o superior y la versi&amp;oacute;n de Eclipse para Java EE Developers. &lt;/p&gt;
&lt;p&gt;Una vez que se tienen instalados estos prerequisitos la instalaci&amp;oacute;n del plugin resulta bastante sencillo, desde la opci&amp;oacute;n de instalaci&amp;oacute;n de nuevo software, tal y como se ve en la primera imagen.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/1_2D00_Eclipse_5F00_0DEF8F21.png"&gt;&lt;img height="621" width="644" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/1_2D00_Eclipse_5F00_thumb_5F00_32A0A698.png" alt="1-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="1-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para poder encontrar el plugin a instalar es necesario indicar el respositorio de software; &lt;strong&gt;&lt;a href="http://dl.msopentech.com/eclipse"&gt;http://dl.msopentech.com/eclipse&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/2_2D00_Eclipse_5F00_1F1346F7.png"&gt;&lt;img height="480" width="587" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/2_2D00_Eclipse_5F00_thumb_5F00_61A2E26F.png" alt="2-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" title="2-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez realizado este sencillos pasos ya podemos crear nuestras aplicaciones Java o abrir alguna de las que ya tengamos y empezar a desplegarlas en Windows Azure! Que como ver&amp;eacute;is, es un proceso bastante sencillo.&lt;/p&gt;
&lt;p&gt;Para los que conozc&amp;aacute;is Visual Studio y hay&amp;aacute;is trabajo con &amp;eacute;l y Windows Azure, ver&amp;eacute;is que la experiencia de usuario es pr&amp;aacute;cticamente igual.&lt;/p&gt;
&lt;p&gt;Para esta demo lo primero que haremos es crear una proyecto web, un dynamic web project, d&amp;oacute;nde tendremos un JSP, nuestro &amp;ldquo;Hello World&amp;rdquo; en Java.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/3_2D00_Eclipse_5F00_3B608917.png"&gt;&lt;img height="714" width="603" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/3_2D00_Eclipse_5F00_thumb_5F00_3E263E0A.png" alt="3-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="3-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;y creamos tambi&amp;eacute;n un JSP para esta demo.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/4_2D00_Eclipse_5F00_31B81AE1.png"&gt;&lt;img height="605" width="525" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/4_2D00_Eclipse_5F00_thumb_5F00_775CA4FF.png" alt="4-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" title="4-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Con los pasos que hemos realizado hasta el momento tendr&amp;iacute;amos una aplicaci&amp;oacute;n Java normal y corriente, pero ahora hay que hacer los pasos necesarios para empaquetar esta aplicaci&amp;oacute;n en un formato que Windows Azure pueda entender.&lt;/p&gt;
&lt;p&gt;Independientemente del lenguaje de programaci&amp;oacute;n en el que se trabaje, para poder desplegar una aplicaci&amp;oacute;n en un Cloud Services, es necesario empaquetar la aplicaci&amp;oacute;n en un formato que &amp;eacute;ste pueda entender.&lt;/p&gt;
&lt;p&gt;El plugin de Eclipse, al igual que hace Visual Studio, nos permite de forma visual realizar todo este proceso&amp;hellip;empaquetar la aplicaci&amp;oacute;n e indicar la configuraci&amp;oacute;n de despliegue; n&amp;uacute;mero de instancias, puertos, protocolos etc&amp;hellip;Todo aquello que necesitemos.&lt;/p&gt;
&lt;p&gt;Empaquetar la aplicaci&amp;oacute;n Java en el formato que necesita Windows Azure es bastante sencillo, empleando el plugin que hemos instalando anteriormente, el cu&amp;aacute;l veremos que nos ha a&amp;ntilde;adido una barra con diferentes opciones y alguna que otra opci&amp;oacute;n en los men&amp;uacute;s contextuales.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/5_2D00_Eclipse_5F00_0F13DC66.png"&gt;&lt;img height="89" width="361" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/5_2D00_Eclipse_5F00_thumb_5F00_14EE7FFF.png" alt="5-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" title="5-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Por ejemplo, seleccionado el proyecto Java, desde el men&amp;uacute; contextual tendremos la opci&amp;oacute;n de empaquetar el proyecto para ser desplegado en Windows Azure, acci&amp;oacute;n que crear&amp;aacute; un nuevo proyecto especial, propio de Windows Azure, el cu&amp;aacute;l es el encargado de empaquetar la soluci&amp;oacute;n y establecer la configuraci&amp;oacute;n que queramos.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/15_2D00_Eclipse_5F00_6CDBD0DF.png"&gt;&lt;img height="80" width="655" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/15_2D00_Eclipse_5F00_thumb_5F00_4BE85E38.png" alt="15-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="15-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;La acci&amp;oacute;n empaquetar tambi&amp;eacute;n nos pedir&amp;aacute; la versi&amp;oacute;n del JSDK que queremos que se despliegue junto con mi aplicaci&amp;oacute;n, as&amp;iacute; como qu&amp;eacute; servidor queremos usar, en el ejemplo Tomcat. Esto es as&amp;iacute;, porque las m&amp;aacute;quinas de Windows Azure por defecto no tienen estos dos componentes y por tanto, es necesario que estos se incluyan e instalen junto con nuestra aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/6_2D00_Eclipse_5F00_43F0BBD6.png"&gt;&lt;img height="556" width="540" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/6_2D00_Eclipse_5F00_thumb_5F00_5BA7F33C.png" alt="6-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" title="6-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Como he comentado, esta acci&amp;oacute;n generar&amp;aacute; un proyecto de Windows Azure con un contenido similar a este. En en este proyecto d&amp;oacute;nde se configurar el WAR que queremos desplegar, el JDK, el Servidor etc&amp;hellip;lo que hace el plugin de Eclipse es que no tengamos que hacer nada o casi nada a mano, todo de forma visual desde asistentes y men&amp;uacute;s de propiedades.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/7_2D00_Eclipse_5F00_286BB9D3.png"&gt;&lt;img height="491" width="281" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/7_2D00_Eclipse_5F00_thumb_5F00_00590AB4.png" alt="7-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" title="7-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si seleccionamos las propiedades del rol podremos ver la configuraci&amp;oacute;n del mismo; ficheros que se deben incluir en el empaquetado, puertos, protocolos&amp;hellip;.&lt;/p&gt;
&lt;p&gt;Por ejemplo, en esta pantalla pod&amp;eacute;is ver que los ficheros que incluir&amp;aacute;n&amp;hellip;el JSDK, el servidor, el WAR de la aplicaci&amp;oacute;n y un bat que se encarga de la instalaci&amp;oacute;n del JSDK y servidor Tomcat.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/8_2D00_Eclipse_5F00_34210105.png"&gt;&lt;img height="455" width="640" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/8_2D00_Eclipse_5F00_thumb_5F00_1DEAE5B3.png" alt="8-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="8-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Otra cosa que podemos llegar a configurar en el acceso remoto, cosa que considero importante siempre configurar, para que podamos conectarnos por RDP a las m&amp;aacute;quinas que desplegamos en Windows Azure. Esta configuraci&amp;oacute;n la podemos establecer desde las propiedades del proyecto de Windows Azure.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/10_2D00_Eclipse_5F00_74FFD0A9.png"&gt;&lt;img height="430" width="640" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/10_2D00_Eclipse_5F00_thumb_5F00_6891AD80.png" alt="10-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="10-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez que tenemos esto, podemos usar la barra que nos ha instalado el plugin para primero, probar la aplicaci&amp;oacute;n en nuestro entorno local, y luego desplegar la aplicaci&amp;oacute;n en Windows Azure.&lt;/p&gt;
&lt;p&gt;Desde el propio Eclipse podemos lanzar la aplicaci&amp;oacute;n y usar el entorno de emulaci&amp;oacute;n que tiene el SDK de Windows Azure para poder probar la aplicaci&amp;oacute;n en nuestro entorno local como si &amp;eacute;ste estuviera desplegado en Windows Azure. &lt;/p&gt;
&lt;p&gt;Una vez que ya lo tenemos funcional en el entorno local, tendremos que desplegar la aplicaci&amp;oacute;n, ya sea de forma manual o directamente desde Eclipse.&lt;/p&gt;
&lt;p&gt;Si queremos hacer un despliegue manual, podremos usar la opci&amp;oacute;n de crear el empaquetado. Esta acci&amp;oacute;n empaquetar&amp;aacute; los ficheros que hemos indicado con la configuraci&amp;oacute;n que hayamos establecido y nos dar&amp;aacute; dos ficheros; el fichero de definici&amp;oacute;n del servicio y el fichero de configuraci&amp;oacute;n del servicio, los dos ficheros que necesito para tener la aplicaci&amp;oacute;n funcionando en Windows Azure.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/12_2D00_Eclipse_5F00_1F1F58C5.png"&gt;&lt;img height="101" width="391" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/12_2D00_Eclipse_5F00_thumb_5F00_770CA9A5.png" alt="12-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="12-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez los tengo generado, tendr&amp;eacute; que ir a la p&amp;aacute;gina de administraci&amp;oacute;n de mi subscripci&amp;oacute;n Windows Azure ( &lt;a href="http://windows.azure.com/" title="http://windows.azure.com/"&gt;http://windows.azure.com/&lt;/a&gt;), crear un Cloud Service y usar estos dos ficheros oara crear un despliegue.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/16_2D00_Eclipse_5F00_63EB7CF9.png"&gt;&lt;img height="262" width="811" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/16_2D00_Eclipse_5F00_thumb_5F00_69C62092.png" alt="16-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" title="16-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/17_2D00_Eclipse_5F00_41B37173.png"&gt;&lt;img height="431" width="567" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/17_2D00_Eclipse_5F00_thumb_5F00_478E150C.png" alt="17-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="17-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;y por &amp;uacute;ltimo, otra opci&amp;oacute;n que tenemos disponible es la opci&amp;oacute;n de configurar en Eclipse las credenciales de la subscripci&amp;oacute;n, desde las propiedades del proyecto. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/9_2D00_Eclipse_5F00_1F7B65ED.png"&gt;&lt;img height="443" width="640" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/9_2D00_Eclipse_5F00_thumb_5F00_10648713.png" alt="9-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" title="9-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si configuro las credenciales, desde el men&amp;uacute; contextual podr&amp;eacute; desplegar directamente la soluci&amp;oacute;n en la subscripci&amp;oacute;n que tenga configurada, indicando en ese proceso el Cloud Service d&amp;oacute;nde desea hacer el despliegue.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/11_2D00_Eclipse_5F00_3CA10DF7.png"&gt;&lt;img height="84" width="707" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/11_2D00_Eclipse_5F00_thumb_5F00_54C47852.png" alt="11-Eclipse" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" title="11-Eclipse" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Y con esto es todo, como veis, con la el plugin de Eclipse el despliegue de aplicaciones Java resulta bastante sencillo&amp;hellip;&lt;/p&gt;
&lt;p&gt;Eso s&amp;iacute;&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;iquest;Qu&amp;eacute; pasa si uso Eclipse en Linux o en MAC? &amp;iquest;Puedo usar este plugin? NO, veremos alternativas&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;iquest;Qu&amp;eacute; pasa si no uso Eclipse ni Visual Studio? &amp;iquest;Puedo desplegar otro tipo de aplicaciones (PHP, Node&amp;hellip;) en Cloud Services? SI, lo veremos&amp;hellip;&lt;/p&gt;
&lt;p&gt;&amp;iquest;Qu&amp;eacute; se despliegue con la aplicaci&amp;oacute;n el JDK y el Tomcat no har&amp;aacute; que el tama&amp;ntilde;o del empaquetado sea muy grande? SI, pero tambi&amp;eacute;n hay soluciones que veremos&amp;hellip;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208220" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="Java" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Java/default.aspx" /><category term="Cloud Services" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Cloud+Services/default.aspx" /></entry><entry><title>VM Depot: Catálogo open source de máquinas virtuales</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/01/12/vm-depot-cat-225-logo-open-source-de-m-225-quinas-virtuales.aspx" /><id>/blogs/ilanda/archive/2013/01/12/vm-depot-cat-225-logo-open-source-de-m-225-quinas-virtuales.aspx</id><published>2013-01-12T13:00:00Z</published><updated>2013-01-12T13:00:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;VM Depot es una cat&amp;aacute;logo open source de m&amp;aacute;quinas virtuales&lt;/strong&gt; preconfiguradas creado por la comunidad que pueden ser f&amp;aacute;cilmente desplegadas en Windows Azure. Estas &lt;strong&gt;m&amp;aacute;quinas vienen preconfiguradas&lt;/strong&gt; con software, aplicaciones, herramientas de desarrollo etc&amp;hellip;&lt;/p&gt;
&lt;p&gt;Cualquier persona puede ver el cat&amp;aacute;logo de m&amp;aacute;quinas existentes y desplegar una m&amp;aacute;quina virtual en cuesti&amp;oacute;n de minutos en su propia subscripci&amp;oacute;n de Windows Azure, una maravilla!! &lt;/p&gt;
&lt;p&gt;y claro est&amp;aacute;, lo mismo que puedes usar m&amp;aacute;quinas existentes, puedes crear tus propias im&amp;aacute;genes &lt;strong&gt;contribuyendo al cat&amp;aacute;logo&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Este servicio ha sido creado por &amp;ldquo;Microsoft Open Technologies&amp;rdquo;, una subsidiaria de Microsoft, y pod&amp;eacute;is acceder al mismo a trav&amp;eacute;s de &lt;a href="http://vmdepot.msopentech.com" title="http://vmdepot.msopentech.com"&gt;http://vmdepot.msopentech.com&lt;/a&gt;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/1_2D00_VMDepot_5F00_0C9E4910.png"&gt;&lt;img height="549" width="482" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/1_2D00_VMDepot_5F00_thumb_5F00_23E94D81.png" alt="1-VMDepot" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="1-VMDepot" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ahora mismo ya hay diversas m&amp;aacute;quinas virtuales de algunos partners como &lt;a href="http://www.altlinux.com/"&gt;Alt Linux&lt;/a&gt;, &lt;a href="http://basho.com/blog/"&gt;Basho&lt;/a&gt;, &lt;a href="http://bitnami.org/"&gt;Bitnami&lt;/a&gt; o &lt;a href="http://www.hupstream.com/en/"&gt;Hupstream&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/2_2D00_VMDepot_5F00_7040E122.png"&gt;&lt;img height="737" width="715" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/2_2D00_VMDepot_5F00_thumb_5F00_729A6320.png" alt="2-VMDepot" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="2-VMDepot" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cualquier usuario puede pertenecer a la comunidad y hacer sus propios aportes. El proceso resulta bastante sencillo, desde el men&amp;uacute; de publicar se indica todo lo necesario para poder hacer tus contribuciones:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/image_5F00_65C00D02.png"&gt;&lt;img height="464" width="640" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/image_5F00_thumb_5F00_2F6EE4F3.png" alt="image" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" title="image" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;y desplegar una existente, es tan f&amp;aacute;cil como generar el script de despliegue, que te la l&amp;iacute;nea de comandos que tienes que lanzar para desplegar la imagen en tu subscripci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/4_2D00_VMDepot_5F00_1BE18552.png"&gt;&lt;img height="236" width="812" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/4_2D00_VMDepot_5F00_thumb_5F00_61860F70.png" alt="4-VMDepot" border="0" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" title="4-VMDepot" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;y si quieres saber m&amp;aacute;s sobre el servicio de m&amp;aacute;quinas virtuales, c&amp;oacute;mo trabajar con ellas, c&amp;oacute;mo administrarlas etc&amp;hellip;pues igual te interesa acudir al Cloud Tour &lt;a href="http://www.plainconcepts.com/cloudtour/" title="http://www.plainconcepts.com/cloudtour/"&gt;http://www.plainconcepts.com/cloudtour/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208223" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="Windows Azure Virtual Machines" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure+Virtual+Machines/default.aspx" /></entry><entry><title>Cloud Tour</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2013/01/08/cloud-tour.aspx" /><id>/blogs/ilanda/archive/2013/01/08/cloud-tour.aspx</id><published>2013-01-08T14:41:00Z</published><updated>2013-01-08T14:41:00Z</updated><content type="html">&lt;p&gt;Despu&amp;eacute;s de las giras de SQL Server, HTML y Visual Studio, le ha tocado el turno a la nube, con una gira que organizamos desde Plain Concepts por cinco ciudades.&lt;/p&gt;
&lt;p&gt;Las plataformas de Cloud Computing pueden llegar a ofrecer grandes beneficios a las aplicaciones desplegadas en ellas; ahorro de costes, escalabilidad, disponibilidad... &lt;/p&gt;
&lt;p class="description"&gt;Durante las diferentes sesiones de este evento veremos c&amp;oacute;mo trabajar con Windows Azure como plataforma de Cloud Computing, haciendo especial especial hincapi&amp;eacute; en las diferentes opciones de interoperabilidad que existen y c&amp;oacute;mo es posible trabajar con lenguajes de programaci&amp;oacute;n como &lt;b&gt;Java, Node.js o PHP&lt;/b&gt; e incluso desde diferentes sistemas operativos, &lt;b&gt;Linux y MAC.&lt;/b&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agenda:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;09:30 Introducci&amp;oacute;n a la plataforma &lt;/li&gt;
&lt;li&gt;10:30 IaaS - Linux, M&amp;aacute;quinas y Redes Virtuales &lt;/li&gt;
&lt;li&gt;11:30 Caf&amp;eacute; &lt;/li&gt;
&lt;li&gt;11:45 PaaS, trabajando con Java y Eclipse &lt;/li&gt;
&lt;li&gt;12:30 PHP y Azure Web Sites &lt;/li&gt;
&lt;li&gt;13:30 Comida &lt;/li&gt;
&lt;li&gt;14:30 Almacenamiento en la nube &amp;ndash; SQL, NoSQL &lt;/li&gt;
&lt;li&gt;15:30 Big Data y Hadoop &lt;/li&gt;
&lt;li&gt;16:30 Desarrollo de backends para el desarrollo de aplicaciones m&amp;oacute;viles &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Fechas y ciudades:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;30 de enero &amp;ndash; Sevilla &lt;/li&gt;
&lt;li&gt;31 de enero &amp;ndash; Madrid &lt;/li&gt;
&lt;li&gt;7 de febrero &amp;ndash; Barcelona &lt;/li&gt;
&lt;li&gt;12 de febrero &amp;ndash; Bilbao &lt;/li&gt;
&lt;li&gt;28 de febrero &amp;ndash; Santiago &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La agenda completa y registro lo pod&amp;eacute;is encontrar en &lt;a href="http://www.plainconcepts.com/cloudtour/"&gt;http://www.plainconcepts.com/cloudtour/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.plainconcepts.com/"&gt;&lt;img height="50" width="240" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/Plain_2D00_Concepts_5F00_5945AC60.png" alt="Plain Concepts" border="0" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" title="Plain Concepts" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=208150" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="PHP" scheme="http://geeks.ms/blogs/ilanda/archive/tags/PHP/default.aspx" /><category term="Linux" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Linux/default.aspx" /><category term="Java" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Java/default.aspx" /><category term="NOSQL" scheme="http://geeks.ms/blogs/ilanda/archive/tags/NOSQL/default.aspx" /></entry><entry><title>Herramientas de monitorización: Foglight</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2012/12/19/herramientas-de-monitorizaci-243-n-foglight.aspx" /><id>/blogs/ilanda/archive/2012/12/19/herramientas-de-monitorizaci-243-n-foglight.aspx</id><published>2012-12-19T12:00:00Z</published><updated>2012-12-19T12:00:00Z</updated><content type="html">&lt;p&gt;Hace no mucho comentaba &lt;a href="http://www.estoyenlanube.com/tip-herramientas-de-monitorizacion-de-windows-azure/"&gt;algunas herramientas interesantes&lt;/a&gt; para monitorizar aplicaciones desplegadas en Windows Azure.&lt;/p&gt;  &lt;p&gt;Hoy os comento otra aplicación que también me ha parecido bastante interesante, peor que todavía no está en versión no release; &lt;strong&gt;&lt;a href="http://foglight-on-demand.com/content/en/index.html"&gt;Foglight&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;En &lt;a href="http://foglight-on-demand.com/content/en/index.html"&gt;http://foglight-on-demand.com/content/en/index.html&lt;/a&gt; podéis encontrar información completa sobre la aplicación y cómo acceder a una versión de pruebas de 30 días. De momento, al no estar en versión release, no tiene una política de precios, pero la herramienta no pinta nada mal, habrá que estar atento.&lt;/p&gt;  &lt;p&gt;Una vez que tengáis la cuenta creada podréis configurar de forma muy rápida la monitorización indicando la subscripción que queréis monitorizar y el certificado de administración de la cuenta. Una vez que hayáis incluido estos datos el sistema descubre las aplicaciones desplegadas para que podáis indicar cuáles de ellas queréis monitorizar.&lt;/p&gt;  &lt;p&gt;Una vez configurado, se puede ver información muy interesante de diagnóstico, configurar alertas etc…&lt;/p&gt;  &lt;p&gt;.&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/1_5F00_121E1FC1.png"&gt;&lt;img title="1" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="1" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/1_5F00_thumb_5F00_217181D0.png" width="851" height="571" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/3_5F00_7B9B5B6C.png"&gt;&lt;img title="3" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="3" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/3_5F00_thumb_5F00_5A3BB5D0.png" width="848" height="565" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/4_5F00_38DC1034.png"&gt;&lt;img title="4" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="4" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/4_5F00_thumb_5F00_6197757D.png" width="500" height="410" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/5_5F00_4D31AFF2.png"&gt;&lt;img title="5" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="5" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/5_5F00_thumb_5F00_647CB463.png" width="500" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/7_5F00_14C3891A.png"&gt;&lt;img title="7" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="7" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/7_5F00_thumb_5F00_0F086F74.png" width="500" height="275" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=207811" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /></entry><entry><title>Windows Server 2012 Roadshow en Bilbao</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2012/12/04/windows-server-2012-roadshow-en-bilbao.aspx" /><id>/blogs/ilanda/archive/2012/12/04/windows-server-2012-roadshow-en-bilbao.aspx</id><published>2012-12-04T08:59:00Z</published><updated>2012-12-04T08:59:00Z</updated><content type="html">&lt;p&gt;El próximo 14 de diciembre pasará por Bilbao el Roadshow de Windows Server 2012, dónde tendré la suerte de acompañar a Samuel Lopez hablando con Windows Server 2012 en Windows Azure, y la creación de nube híbridas para aprovechar lo mejor de los dos mundos.&lt;/p&gt;  &lt;p&gt;Registro:&lt;/p&gt;  &lt;p&gt;&lt;a title="https://ws2012rocks.msregistration.com/abstract.aspx?id=7d701162-706c-474e-a801-3ad70ab0658f&amp;amp;Eventid=268" href="https://ws2012rocks.msregistration.com/abstract.aspx?id=7d701162-706c-474e-a801-3ad70ab0658f&amp;amp;Eventid=268"&gt;https://ws2012rocks.msregistration.com/abstract.aspx?id=7d701162-706c-474e-a801-3ad70ab0658f&amp;amp;Eventid=268&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Agenda:&lt;/p&gt;  &lt;p&gt;9:00 - 9:15 Registro   &lt;br /&gt;9:15 - 9:30 bievenida (Samuel López)    &lt;br /&gt;9:30 - 10:30 Windows Server 2012 Novedades (Samuel López)    &lt;br /&gt;10:30 - 11:45 Hyper-V 3.0 (Samuel lópez)    &lt;br /&gt;11:45 - 12:00 Descanso    &lt;br /&gt;12:00 - 13:00 Windows Azure y nubes hibridas (Ibon Landa)&lt;/p&gt;  &lt;p&gt;Espero veros allí!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=207671" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="Windows Server 2012" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Server+2012/default.aspx" /></entry><entry><title>Tip: Herramientas de monitorización de Windows Azure</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2012/11/22/tip-herramientas-de-monitorizacion-de-windows-azure.aspx" /><id>/blogs/ilanda/archive/2012/11/22/tip-herramientas-de-monitorizacion-de-windows-azure.aspx</id><published>2012-11-22T17:41:00Z</published><updated>2012-11-22T17:41:00Z</updated><content type="html">&lt;p&gt;Cómo monitorizar Azure? Qué herramienta es la máquina adecuada? y permite PaaS, IaaS, SQL Database etc…son las típicas preguntas que surgen cuando desplegamos en Windows Azure. &lt;/p&gt;  &lt;p&gt;El nuevo portal ofrece más información que el anterior, pero generalmente resulta insuficiente para muchas aplicaciones, lo que hace que se tengan que valorar otras herramientas.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/monitorizacionazure_5F00_038F9445.png"&gt;&lt;img title="monitorizacionazure" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="monitorizacionazure" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/monitorizacionazure_5F00_thumb_5F00_3AF5A573.png" width="919" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Aunque System Center permite realizar muchas de estas tareas, es una herramienta que un muchos casos excede enormemente las necesidades que tenemos en cuanto a monitorización, siendo una herramienta demasiada completa y cara para lo que suelen necesitar muchas empresas que están desplegando en Windows Azure. &lt;strong&gt;Ojalá ofrezcan este servicio en la nube!!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Dos las herramienta que más me ha gustado bastante, no son las únicas, son &lt;strong&gt;&lt;a href="http://www.appdynamics.com/azure.php"&gt;AppDynamics&lt;/a&gt; y &lt;a href="http://newrelic.com/windowsazure"&gt;NewRelic&lt;/a&gt;.&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;Ambas herramientas se basan en la instalación de un agente dentro de la máquina, que recoge toda la información de monitorización y diagnóstico de la misma y la centraliza para que ésta pueda ser accesible a través de una consola web de administración.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/addiagram_5F00_037A5E5A.png"&gt;&lt;img title="addiagram" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="addiagram" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/addiagram_5F00_thumb_5F00_4E212627.png" width="600" height="410" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En la página oficial de Windows Azure podéis encontrar &lt;a href="http://www.windowsazure.com/en-us/develop/net/how-to-guides/new-relic/"&gt;información detallada sobre cómo es posible hacer uso de NewRelic&lt;/a&gt;, cómo conseguir una cuenta, el coste y cómo poder desplegar su agente para disponer de toda la información de monitorización y diagnóstico.&lt;/p&gt;  &lt;p&gt;Del mismo modo podéis encontrar información sobre &lt;a href="http://www.appdynamics.com/azure/how-to-guide/html/"&gt;AppDynamics en su web bastante detallada&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/newrelic_5F00_app_5F00_51DECAF7.png"&gt;&lt;img title="newrelic_app" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:5px 5px 5px 0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="newrelic_app" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/newrelic_5F00_app_5F00_thumb_5F00_05E3447E.png" width="650" height="710" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=207461" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="Monitorización" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Monitorizaci_F300_n/default.aspx" /></entry><entry><title>Añadir un Cloud Service a una red virtual</title><link rel="alternate" type="text/html" href="/blogs/ilanda/archive/2012/11/21/a-241-adir-un-cloud-service-a-una-red-virtual.aspx" /><id>/blogs/ilanda/archive/2012/11/21/a-241-adir-un-cloud-service-a-una-red-virtual.aspx</id><published>2012-11-21T08:21:00Z</published><updated>2012-11-21T08:21:00Z</updated><content type="html">&lt;p&gt;Como todos seguro que ya sabéis desde junio una de las grandes novedades de la plataforma son la posibilidad de &lt;a href="http://www.estoyenlanube.com/windows-azure-virtual-machines/"&gt;desplegar máquinas virtuales dentro de Windows Azure&lt;/a&gt;. Para los que no lo conozcáis, resumiendo y simplificando un poco podemos decir que es un Hyper-V en la nube, dónde podemos desplegar cualquier tipo de sistema operativo, &lt;strong&gt;Microsoft&lt;/strong&gt; o &lt;strong&gt;Linux&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/12.3_5F00_22CD6F0F.png"&gt;&lt;img title="12.3" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="12.3" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/ilanda/12.3_5F00_thumb_5F00_600E23D6.png" width="640" height="458" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Así mismo, otra de las grandes novedades es la posibilidad de&lt;strong&gt; crear redes virtuales&lt;/strong&gt; entre las máquinas que tenemos desplegadas en la plataforma o incluso entre servidores que tengamos en la nube con servidores que tengamos en un entorno local, posibilitando escenarios de nube híbrida con un potencia descomunal.&lt;/p&gt;  &lt;p&gt;Generalmente me estoy encontrando que muchos asocian las redes virtuales sólo con la posibilidad de crear máquinas virtuales, como si sólo se pudiese crear este tipo de red entre máquinas virtuales…pues no! las redes virtuales están tanto para IaaS como para PaaS, es decir, tanto para máquinas virtuales como para cloud services.&lt;/p&gt;  &lt;p&gt;Es más que posible que esta confusión viene del hecho de que Visual Studio, ni ningún otro IDE, permite configurar de forma visual la red virtual en la que queremos incluir un determinado despliegue de Cloud Services. Si queremos que una aplicación desplegada en un Cloud Services se una a una red virtual, tendremos que modificar el XML de configuración del servicio de forma manual.&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NetworkConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;VirtualNetworkSite&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;NetworkName&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;AddressAssignments&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;InstanceAddress&lt;/span&gt; &lt;span class="attr"&gt;roleName&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Web&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Subnets&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Subnet&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;SubNetName&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Subnets&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;InstanceAddress&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;AddressAssignments&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NetworkConfiguration&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=207460" width="1" height="1"&gt;</content><author><name>ilanda</name><uri>http://geeks.ms/members/ilanda/default.aspx</uri></author><category term="Windows Azure" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Windows+Azure/default.aspx" /><category term="Virtual Network" scheme="http://geeks.ms/blogs/ilanda/archive/tags/Virtual+Network/default.aspx" /></entry></feed>