Come eseguire l'autenticazione con Servizi notifica Push Windows (WNS) (app di Windows Runtime)

[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]

In questo argomento viene illustrato come effettuare l'autenticazione del server cloud con Servizi notifica Push Windows e ricevere un token di accesso in risposta.

Prerequisiti

Istruzioni

Passaggio 1: Registrare l'app con il dashboard

Prima di poter inviare notifiche tramite WNS, devi registrare la tua app. Esegui questa operazione tramite il dashboard, ossia il portale per gli sviluppatori che consente di inviare, certificare e gestire le app di Windows Store. Quando registri la tua app tramite il dashboard, ti vengono assegnate le credenziali — un identificatore di sicurezza del pacchetto (SID) e una chiave privata — che vengono usate dal servizio cloud per l'autenticazione in WNS.

Per la registrazione:

  1. Vai alla pagina App di Windows Store di Windows Dev Center e accedi con l'account Microsoft.

  2. Dopo l'accesso, fai clic sul link Dashboard.

  3. Nel Dashboard, seleziona Invia un'app.

    Posizione dell'opzione per l'invio di una nuova app

  4. Nella pagina Invia un'app, seleziona Nome applicazione.

    Pagina di invio di un'app

  5. Fornisci un nome univoco per l'app. Immetti il nome e fai clic sul pulsante Riserva nome. Se il nome è disponibile, viene riservato per l'app. Dopo aver riservato correttamente un nome per l'app, gli altri dettagli saranno disponibili per la modifica, se necessario.

Passaggio 2: Ottenere i valori di identità per l'app

Dopo aver riservato un nome per l'app, vengono create le credenziali di Windows Store associate. Vengono inoltre assegnati valori di identità associati, nome ed editore, che devono essere presenti nel file manifesto dell'app (package.appxmanifest). Se hai già caricato l'app in Windows Store, questi valori verranno automaticamente aggiunti al manifesto. Se l'app non è stata ancora caricata, dovrai aggiungere i valori di identità al manifesto manualmente.

  1. Seleziona il link Servizi.

    Pagina dell'app che mostra il link servizi

  2. Nella pagina Servizi, seleziona il link Servizi Live situato nella sezione Servizi mobili di Microsoft Azure.

    Pagina Servizi

  3. Nella pagina Informazioni servizi di notifica push e Live Connect seleziona Identificazione dell'app.

    Posizione dell'opzione di identificazione dell'app

  4. Nella pagina di identificazione dell'app è contenuto un elemento identity da includere nel manifesto dell'app. Apri il manifesto in un editor di testo e aggiungi l'elemento come indicato nella pagina.

    Elemento di identità che deve essere copiato nel manifesto

Passaggio 3: Ottenere le credenziali per l'app

  1. Fai clic sul link Autenticazione del servizio nella parte inferiore della stessa pagina di identificazione dell'app.

    Posizione dell'opzione di autenticazione del servizio

  2. Nella pagina Autenticazione del servizio sono indicati l'identificatore di sicurezza del pacchetto e la chiave privata. Per inviare notifiche push all'app, il servizio cloud deve usare queste esatte credenziali. Non è possibile usare le credenziali di un altro servizio cloud per inviare notifiche all'app né usare queste credenziali per inviare notifiche a un'altra app.

    Nota  È inoltre possibile usare questa pagina per generare nuove credenziali.

     

    Pagina di autenticazione del servizio in cui sono indicati l'identificatore SID e la chiave privata

  3. Carica l'identificatore SID e la chiave privata nel server cloud.

    Importante  L'identificatore SID e la chiave privata devono essere archiviati in modo sicuro ed essere accessibili dal servizio cloud. La divulgazione o il furto di queste informazioni potrebbero consentire all'autore di un attacco di inviare notifiche agli utenti senza la tua autorizzazione e a tua insaputa.

     

Passaggio 4: Inviare le credenziali del server cloud a Servizi notifica Push Windows

Il servizio cloud presenta le sue credenziali (SID e segreto client) tramite una richiesta di autenticazione HTTPS che usa il formato "application/x-www-for-urlencoded".

In questo esempio viene mostrata una richiesta di autenticazione HTTPS di esempio che include un pacchetto SID e una chiave segreta in grant_type. Se copi questo codice, ricordati di sostituire l'identificatore SID del pacchetto nel campo "client_id" e la chiave privata nel campo "client_secret" con i valori stabiliti da te. Vedi Intestazioni delle richieste e delle risposte per Servizi notifica Push Windows per informazioni sulla sintassi.


POST /accesstoken.srf HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: https://login.live.com
Content-Length: 211
 
grant_type=client_credentials&client_id=ms-app%3a%2f%2fS-1-15-2-2972962901-2322836549-3722629029-1345238579-3987825745-2155616079-650196962&client_secret=Vex8L9WOFZuj95euaLrvSH7XyoDhLJc7&scope=notify.windows.com

WNS invia al server una risposta alla tua richiesta di autenticazione. Se il codice di risposta è "200 OK" significa che l'autenticazione ha avuto esito positivo e che la risposta include un token di accesso che il server cloud deve salvare e utilizzare in tutte le notifiche inviate fino alla scadenza del token stesso.

Di seguito è mostrato un esempio di risposta WNS in caso di autenticazione riuscita.


HTTP/1.1 200 OK   
Cache-Control: no-store
Content-Length: 422
Content-Type: application/json
 
{
    "access_token":"EgAcAQMAAAAALYAAY/c+Huwi3Fv4Ck10UrKNmtxRO6Njk2MgA=", 
    "token_type":"bearer"
}

L'esempio seguente contiene il codice necessario per inviare la richiesta di autenticazione e ricevere la risposta. Puoi copiare l'esempio direttamente nel codice del tuo server cloud, ma devi includere queste direttive:

using System.Runtime.Serialization.Json;

using System.Runtime.Serialization;

using System.IO;


[DataContract]
public class OAuthToken
{
    [DataMember(Name = "access_token")]
    public string AccessToken { get; set; }
    [DataMember(Name = "token_type")]
    public string TokenType { get; set; }
}

private OAuthToken GetOAuthTokenFromJson(string jsonString)
{
    using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString)))
    {
        var ser = new DataContractJsonSerializer(typeof(OAuthToken));
        var oAuthToken = (OAuthToken)ser.ReadObject(ms);
        return oAuthToken;
    }
}

protected OAuthToken GetAccessToken(string secret, string sid)
{
    var urlEncodedSecret = HttpUtility.UrlEncode(secret);
    var urlEncodedSid = HttpUtility.UrlEncode(sid);

    var body =
      String.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=notify.windows.com", urlEncodedSid, urlEncodedSecret);

    string response;
    using (var client = new WebClient())
    {
        client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
        response = client.UploadString("https://login.live.com/accesstoken.srf", body);
    }
    return GetOAuthTokenFromJson(response);
}

Argomenti correlati

Panoramica di Servizi notifica Push Windows (WNS)

Intestazioni delle richieste e delle risposte per Servizi notifica Push Windows

Esempio di notifiche push e periodiche

Guida introduttiva: Invio di una notifica push

Come richiedere, creare e salvare un canale di notifica