Procedimiento para autenticar con los Servicios de notificaciones de inserción de Windows (WNS) (aplicaciones de Windows en tiempo de ejecución)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

En este tema se explica cómo autenticar el servidor de nube con los Servicios de notificaciones de inserción de Windows (WNS) y recibir un token de acceso a cambio.

Requisitos previos

Instrucciones

Paso 1: Registra la aplicación en el panel

Antes de poder enviar notificaciones mediante WNS, debes registrar la aplicación. Esto se hace mediante el panel, el portal para desarrolladores que te permite enviar, certificar y administrar tus aplicaciones de la Tienda Windows. Cuando registras la aplicación en el panel, se te entregan credenciales—un identificador de seguridad de paquete o SID y una clave secreta—que el servicio de nube usa para autenticarse con WNS.

Para registrar:

  1. Ve a la página de aplicaciones de la Tienda Windows del Centro de desarrollo de Windows e inicia sesión con tu cuenta Microsoft.

  2. Cuando hayas iniciado sesión, haz clic en el vínculo Panel .

  3. En el Panel, selecciona Enviar una aplicación.

    Ubicación de la opción de envío de una nueva aplicación

  4. En la página Enviar una aplicación, selecciona Nombre de la aplicación.

    La página de envío de una aplicación

  5. Proporciona un nombre único a tu aplicación. Escribe el nombre y haz clic en el botón Reservar nombre. Si el nombre está disponible, queda reservado para tu aplicación. Cuando hayas reservado correctamente un nombre para tu aplicación, los otros detalles pasarán a estar disponibles para su modificación, en caso de que decidas hacerlo en ese momento.

Paso 2: Obtén los valores de identidad para la aplicación

Cuando reservaste un nombre para la aplicación, la Tienda Windows creó las credenciales asociadas. También asignó valores de identidad asociados (nombre y publicador) que deben estar presentes en el archivo del manifiesto de la aplicación (package.appxmanifest): nombre y editor. Si ya has cargado la aplicación en la Tienda Windows, estos valores se habrán agregado automáticamente al manifiesto. Si no has cargado la aplicación, tendrás que agregar los valores de identidad al manifiesto manualmente.

  1. Selecciona el vínculo Servicios.

    Página de la aplicación, que muestra el vínculo Servicios

  2. En la página Servicios, selecciona el vínculo Servicios Live que se encuentra en la sección Servicios móviles de Microsoft Azure.

    Página Servicios

  3. En la página Información sobre los servicios Live Connect y notificaciones de inserción, selecciona Identificar la aplicación.

    Ubicación de la opción de identificación de la aplicación

  4. La página Identificar la aplicación te ofrece un elemento identity para incluir en el manifiesto de la aplicación. Abre el manifiesto en un editor de texto y agrega ese elemento tal y como indica la página.

    Elemento de identidad que se debe copiar en el manifiesto

Paso 3: Obtener credenciales para la aplicación

  1. Haz clic en el vínculo Autenticar el servicio que se encuentra en la parte inferior de la página Identificar la aplicación.

    Ubicación de la opción de autenticación del servicio

  2. La página Autenticar el servicio proporciona un identificador de seguridad y la clave secreta del cliente. Para enviar notificaciones de inserción a esta aplicación, el servicio de nube debe usar estas credenciales exactamente. No puedes usar las credenciales de otro servicio de nube para enviar notificaciones a esta aplicación y no puedes usar estas credenciales para enviar notificaciones a otra aplicación.

    Nota  Esta página también puede usarse para generar nuevas credenciales.

     

    Página de autenticación del servicio que muestra el SID y la clave secreta

  3. Carga el SID y la clave secreta del cliente en el servidor de nube.

    Importante  El servicio de nube debe tener almacenados de manera segura el SID y la clave secreta del cliente, y permitir el acceso a estos datos. La divulgación o el robo de esta información podría permitir a un atacante enviar notificaciones a los usuarios sin permiso o conocimiento.

     

Paso 4: Envía las credenciales del servidor de nube a WNS

El servicio de nube presenta sus credenciales (SID y clave secreta del cliente) mediante una solicitud de autenticación HTTPS que usa el formato "application/x-www-for-urlencoded".

Este ejemplo muestra un ejemplo de solicitud de autenticación HTTPS. Incluye un SID de paquete y una clave secreta en grant_type. Indica tu propio SID de paquete en el campo "client_id" y tu propia clave secreta en el campo "client_secret". Si quieres obtener más información sobre sintaxis, consulta el tema sobre los encabezados de respuesta y solicitud del servicio de notificaciones de inserción.


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 envía al servidor una respuesta a la solicitud de autenticación. Si el código de respuesta es "200 OK", la autenticación se realizó correctamente y la respuesta incluye un token de acceso que el servidor deberá guardar y usar en todas las notificaciones que envíe, hasta que el token expire.

A continuación se muestra un ejemplo de respuesta WNS a una autenticación correcta.


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

El ejemplo siguiente proporciona el código necesario para enviar la solicitud de autenticación y recibir la respuesta. Puedes copiar este ejemplo directamente en tu propio código de servidor de nube siempre que incluyas estas directivas:

using System.Runtime.Serialization.Json;

using System.Runtime.Serialization.Json;

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);
}

Temas relacionados

Introducción a los Servicios de notificaciones de inserción de Windows (WNS)

Solicitud de servicio de notificaciones de inserción y encabezados de respuesta

Ejemplo de notificaciones de inserción y periódicas

Inicio rápido: envío de una notificación de inserción

Cómo solicitar, crear y guardar un canal de notificaciones