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
- Una cuenta de desarrollador para la Tienda Windows.
- Una aplicación de la Tienda Windows para registrar.
- Información de trabajo sobre los términos y conceptos de iconos y notificaciones, además de XML.
- Familiaridad con los conceptos de notificación de inserción y WNS, así como sus requisitos y funcionamiento.
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:
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.
Cuando hayas iniciado sesión, haz clic en el vínculo Panel .
En el Panel, selecciona Enviar una aplicación.
En la página Enviar una aplicación, selecciona Nombre de la aplicación.
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.
Selecciona el vínculo Servicios.
En la página Servicios, selecciona el vínculo Servicios Live que se encuentra en la sección Servicios móviles de Microsoft Azure.
En la página Información sobre los servicios Live Connect y notificaciones de inserción, selecciona Identificar la aplicación.
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.
Paso 3: Obtener credenciales para la aplicación
Haz clic en el vínculo Autenticar el servicio que se encuentra en la parte inferior de la página Identificar la aplicación.
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.
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