Come inviare un messaggio autenticato al servizio di notifica Push di Windows Phone
Articolo originale pubblicato martedì 05 giugno 2012
Il servizio di notifica Push è un'eccellente caratteristica di Windows Phone che consente di eseguire operazioni come l'invio di avvisi popup, l'aggiornamento di un riquadro animato e così via per un'applicazione Windows Phone. Potete usare il servizio senza bisogno di altri protocolli di sicurezza delle trasmissioni, ma se scegliete di usarli, potrete inviare al massimo 500 messaggi al giorno. Se tuttavia usate SSL per impostare una sessione con autenticazione reciproca al servizio di notifica Push, potete inviare un numero illimitato di messaggi. In questo modo potete rendere sicure le vostre conversazioni in modo molto più interessante. Purtroppo il processo necessario per ottenere questo risultato è documentato in maniera quantomeno insufficiente. Fortunatamente i social forum nell'hub App di Windows Phone sono molto utili, quindi potete ricavarne la procedura estrapolando alcuni suggerimenti. Per farvi risparmiare tempo e fatica, ho raccolto tutte le informazioni in un unico e semplice documento. Un'operazione che il team di prodotto avrebbe dovuto svolgere. :-) Ad ogni modo, ecco le informazioni:
- Potete consultare i requisiti per il certificato usato per stabilire questa comunicazione sicura al seguente indirizzo: https://msdn.microsoft.com/en-us/library/ff941099(v=vs.92). Per semplificare la faccenda, ho scoperto che se disponete di un certificato SSL fornito da una delle autorità di certificazione supportate, funziona perfettamente. Per consultare l'elenco delle autorità di certificazione supportate, visitate questo sito: https://msdn.microsoft.com/en-us/library/gg521150(v=vs.92).
- Dovete caricare questo certificato nell'hub App. Non è necessario il file PFX con la chiave privata, è sufficiente la versione pubblica del certificato, ovvero il file .cer. Per caricarlo, accedete all'hub App e quindi fate clic sul nome del vostro account nell'angolo in alto a sinistra. Passando alla pagina di gestione dell'account vedrete un collegamento denominato Certificates sotto il banner My Account. Fate clic sul collegamento e seguite le istruzioni per caricare il certificato.
- Nella vostra applicazione per Windows Phone potete creare un'istanza della classe HttpNotificationChannel. Quando create la nuova istanza di HttpNotificationChannel, usate il nome comune del certificato SSL come secondo parametro per il nuovo canale. Per trovare il nome comune del vostro certificato, fate doppio clic sul file .cer per aprirlo, fate clic sulla scheda Details e quindi sulla proprietà Subject. Verranno visualizzati i valori nella finestra sottostante e il primo deve essere del tipo "CN = www.contoso.com". In questo esempio userete solo la parte "www.contoso.com". Una volta creato, il nuovo canale avrà il seguente aspetto: pushChannel = new HttpNotificationChannel("myChannelName", "www.contoso.com");
- NOTA: se avete già creato canali per vari dispositivi, dovrete trovare il canale usando il metodo HttpNotificationChannel.Find, per poi chiuderlo ed eliminarlo con i metodi HttpNotificationChannel.Close e HttpNotificationChannel.Dispose. Dovrete quindi ricrearlo in modo da poter associare il vostro nome comune alla connessione.
- Nel punto in cui eseguite il codice del lato server dovete installare il certificato, con la chiave privata, ovvero il file .pfx. Dovete inoltre verificare che l'account del vostro pool di applicazioni abbia accesso alle chiavi private per tale certificato. Per questo scopo, aprite lo strumento MMC e aggiungete lo snap-in Certificati per il computer locale. Dopo aver installato il certificato nel nodo Personale, fate clic con il pulsante destro del mouse sul certificato nella console MMC e selezionate Tutte le attività...Gestisci chiavi private. Dovete aggiungere l'account per il pool di applicazioni usato dalla vostra applicazione e concedere almeno i diritti di lettura alle chiavi.
- NOTA: se usate i nuovi account incorporati in IIS 7.5, come ApplicationPoolIdentity, dovete concedere l'accesso a IIS apppool\ASP.NET v4.0, dove “ASP.NET v4.0” è il nome del pool di app.
- Nel codice creato per inviare il messaggio al servizio di notifica Push dovete aggiungere il certificato all'oggetto HttpWebRequest. Per eseguire questa operazione aprite l'archivio certificati X509, recuperate l'insieme di certificati dall'archivio personale, quindi eseguite una ricerca nell'insieme in base all'identificazione digitale, copiando e incollando l'identificazione digitale del certificato dalle relative proprietà nel vostro codice, quindi usate il primo certificato dell'insieme restituito, ad esempio myCollection[0]). Quando avete il certificato, potete aggiungerlo alla vostra richiesta in questo modo: myRequest..ClientCertificates.Add(mySslCertificate);
Altri aspetti importanti da considerare:
- Il certificato caricato viene usato solo per quattro mesi. Se non inviate un'applicazione per la certificazione al Marketplace che usa il certificato, dovrete caricarlo di nuovo. Quando inviate la vostra app per la certificazione al Marketplace, avrete l'opportunità di selezionare un certificato specifico dall'elenco di certificati che avete caricato. Selezionate il certificato che avete caricato per questo tipo di comunicazioni.
- Come verificare se funziona? Quando create l'istanza della classe HttpNotificationChannel nel client Windows Phone, ottenete un URI del canale di notifica a cui inviate i messaggi. Se non usate una connessione autenticata, osservate tale URI e noterete nel percorso l'indicazione "throttledthirdparty". Se invece avete creato correttamente l'istanza della classe, il percorso conterrà "unthrottledthirdparty" e il protocollo mostrato sarà HTTPS anziché HTTP. Per essere realmente sicuri che funzioni, dopo aver ottenuto l'URI dovete riuscire a inviare correttamente un messaggio. Se arriva senza problemi al vostro dispositivo, saprete che ha funzionato.
Questo è un post di blog localizzato. L'articolo originale è disponibile in How To Send An Authenticated Message to the Windows Phone Push Notification Service