Una de las funcionalidades que encuentro más útiles de Azure Mobile Services es la de autenticación de usuarios con Microsoft Account, Facebook, Twitter, Google y Azure Active Directory, ya que nos provee del servicio de autenticación casi sin que tengamos que escribir una sola línea de código.
Registrar nuestra app
Para poder autenticar usuarios, primero deberemos registrar nuestra aplicación con el proveedor de identidad, y luego configurar las credenciales generadas por el proveedor en Mobile Services.
De acuerdo al tipo de cuenta que querramos ofrecer soporte deberemos seguir los siguientes tutoriales:
- Cuenta de Twitter
- Cuenta de Facebook
- Cuenta de Microsoft
- Cuenta de Google
- Cuenta de Azure Active Directory
Algo importante a tener en cuenta: el valor de secreto generado por cada uno de los proveedores es una credencial de seguridad, no deberemos compartirla, ni distribuirla con nuestra aplicación.
Configurar Mobile Services
Una vez configuradas, deberemos ir al portal de Azure, a las sección de Servicios Móviles:
En la pestaña Identidad configuraremos cada uno de los datos de las cuentas que vayamos a usar:
Restringir el acceso a usuarios autenticados
Para que todo funcione, deberemos restringir el acceso a nuestros recursos, permitiendo que solamente accedan aquellos usuarios que estén autenticados.
Agregando el código de autenticación
Como ejemplo, vamos a ver cómo agregar autenticación sobre la aplicación de ejemplo de Windows Phone, que podemos bajar del Portal de Azure, y le vamos a agregar el inicio de sesión con Facebook:
1) Abrimos MainPage.xaml.cs y agregamos el siguiente código a la clase MainPage:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private MobileServiceUser usuario; | |
private async System.Threading.Tasks.Task Autenticar() | |
{ | |
while (usuario == null) | |
{ | |
string mensaje; | |
try | |
{ | |
usuario = await App.MobileService | |
.LoginAsync(MobileServiceAuthenticationProvider.Facebook); | |
mensaje = | |
string.Format("Has iniciado sesión – {0}", usuario.UserId); | |
} | |
catch (InvalidOperationException) | |
{ | |
mensaje = "Debes iniciar sesión. Inicio de sesión requerido."; | |
} | |
MessageBox.Show(mensaje); | |
} | |
} |
2) Borramos el override del método OnNavigatedTo
, y lo reemplazamos por un manejador del evento Loaded
:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
async void MainPage_Loaded(object sender, RoutedEventArgs e) | |
{ | |
await Autenticar(); | |
RefreshTodoItems(); | |
} |
3) Y cambiamos el constructor para agregar este manejador de evento:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public MainPage() | |
{ | |
InitializeComponent(); | |
this.Loaded += MainPage_Loaded; | |
} |
4) Ejecutamos nuestra aplicación, y verificamos que todo funcione correctamente.