Freigeben über


Senden einer authentifizierten Nachricht an den Windows Phone-Pushbenachrichtigungsdienst

Veröffentlichung des Originalartikels: 05.06.2012

Der Pushbenachrichtigungsdienst ist ein cooles Feature von Windows Phone, mit dem Sie u. a. Toastnachrichten senden oder eine Live-Kachel usw. für Ihre Windows Phone-Anwendung aktualisieren können. Sie können den Dienst ohne zusätzliche Übertragungssicherheitsprotokolle verwenden. In diesem Fall gilt allerdings eine Beschränkung auf maximal 500 Nachrichten pro Tag. Wenn Sie jedoch SSL verwenden, um eine Sitzung mit gegenseitiger Authentifizierung mit dem Pushbenachrichtigungsdienst einzurichten, können Sie eine unbeschränkte Anzahl von Nachrichten senden. Dies erhöht den Anreiz für die Sicherung der Sitzung. Leider ist die Dokumentation für dieses Verfahren nicht besonders gut. Hier erweisen sich glücklicherweise die Foren im Windows Phone App-Hub als ziemlich hilfreich. Lesen Sie die Artikel, und Sie werden Informationen zu diesem Thema finden. Ich habe mir allerdings gedacht, es wäre nicht schlecht, alles in einem einfachen Dokument zusammenzufassen und so Zeit für die Suche zu sparen. Das hätte ja eigentlich schon das Produktteam machen sollen. :-) Und los geht's:

  1. Informationen zu den Anforderungen an das Zertifikat für die Herstellung der sicheren Kommunikation finden Sie hier: https://msdn.microsoft.com/en-us/library/ff941099(v=vs.92). Am einfachsten ist es jedoch, wenn ein SSL-Zertifikat von einer der unterstützten Zertifizierungsstellen verwendet wird. Eine Liste der unterstützten Zertifizierungsstellen finden Sie hier: https://msdn.microsoft.com/en-us/library/gg521150(v=vs.92).
  2. Sie müssen das Zertifikat in den App-Hub hochladen. Das PFX mit dem privaten Schlüssel wird nicht benötigt, nur die öffentliche Version des Zertifikats (z. B. die CER-Datei). Melden Sie sich am App-Hub an, und klicken Sie dann auf Ihren Kontonamen in der Ecke oben links, um das Zertifikat hochzuladen. Auf der Seite für die Kontoverwaltung ist unterhalb des Kontonamens ein Link Zertifikate zu finden. Klicken Sie auf den Link, und folgen Sie den Anweisungen für das Hochladen des Zertifikats.
  3. Erstellen Sie dann in Ihrer Windows Phone-Anwendung eine Instanz der HttpNotificationChannel-Klasse. Verwenden Sie dabei den allgemeinen Namen (Common Name, CN) des SSL-Zertifikats als zweiten Parameter für den neuen Kanal. Den allgemeinen Namen Ihres Zertifikats finden Sie, indem Sie auf die CER-Datei des Zertifikats doppelklicken, um es zu öffnen, und dann zur Registerkarte Details wechseln. Klicken Sie dort auf die Eigenschaft Subject. Im unteren Fensterbereich werden Werte angezeigt, von denen der erste etwa wie folgt aussieht: "CN = www.contoso.com". In diesem Beispiel wird nur der Teil "www.contoso.com" verwendet. Der neu erstellte Kanal sollte dann so aussehen: pushChannel = new HttpNotificationChannel("meinKanalname", "www.contoso.com");
    1. HINWEIS: Wenn Sie bereits Kanäle für verschiedene Geräte erstellt haben, müssen Sie den Kanal mit der HttpNotificationChannel.Find-Methode suchen und dann den Kanal durch .Close und .Dispose entfernen. Danach müssen Sie ihn neu erstellen, damit Sie Ihren allgemeinen Namen der Verbindung zuordnen können.
  4. An der Stelle, an der der serverseitige Code ausgeführt wird, muss das Zertifikat einschließlich des privaten Schlüssels (also der PFX-Datei) installiert werden. Sie müssen auch sicherstellen, dass das Konto für Ihren Anwendungspool Zugriff auf die privaten Schlüssel für das Zertifikat hat. Verwenden Sie dazu die Microsoft Management Console (MMC), und fügen Sie das Zertifikate-Snap-In für den lokalen Computer hinzu. Nachdem Sie das Zertifikat im Knoten Eigene Zertifikate installiert haben, klicken Sie mit der rechten Maustaste in der MMC auf das Zertifikat, und wählen Sie Alle Aufgaben...Private Schlüssel verwalten aus. Dann müssen Sie das Konto für den Anwendungspool, den Ihre Anwendung verwendet, hinzufügen und mindestens Leserechte für die Schlüssel vergeben.
    1. HINWEIS: Wenn Sie die neuen, integrierten Konten in IIS 7.5, wie z. B. ApplicationPoolIdentity, verwenden, müssen Sie den Zugriff für IIS apppoolASP.NET v4.0 konfigurieren, wobei "ASP.NET v4.0" der Name Ihres Anwendungspools ist.
  5. Im Code, der die Nachricht an den Pushbenachrichtigungsdienst sendet, müssen Sie das Zertifikat auch dem HttpWebRequest-Objekt hinzufügen. Normalerweise öffnen Sie dazu den X509-Speicher und rufen die Zertifikatauflistung für Mein Speicher auf. Sie durchsuchen dann die Auflistung mithilfe von Find anhand des Fingerabdrucks und fügen per Kopieren und Einfügen dem Code den Fingerabdruck des Zertifikats aus den Zertifikateigenschaften hinzu und verwenden das erste Zertifikat in der Auflistung (z. B. meineAuflistung[0]), das zurückgegeben wird. Nachdem Sie das Zertifikat ermittelt haben, können Sie es Ihrer Abfrage wie folgt hinzufügen: meineAbfrage..ClientCertificates.Add(meinSslZertifikat);

Weitere wichtige Punkte:

  • Das von Ihnen hochgeladene Zertifikat wird nur vier Monate lang verwendet. Wenn Sie eine Anwendung, die das Zertifikat verwendet, nicht für die Zertifizierung zum Marketplace einreichen, müssen Sie nach Ablauf der vier Monate das Zertifikat erneut hochladen. Wenn Sie eine Anwendung zur Zertifizierung für den Marketplace einreichen, haben Sie die Möglichkeit, ein Zertifikat aus der Liste der von Ihnen hochgeladenen Zertifikate auszuwählen. Wählen Sie einfach das entsprechende Zertifikat für diese Kommunikation aus, und schon sind Sie bereit.
  • Wie können Sie ausprobieren, ob alles funktioniert? Wenn Sie auf dem Windows Phone-Client die Instanz der HttpNotificationChannel-Klasse erstellen, erhalten Sie eine URI für den Benachrichtigungskanal, an den Sie Ihre Nachrichten senden. Wenn Sie sich die URI ansehen und im Pfad die Zeichenfolge "throttledthirdparty" finden, verwenden Sie keine authentifizierte Verbindung. Der Pfad enthält "unthrottledthirdparty", wenn Sie die Instanz der Klasse korrekt erstellt haben. Zudem wird dann als Protokoll HTTPS anstatt HTTP verwendet. Der ultimative Test ist natürlich das erfolgreiche Senden einer Nachricht, nachdem Sie die URI erhalten haben. Wenn die Nachricht auf Ihrem Gerät ankommt, können Sie sicher sein, dass alles funktioniert.

Dies ist ein übersetzter Blogbeitrag. Sie finden den Originalartikel unter How To Send An Authenticated Message to the Windows Phone Push Notification Service