Este artículo proviene de un motor de traducción automática.

Previsión: nuboso

Mashup de servicios de nube

Joseph Fultz

Descargar el ejemplo de código

Joseph FultzHasta ahora, me he pasado el tiempo en soluciones con blanco cielo de Microsoft Windows o blanco cielo de SQL para aumentar la arquitectura de lasolución.Este mes estoy echar un vistazo a cómo combinar varios servicios de nube en una única aplicación.Mi ejemplo, integrará blanco cielo deWindows, Control de acceso de Windows blanco cielo AppFabric, mapas de Bing y Facebook para proporcionar un ejemplo de la composición de servicios cloud.

Para quienes son un poco postergar al pensar en el valor del mundo real de la red social o de identidad federada, me gustaría presentar Marcelus.Esun amigo mío que es propietario de una empresa residencial, comercial y de limpieza.Al igual que mi padre en sus relaciones personales y denegocios, sabe que alguien ni obtener prácticamente cualquier cosa que desee o necesite, normalmente en algún tipo de trueque.Algunos podríanreconocer como red de los tristemente buena ol' ligas, pero miro Marcelus y se ve un nivel de vida, respiración ejemplo del Control de acceso de Windows blanco cielo AppFabric servicio (o ACS para abreviar) combinada con una poderosa red social.En la vida real ¿puedo aprovechar como él queme ayude a Marcelus y otros.

Sin embargo, en el mundo virtual, al utilizar una serie de servicios de la nube a menudo necesitan saber quién soy antes me permiten tener acceso a sus funcionalidades.Debido a que realmente no puedo programar Marcelus servir páginas Web, voy a utilizar los servicios de nube en figura 1 para proporcionar alguna funcionalidad.

Figura 1 Servicios Cloud y sus funcionalidades

Servicio Funcionalidad
Windows Azure Host de Mi sitio y servir páginas
Control de acceso de AppFabric Administrar y negociar la autenticación entre mi sitio y Facebook
Facebook Autenticar a los usuarios y proporcionar servicios de red social
Bing mapas Visualizar el hometowns de amigos

El escenario es que la exploración a la página principal de Mi sitio será autenticado por Facebook y las notificaciones se pasarán a Mi sitio.El sitio, a continuación, tire aamigos del usuario desde Facebook y posteriormente recuperar información de un amigo seleccionado.Si el amigo seleccionado tiene una ciudad especificada, el usuariopuede hacer clic en el nombre de ciudad y mostrará el mapa de Bing.

Configurar la autenticación entre los servicios

El número de diciembre de 2010 de msdn Magazine tenía un artículo de buena visión general de ACS, que se puede encontrar en MSDN.Microsoft.com/magazine/gg490345.Voy a describir las cosas específicas que tengo que hacer para federar Mi sitio con Facebook.Para obtener esta situación correctamente, estoy utilizando los laboratoriosde AppFabric, que es la vista previa para desarrolladores de Windows blanco cielo AppFabric.Además, estoy utilizando Windows blanco cielo SDK 1.3 y he instaladoWindows identidad Foundation SDK 4.0.Para empezar, me fui a Portal.appfabriclabs.com y registrados.Una vez que se tenía acceso al ACS, he seguido de la primeraparte de las instrucciones que se encuentra en el (página de ejemplos de ACS y documentación (laboratorios) CodePlexbit.LY/fuxkbl) para obtener el espacio de nombres de servicio que configurar.El siguiente objetivo era obtener Facebook configurado como un proveedor de identidades, sino para hacer que tuve que crear primero unaaplicación de Facebook (consulte instrucciones al bit.LY/e9yE3I), que da como resultado un resumen de esta manera de figura 2.

image: Facebook Application Configuration Summary

Figura 2 Resumen de configuración de aplicaciones de Facebook

Esta página de resumen es importante, como que necesitaré utilizar la información en mi configuración de Facebook como proveedor de identidades en ACS.En particular,necesitaré el identificador de aplicación y el secreto de la aplicación como puede verse en la información de configuración de ACS se muestra en figura 3.

image: ACS Facebook Identity Provider Configuration

Figura 3 Configuración del proveedor de identidad de Facebook de ACS

Tenga en cuenta que he agregado friends_hometown en el cuadro de texto de permisos de aplicación.Necesitaré esa dirección para asignarla y sin especificarla aquí no loentiendo volver de forma predeterminada.Si quería algunos otros datos que devuelve las llamadas a API gráfico sobre el usuario, necesitaría buscar en el sitio dedesarrolladores de Facebook)bit.LY/c8UoAA) e incluir el elemento en la lista de permisos de la aplicación.

Algo merece la pena mencionar cuando se trabaja con ACS: especifica las partes confiar en el que se va a utilizar cada proveedor de identidades.Si mi sitio no existe enjofultz.cloudapp.NET, se especificará una entidad de confiar en la configuración del proveedor de identidad.Esto también es cierto para mi localhost.Por lo tanto, en casode que no se desea insertar en la nube para probarlo, necesitaré configurar una fiesta de confiar en localhost y seleccionarlo, como se ilustra en figura 4.

image: ACS Facebook Identity Provider Configuration: Relying Parties

Figura 4 Configuración del proveedor de identidad de Facebook ACS: usuario de confianza de las partes

Figura 3 y figura 4 se encuentran en la misma página para configurar el proveedor de identidades.Por la misma razón, si sólo lo tenía configurado para el host local, peroa continuación, intentó autenticarse desde Mi sitio Web, que no funcione.Puedo crear una página de inicio de sesión personalizado y no hay instrucciones y un ejemplopara hacerlo en la integración de aplicación en el sitio de administración ACS.En este ejemplo, simplemente estoy teniendo la página predeterminada de ACS alojado.

Hasta ahora he configuré mi aplicación de Facebook para obtenerlos y de ACS hablando invoca una vez.El siguiente paso es configurar este proveedor de identidades parami sitio como un medio de autenticación.La forma más sencilla de hacerlo es instalar Windows identidad Foundation SDK 4.0, visite bit.LY/ew6K5z.Una vez instalado,habrá una opción de menú con el botón secundario disponible para agregar el STS referencia, como se ilustra en figura 5.

image: Add STS Reference Menu Option

Figura 5 agrega la opción de menú de la referencia de STS

En mi ejemplo, se ha utilizado un valor predeterminado ASP.Sitio NET creado en Visual Studio seleccionando un nuevo proyecto Web (función).Una vez creado, he con elbotón secundario en el sitio y vaya acerca de cómo trabajar con el asistente.Configuraré el sitio para utilizar una existente servicio de tokens de seguridad (STS) elige esaopción en el asistente y proporcionando una ruta de acceso a los metadatos de WS-Federation.Así, mi espacio de nombres del control de acceso, la ruta de acceso es:

jofultz.AccessControl.appfabriclabs.com/

    2007/FederationMetadata-06 /

    FederationMetadata.xml

Con esta información, el asistente agregará la sección de configuración <microsoft.identityModel/>para la configuración del sitio. Una vez hecho esto, agregar < httpRuntime requestValidationMode = "2.0" / >debajo de la <system.web/>elemento. Proporcionar especifiqué localhost como una usuario de confianza de las partes, debo poder ejecutar la aplicación y, tras el inicio se presentará una página de inicio de sesión ACS alojado en el que presentará Facebook, o Windows Live o Google, si está configurado así. El elemento microsoft.identityModel depende de la existencia del ensamblado Microsoft.Identity, por lo que para asegurarse de que tiene que establecer esa referencia DLL en el sitio para copiar siempre. Si no lo está, una vez que se inserta a blanco cielo de Windows no dispone de la DLL y se podrá ejecutar el sitio. Hay más de un bit de la configuración de una vez finalizado el asistente, que hace referencia a la instrucción anterior acerca de la necesidad de tener la configuración de localhost y el blanco cielo Windows hospedadas en el sitio. Por lo tanto, si el asistente se ha configurado con la ruta de acceso del host local, a continuación, una ruta de acceso para el sitio de blanco cielo Windows deberá agregarse a la <audienceUris>elemento, como se muestra aquí:

<microsoft.identityModel>

  <service>

    <audienceUris>

      < agregar value="http://jofultz.cloudapp.
NET / "/ >

      < agregar valor = "http://localhost:81/"/ >

    </audienceUris>

Además, será necesario el atributo de territorio del elemento wsFederation en el archivo config reflejar la ubicación deseada en tiempo de ejecución actual. Por lo tanto, cuando se implementan en blanco cielo de Windows, aspecto para mí:

<federatedAuthentication>

  < wsFederation passiveRedirectEnabled = "true"emisor =

   "https://jofultz.accesscontrol.appfabriclabs.com/v2/wsfederation" 

   Realm="http://jofultz.cloudapp.
NET / "requireHttps = "false"/ >

  < cookieHandler requireSsl = "false"/ >

</federatedAuthentication>

Sin embargo, si desea depurar su causa y hacer que funcione correctamente en tiempo de ejecución en el host local (para la depuración local), podrá cambiar el territorio para representar donde se aloja el sitio local, como la siguiente:

<federatedAuthentication>

  < wsFederation passiveRedirectEnabled = "true" 

   Issuer="https://jofultz.AccessControl.
appfabriclabs.com/v2/wsfederation" 

   territorio = "http://localhost:81/" 

   requireHttps = "false"/ >

  < cookieHandler requireSsl = "false"/ >

</federatedAuthentication>

Con todo lo que se ha configurado correctamente, debo poder ejecutar el sitio y, al intentar explorar la página predeterminada redirigirá a la página alojada en el ACS de inicio de sesión, donde se puede elegir Facebook como el proveedor de identidades. Una vez que hago clic en Facebook, estoy enviado a la página de inicio de sesión de Facebook autenticarse (consulte figura 6).

image: Facebook Login

Figura 6 El inicio de sesión de Facebook

Debido a que no he usado mi aplicación antes, Facebook presenta me con el cuadro de diálogo de solicitar permiso para mi aplicación, como se ve en figura 7.

image: Application Permission Request

Figura 7 solicitud de permisos de la aplicación

No desean quedar fuera de la del círculo interior de los usuarios de una aplicación de fantástica, rápidamente haga clic en permitir, después de que Facebook, ACS y mi aplicación de exchange información (a través de redirecciones del explorador) y, por último, estoy redirigido a mi aplicación. En este punto simplemente tengo una página en blanco, pero sabe quién soy y tengo un mensaje de "Bienvenida Joseph Fultz" en la parte superior derecha de la página.

Graph API de Facebook

Para mi aplicación, es necesario recuperar a los amigos que comprenden de mi red social y, a continuación, posteriormente, recuperar información acerca de los amigos. Facebook ha proporcionado la API de gráfico para que los programadores de tareas. Es bastante bien documentados y lo mejor de todo, es una implementación simple y plana, lo que facilita a comprender y usar. A fin de que las solicitudes, necesitaré un Token de acceso. Afortunadamente, que se ha pasado en las notificaciones y con la Ayuda de la identidad de Windows Foundation SDK, las notificaciones se han colocado en la identidad del principal. Las notificaciones de este aspecto:

https://schemas.xmlsoap.org/ws/2005/05/  

    reclamos/identidad/nameidentifier

  https://schemas.Microsoft.com/WS/2008/06/

    reclamos/identidad/vencimiento

  https://schemas.xmlsoap.org/ws/2005/05/

    reclamos/identidad/emailaddress

  https://schemas.xmlsoap.org/ws/2005/05/

    nombre, identidad/créditos 

  http://www.Facebook.com/Claims/AccessToken

  https://schemas.Microsoft.com/

    reclamos/07/2010/accesscontrolservice /

    identityprovider

Lo que realmente queremos fuera de ésta es la última parte del nombre completo (por ejemplo, nameidentifier, caducidad y así sucesivamente) y el valor relacionado. Por lo que creo que el método ParseClaims para las notificaciones de separación de secuencia y colocarlos y sus valores en una tabla hash para utilizan aún más y, a continuación, llame a ese método en el evento de carga de página:

protected void ParseClaims()

{

  String username = default(string);

  UserName = Page.User.Identity.Name;



  IClaimsPrincipal Principal = Thread.CurrentPrincipal de (IClaimsPrincipal);

  Identidad de IClaimsIdentity = (IClaimsIdentity) (Principal.Identity);



  foreach (notificación de Reclamación de Identity.Claims)

  {

    String [] ParsedClaimType = la reclamación.ClaimType.Split('/');

    String ClaimKey = ParsedClaimType[ParsedClaimType.Length - 1];



    _Claims.Add (ClaimKey, reclamación.Valor);

  }             

}

Crear una clase de FBHelper, donde va a crear los métodos para tener acceso a la información de Facebook que deseo. Para iniciar, se crea un método para ayudar a tomar todas las solicitudes que sea necesarias. Voy a realizar cada solicitud de uso del objeto WebClient y analizar la respuesta con el serializador de JavaScript:

Hashtable MakeFBRequest(string RequestUrl) estática pública

{

  Hashtable (ResponseValues) = default(Hashtable);



  WebClient WC = nuevo WebClient();

  URI uri = Uri nuevo (String.Format (RequestUrl, fbAccessToken));

           

  String WCResponse = WC.DownloadString(uri);

  JavaScriptSerializer JSS = JavaScriptSerializer() nuevo;

  ResponseValues = JSS.Deserializar <Hashtable> (WCResponse);



  devolver ResponseValues;

}

Tal como se muestra en este fragmento de código, cada solicitud debe tener el Token de acceso que se haya devuelto en las notificaciones. Con mi método de solicitud reutilizables en su lugar, creo un método para su análisis en una tabla hash que contiene cada uno de sus nombres y los identificadores de Facebook y fetch Mis amigos:

Hashtable GetFBFriends(string AccessToken) estática pública

{

  Hashtable (FinalListOfFriends) = Hashtable() nuevo;

  Hashtable (FriendsResponse) = MakeFBRequest (_fbFriendsListQuery, AccessToken);

  objeto [] amigos = (object []) FriendsResponse ["datos"];



  para (int idx = 0;IDX <amigos.Longitud; idx ++)

  {

    Dictionary < string, object >FriendEntry = 

      Amigos de (dictionary < string, object >) [idx];

    FinalListOfFriends.Add (FriendEntry ["id"], FriendEntry["name"]);

  }

  devolver FinalListOfFriends;

}

La deserialización de la respuesta de la lista de amigos da como resultado una estructura anidada de Hashtable - > Hashtable - > diccionario. Por tanto, hay que hacer un poco de trabajo para extraer la información y, a continuación, vuelva a colocarlo en mi propia tabla hash. Una vez en su lugar, el cambio a la página default.aspx, agregue un control ListBox, escribir algo de código para tomar los amigos y el resultado del enlace a mi nuevo cuadro de lista:

protected void GetFriends()

  {

    _Friends = FBHelper.GetFBFriends (_ (string)

      Claims["AccessToken"]);

    Esto.ListBox1.DataSource = _Friends;

    ListBox1.DataTextField = "valor";

    ListBox1.DataValueField = "clave";

    ListBox1.DataBind();

  }

Si se ejecuta la aplicación en este momento, una vez que estoy autenticado verá una lista de todos mis amigos de Facebook. Pero espere, hay más! Se necesita obtener la información disponible para cualquier amigo seleccionado para que los puedo usar para mostrar su Miciudad en un mapa. No se tengan que volver a mi clase FBHelper, agrega un método sencillo que realizará el Token de acceso y el ID del amigo seleccionado:

Hashtable GetFBFriendInfo(string AccessToken, string ID) estática pública

{

  Hashtable (FriendInfo) = 

    MakeFBRequest (String.Format (_fbFriendInfoQuery, ID) + 

    "? access_token = {0}", AccessToken);

  devolver FriendInfo;

}

Tenga en cuenta que en ambos de los métodos auxiliares de Facebook que se ha creado, hago referencia a una constante de cadena que contiene la consulta de la API de Graph necesaria:

Public const _fbFriendsListQuery de cadena =   

  "https://graph.facebook.com/me/friends?access_token={0}"; 

Public const _fbFriendInfoQuery de cadena = "https://graph.facebook.com/{0}/";

Con mi último método de Facebook en su lugar, va a agregar un control GridView a la página y configurarlo para enlazar a una tabla hash y, a continuación, en el código subyacente en el método SelectedIndexChanged para el control ListBox, podrá enlazarlo a la tabla hash devuelta por el método GetFBFriendInfo, como se muestra en figura 8.

Figura 8 Agregar un control GridView

protected void en ListBox1_SelectedIndexChanged (object sender, EventArgs e)

{

  Debug.WriteLine(ListBox1.SelectedValue.ToString());

  Hashtable (FriendInfo) = 

    FBHelper.GetFBFriendInfo ((string) _Claims ["AccessToken"],  

    ListBox1.SelectedValue.ToString());

  GridView1.DataSource = FriendInfo;

  GridView1.DataBind();

  try

  {

    Dictionary < string, object >HometownDict = 

      (Dictionary < string, object >) FriendInfo ["Miciudad"];

      _Hometown = HometownDict ["nombre"].ToString();

  }

  catch (Exception ex)

  {

    _Hometown = ""; //Not especificado";

  }

}

Ahora que tengo Mis amigos y su información proveniente del Facebook, no se podrá mover a la parte de su ciudad de mostrar en un mapa.

No hay ningún hogar similares de lugar

Para aquellos de Mis amigos que han especificado su Miciudad, me gustaría poder haga clic en el nombre de ciudad y tiene el mapa vaya allí. El primer paso es agregar la asignación a la página. Se trata de una tarea bastante sencilla y, a tal fin, Bing proporciona un buen SDK interactivo que demuestran la funcionalidad y, a continuación, le permiten examinar y copiar el código fuente. Se puede encontrar en Microsoft.com/MAPS/isdk/AJAX/. A la página default.aspx, agrego un div para contener el mapa, como la siguiente:

    < div id = "myMap"estilo = "position: relative;ancho: 400 px;Altura: 400 px;">< / div >

Sin embargo, para obtener el mapa, puedo agregar referencia de la secuencia de comandos y un poco de secuencia de comandos a la página de SiteMaster:

    < script type = "text/javascript"src="http://ECN.dev.virtualearth.
    NET /
    
      MapControl/MapControl.ashx?v=6.2 ">< /script >      
    
      < script type = "text/javascript" >
    
        mapa de var = null;
    
        función GetMap() {
    
          mapa = nuevo VEMap('myMap');
    
          mapa.LoadMap();
    
        }
    
      </script>

Teniendo esto en su lugar, cuando extraen la página te presentará con un mapa en la posición predeterminada, pero quiero mover a la ciudad de mi amigo cuando seleccione. Durante el evento SelectedIndexChanged tratado anteriormente, también dependiente de una etiqueta en la página el nombre y agregar un evento click del cliente para que el mapa de buscar una ubicación según el valor de la etiqueta:

    OnClick = "asignar.Buscar (null, hometown.innerText, 
    
        NULL, null, null, null, true, null, true); 
    
        mapa.SetZoomLevel(6);"

En el mapa.Buscar llamada, la mayoría de los parámetros al final podría quedar si así lo desea. La referencia para el método Find puede encontrarse en MSDN.Microsoft.com/library/bb429645. Eso es todo lo necesario para mostrar e interactuar con el mapa en este sencillo ejemplo. Ahora estoy listo para ejecutarse en todo su esplendor.

Si ha configurado el identityModel correctamente para trabajar con mi localhost como se mencionó anteriormente, puedo presione F5 y lo ejecuta localmente en la depuración. Por lo tanto, presione F5, se ve una ventana de explorador pop que hasta y no habrá aparece con Mis opciones de inicio de sesión. Elijo Facebook y estoy adoptada para que se muestra en la página de inicio de sesión figura 6. Una vez conectado, estoy lo redirigirá a la página default.aspx, que ahora muestra Mis amigos y un mapa de predeterminada como ésta en figura 9.

image: Demo Homepage

Figura 9 página principal de la demostración

A continuación, podrá examinar a través de Mis amigos y haga clic en uno. Obtendrá la información disponible a mí en función de su configuración de seguridad y los permisos de aplicación solicita cuando se configura el proveedor de identidades como se ve en figura 2. A continuación, haré clic en el nombre de ciudad situado encima de la asignación y el mapa se moverá a centrar en la ciudad, como se ve en figura 10.

image: Hometown in Bing Maps

Figura 10 Miciudad en mapas de Bing

Observaciones finales

Espero que he articula claramente cómo reunir varios aspectos de la plataforma de blanco cielo de Windows, mapas de Bing y Facebook, y que he mostrado lo fácil que es. Con ACS, pude crear una aplicación de ejemplo de una composición de la tecnología de la nube. Con un poco más de trabajo, es tan fácil enlazar en su propio servicio de identidad para servir como sea necesario. La belleza en esta federación de identidad es que el uso de blanco cielo de Windows permite desarrollar contra e incorporar los servicios de otros proveedores y otras plataformas, en comparación con lo que limita en una sola opción de proveedor y servicios de su proveedor, o tener que adivinar a un método de integración de baja fidelidad. No hay alimentación en la plataforma de blanco cielo de Microsoft Windows y parte de la energía de es la facilidad con puede mashed junto con otros servicios cloud.

Joseph Fultz es un arquitecto en el centro de tecnología de Microsoft en Dallas, donde trabaja con los clientes empresariales y de los ISV prototipo y diseñar soluciones de software empresariales y la demanda del mercado. Ha hablado en eventos como, por ejemplo, Tech·Ed y eventos de formación interna similar.

Gracias al siguiente experto técnico para la revisión de este artículo: Steve linehan