Microsoft propose Azure Active Directory pour bénéficier d’un AD en Cloud, synchronisable ou pas, avec un AD classique. Par ailleurs, il met aussi à disposition la possibilité d’intégrer l’authentification AD dans une application Xamarin.
Azure Active Directory est la brique proposée par Microsoft dont le but est de permettre de disposer d’un annuaire Active Directory hébergé dans Azure. Et bien sûr, si vous disposez déjà d’un annuaire AD, vous pouvez le synchroniser avec la version « cloud ».
D’un autre côté, Microsoft met à disposition des développeurs le projet ADAL (Active Directory Authentication Library, accessible en télécharge- ment via Nuget ou ici : https://github.com/AzureAD/azure-activedirectory-libra- ry-for-dotnet), dont l’objectif est de permettre d’intégrer l’authentification Azure Active Directory dans une application, que ce soit une application .NET ou même une application Xamarin, puisqu’il en existe une version dédiée ! Si l’implémentation et l’utilisation d’ADAL au sein d’une applica- tion .NET ont déjà été couvertes sur Internet par différents articles de blogs ou autres, cela n’est pas le cas pour une application Xamarin, et c’est donc ce que nous allons voir par la suite.
La première étape dans la mise en place d’une authentification via Azure Active Directory consiste à créer une application, dans le portail Azure, qui sera rattachée à votre annuaire : Fig.1.
Dans les propriétés de cette application, vous devez à présent configurer les accès qui seront accordés aux utilisateurs lorsqu’ils seront authenti- fiés. Vous pouvez ainsi faire en sorte d’avoir accès aux profiles, aux infor- mations des utilisateurs, etc. Si vous ne le faites pas, l’utilisateur recevra un message d’erreur lui indiquant qu’il n’est pas autorisé à accéder à la ressource demandée Fig.2. Une fois la configuration terminée, il est temps de passer au code ! Pour utiliser ADAL dans une application Xamarin (Xamarin.iOS ou Xamarin.Android), il faut d’abord rajouter le package Nuget nécessaire.
Il existe différentes versions des packages Nuget, certaines étant en état « Prerelease », indiquant qu’il s’agit d’une version Beta. Ces versions Beta intègrent, la majorité du temps, des corrections de bugs ou de nouvelles fonctionnalités.
Le package Nuget étant maintenant installé, il faut utiliser les APIs d’ADAL pour effectuer la connexion :
public async Task<AuthenticationResult> Authenticate(string clientId, string returnUri) {
string resource = “https://graph.windows.net”
string authority = “https://login.windows.net/common”
var authContext = new AuthenticationContext(authority); if (authContext.TokenCache.ReadItems().Any())
{
authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); }
var uri = new Uri(returnUri);
var platformParams = new PlatformParameters((Activity)Forms.Context);
var authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams);
return authResult; }
Tout d’abord, on commence par récupérer un contexte d’authentification en passant en paramètre l’URL utilisée pour la connexion (dans notre cas, il s’agit de https://login.windows.net/common).
La partie « importante » concerne l’appel à la méthode AcquireTokenAsync : on passe en paramètre la ressource sur laquelle on souhaite se connecter pour en récupérer les informations (cela peut être le serveur de Microsoft pour récupérer les informations de profil, le serveur Sharepoint de l’entreprise, etc.). En retour de l’appel à cette méthode, on récupère une structure qui contient différentes informations : a Un AccessToken ;
– Une date d’expiration ;
– L’identifiant du tenant Azure sur lequel l’utilisateur s’est authentifié au travers de votre code ;
– Une classe (UserInfo) qui contient les informations « de base » de l’utilisateur : le nom, l’identifiant, etc.
Sur ces différentes informations, c’est l’AccessToken qui est important, car c’est lui que vous allez devoir envoyer dans les headers de vos requêtes Web, lorsque vous interrogerez des ressources, pour faire en sorte de pou- voir y arriver de manière authentifiée. En effet, une fois connecté via la méthode AcquireTokenAsync, c’est en utilisant le jeton d’accès que vous pouvez accéder à vos ressources. En fonction des versions de la librairie ADAL que vous utilisez, vous pouvez rencontrer des différences/nouveau- tés. Ainsi, dans la version d’ADAL pour Xamarin.Android, le renouvellement du jeton d’accès (étape normalement obligatoire lorsque vous souhaitez utiliser le jeton, mais que celui-ci a expiré, d’où l’existence de la propriété « ExpiresOn ») est géré automatiquement par la librairie. Avec ADAL pour Xamarin, vous êtes donc en mesure de vous connecter, de manière extrêmement simple, à Microsoft Azure Active Directory afin, par la suite, d’accéder à des ressources qui sont protégées et utilisables uniquement lorsque l’utilisateur est authentifié !