Pour différents besoins dans une application, voici comment identifier l’utilisateur de votre application de manière unique en C# en utilisant le Windows account authorization.
Création d’un projet
Avant tout, il faut évidement créer une nouvelle application Universelle. Et il va falloir associer votre application aux stores sinon vos appels aux services Microsoft seront ignorés. Pour rappel, il suffit sur chacun des deux projets (Windows 8.1) et (Windows Phone 8.1) faire un clic droit, puis Windows Store ► Associer l’application au Windows Store.
Si vous ne faite pas cela vous aurez toujours le message :
« Impossible de se connecter au service.
Il est actuellement impossible de vous connecter au service dont vous avez besoin. Vérifiez votre connexion réseau ou réessayer ultérieurement«
Demande du token
Ajouter le using dans votre classe:
using Windows.Security.Authentication.OnlineId;
Et voici le code très simple pour récupérer le token :
static async Task Connect() { string microsoftAccountToken = ""; var serviceTicketRequest = new List(); serviceTicketRequest.Add( new OnlineIdServiceTicketRequest("wl.signin wl.basic", "DELEGATION") ); var authenticator = new OnlineIdAuthenticator(); try { var result = await authenticator.AuthenticateUserAsync( serviceTicketRequest, CredentialPromptType.PromptIfNeeded ); if (result.Tickets[0].Value != string.Empty) { microsoftAccountToken = result.Tickets[0].Value; } } catch (System.OperationCanceledException) { //todo: op. annulée } catch (System.Exception ex) { //todo : op. impossible } return microsoftAccountToken; }
Le token sera un string qui fera près d’un kilo octet comme ce token fictif :
Récupérer le nom de l’utilisateur
Maintenant il est alors facile de récupérer le nom et prénom de votre utilisateur comme ceci :
static string URI_API_LIVE = "https://apis.live.net/v5.0/"; static string URI_USER_INFO = URI_API_LIVE + "me?access_token="; public static async Task<string> GiveName() { var accessToken = await Connect(); if (string.IsNullOrEmpty(accessToken)) return ""; var client = new HttpClient(); var result = await client.GetAsync(new Uri(URI_USER_INFO + accessToken)); string jsonUserInfo = await result.Content.ReadAsStringAsync(); if (jsonUserInfo != null) { var json = JsonObject.Parse(jsonUserInfo); return json["name"].GetString(); } else { return ""; } }
Vérifier que le token est valide
Si dans votre code vous stockez le token, il faudra au lancement de votre application vérifier que le token soit valide. La procédure est aussi simple que ça :
static string URI_API_LIVE = "https://apis.live.net/v5.0/"; static string URI_USER_INFO = URI_API_LIVE + "me?access_token="; private static async Task<string> TestToken(string token) { if (String.IsNullOrEmpty(token)) { return await Connect(); } var client = new HttpClient(); var result = await client.GetAsync(new Uri(URI_USER_INFO + token)); if (result.StatusCode == HttpStatusCode.Accepted) { return token; } else { return await Connect(); ; } }
Voilà, je suis allé à l’essentiel sans vous polluer d’autre chose. Notez que vous pouvez récupérer avec l’accord de votre utilisateur, sa photo, ses contact, son calendrier etc… ! A vous de mettre ça en place correctement dans votre projet !
Et bien, merci Christophe ! Je n’en suis pas là, mais ça me parle 😉
bâ, ça pourra toujours aider un dév un de ses quatres 🙂
Mais je me dis que cela pourra peut-être me servir plus tard…. Sérieusement !