Comment envoyer un message authentifié au service de notifications Push de Windows Phone

Article d’origine publié le mardi 5 juin 2012

Le service de notifications Push est une fonctionnalité très utile de Windows Phone qui vous permet, par exemple, d’envoyer des messages d’affichage de toast, de mettre à jour une vignette dynamique, etc. pour votre application Windows Phone. Ce service n’a pas besoin d’un autre protocole de sécurité de transmission, mais si vous en utilisez un vous êtes limité à 500 messages par jour. En revanche, si vous configurez une session authentifiée mutuelle SSL pour le service de notifications Push, vous pouvez envoyer un nombre illimité de messages. Votre conversation sera sécurisée de manière bien plus efficace. La documentation de cette procédure est malheureusement quasi inexistante. Par chance, les forums sociaux du hub Applications de Windows Phone sont assez utiles et vous pouvez rassembler suffisamment d’informations. Pour vous épargner un temps précieux à rechercher tous les éléments dont vous avez besoin, je les ai compilés en un seul document. Vous savez, le genre de chose que fait généralement l’équipe produit. :-) Le voici :

  1. Vous trouverez des informations sur les exigences de certificats pour l’établissement de cette communication sécurisée ici : https://msdn.microsoft.com/en-us/library/ff941099(v=vs.92). Pour faire encore plus simple, j’ai découvert que si vous disposez d’un certificat SSL provenant de l’une des autorités de certification prises en charge, ça fonctionne très bien, voir ici : https://msdn.microsoft.com/en-us/library/gg521150(v=vs.92).
  2. Vous devez télécharger ce certificat dans le hub Applications. Aucun besoin du PFX avec la clé privée, la version publique du certificat suffit (c.-à-d. le fichier .cer). Pour le télécharger, connectez-vous au hub Applications, identifiez-vous, puis cliquez sur le nom de votre compte dans l’angle supérieur gauche. Dans la page de gestion du compte, vous verrez un lien Certificats sous la bannière Mon compte. Cliquez sur ce lien et suivez les instructions pour télécharger le certificat.
  3. Dans votre application Windows Phone, créez une instance de la classe HttpNotificationChannel. Quand vous créez la classe HttpNotificationChannel, utilisez le nom commun (CN) du certificat SSL comme second paramètre du nouveau canal. Pour trouver le nom commun de votre certificat, double-cliquez sur le fichier .cer pour l’ouvrir, cliquez sur l’onglet Détails, puis sur la propriété Subject. La première des valeurs affichées dans la fenêtre du dessous est de type « CN = www.contoso.com » ; dans cet exemple on utilise seulement « www.contoso.com ». Votre nouveau canal doit ressembler à ça : pushChannel = new HttpNotificationChannel("myChannelName", "www.contoso.com");
    1. REMARQUE : si vous avez déjà créé des canaux pour d’autres appareils, vous devrez rechercher votre canal à l’aide de la méthode HttpNotificationChannel.Find, puis appliquer les méthodes .Close et .Dispose au canal. Vous devez ensuite le recréer pour pouvoir associer votre nom commun à la connexion.
  4. Vous devez installer le certificat, y compris la clé privée (le fichier .pfx) à l’emplacement où s’exécute votre code sur le serveur. Vous devez également vérifier que le compte de votre pool d’applications accède aux clés privées de ce certificat. Pour ce faire, lancez l’outil MMC et ajoutez le composant logiciel enfichable Certificats pour l’ordinateur local. Une fois votre certificat installé dans le nœud personnel, cliquez avec le bouton droit sur le certificat dans MMC et sélectionnez Toutes les tâches...Gérer les clés privées. Vous devez ensuite ajouter le compte du pool d’applications utilisé par votre application et lui accorder au moins le droit de lecture des clés.
    1. REMARQUE : si vous utilisez les nouveaux comptes intégrés d’IIS 7.5, comme ApplicationPoolIdentity, vous devrez accorder un accès à IIS apppool\ASP.NET v4.0, où « ASP.NET v4.0 » est le nom de votre pool d’applications.
  5. Dans le code dans lequel vous envoyez le message au service de notifications Push, vous devez ajouter le certificat à l’objet HttpWebRequest. La méthode courante consiste à ouvrir le magasin X509, obtenir la collection de certificats pour Mon magasin, faire une recherche dans la collection par empreinte numérique, dans laquelle vous devez copier et coller l’empreinte numérique du certificat à partir des propriétés de certificat de votre code, puis utiliser le premier certificat de la collection trouvé (par ex. myCollection[0]). Dès que vous avez le certificat, vous pouvez l’ajouter à votre demande de cette façon : myRequest..ClientCertificates.Add(mySslCertificate);

Autres points importants :

  • Le certificat téléchargé ne peut être utilisé que pour une durée de quatre mois. Si vous n’envoyez pas de demande de certification au marketplace qui utilise le certificat, il devra être retéléchargé. Quand vous envoyez votre application au marketplace pour obtenir sa certification, vous avez l’opportunité de choisir le certificat dans la liste de certificats que vous avez téléchargée. Il vous suffit de sélectionner le certificat que vous avez téléchargé pour ces communications.
  • Comment savez-vous que ça fonctionne ? Quand vous créez l’instance de la classe HttpNotificationChannel dans le client Windows Phone, vous obtenez un Uri de canal de notifications auquel envoyer vos messages. Observez cet Uri : si vous n’utilisez pas de connexion authentifiée, vous verrez « throttledthirdparty » dans le chemin d’accès. Mais si vous avez créé correctement votre instance de classe, le chemin d’accès contiendra « unthrottledthirdparty » ; par ailleurs, le protocole affiché sera HTTPS et non HTTP. Bien évidemment, pour vraiment s’assurer que ça fonctionne, une fois que vous avez obtenu l’Uri, vous devez pouvoir envoyer un message. Si vous le recevez sur votre appareil, alors vous savez que tout fonctionne.

Ce billet de blog a été traduit de l’anglais. L’article d’origine est disponible à la page How To Send An Authenticated Message to the Windows Phone Push Notification Service