- Cómo securizar aplicaciones web usando ACS y tokens JWT.
- Desplegar aplicaciones web en Windows Azure WebSites que hagan uso de WIF.
- Cómo securizar servicios WebAPI usando ACS y tokens JWT.
- Cómo securizar una aplicación MVC que contenga tanto aplicaciones web como servicios WebAPI.
- Cómo securizar aplicaciones web usando Windows Azure Active Directory ( WAAD ).
- Cómo hacer uso del tenant de WAAD de Office 365 para securizar aplicaciones web con ACS.
- Securizar aplicaciones Windows 8 con ACS y WAAD
- Securizar aplicaciones Windows Phone 8 con ACS
Siguiendo con la serie de post sobre gestión de identidad y seguridad basada en claims, después de ver cómo es posible securizar aplicaciones Windows 8, en esta entrada toca hablar de Windows Phone 8.
Para este ejemplo partimos de post anterior, dónde veíamos cómo usar WebAutenticationBroker para securizar aplicaciones Windows 8, y los cambios que debíamos hacer en nuestro servicio WebAPI para generar el token que autenticación.
En Windows Phone 8 NO tenemos disponible la librería Windows Autentication Library (AAL), ni tampoco el WebAutenticationBroker, pero aún así, veremos cómo el código a realizar es bastante sencillo.
Después de crear una aplicación de ejemplo de Windows Phone 8 en Visual Studio, crearemos una nueva página llamada SignIn.xaml dónde meteremos la lógica de autenticación. En la página principal de nuestra aplicación podemos añadir la lógica necesaria para que si el usuario no está autenticado, se le lleve a esta página.
La página de SingIn lo único que va a tener es un control WebBrowser, que será el encargado de mostrar la página de autenticación del proveedor o proveedores de identidad que tengamos configurados en Windows Azure Access Control.
En la página sólo tendremos que código, para que en el webrowser se vea la ventana de login del proveedor de identidad.
Fijaros en que la URL que mostramos es exactamente la misma que usábamos en el ejemplo de Windows 8 con WebAuthenticationBroker. Al igual que el ejemplo anterior, el namespace del ACS es “estoyenlanube”, mientras que el servicio WebAPI lo tengo desplegado en https://estoyenlanube.azurewebsites.net. Lo tengo desplegamos en un servidor real porque ACS no es capaz de redirigir a direcciones localhost.
public SignIn() { InitializeComponent(); signInBrowser.IsScriptEnabled = true; } protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { base.OnNavigatedTo(e); string authURL = string.Format( "https://estoyenlanube.accesscontrol.windows.net:443/v2/wsfederation?wa=wsignin1.0&wtrealm=https://estoyenlanube.azurewebsites.net/&wreply=https://estoyenlanube.azurewebsites.net/api/federation"); //navigate to it signInBrowser.Navigate(new Uri(authURL)); }
Con este código mostramos la ventana de login, pero una vez autenticado tenemos que ser capaces de coger el token de autenticación para poder usarlo en las llamadas a nuestro servicio WebAPI. Para ello usaremos el evento Naviagating para llamar cuando el navegador va a la URL que le hemos que tiene que redirigir una vez autenticado. El token lo obtenemos de la misma manera que el ejemplo de Windows 8.
private void Navigating(object sender, NavigatingEventArgs e) { string returnURL = e.Uri.ToString(); if (returnURL.StartsWith("https://estoyenlanube.azurewebsites.net/api/federation/end")) { e.Cancel = true; signInBrowser.Visibility = System.Windows.Visibility.Collapsed; var token = returnURL.Substring(returnURL.IndexOf("token=", StringComparison.Ordinal) + 6); DoGet(token); } } async Task DoGet(string token) { HttpClient httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Authorization", "Bearer " + token); var response = await httpClient.GetStringAsync(https://estoyenlanube.azurewebsites.net/api/values); }