Como autenticar com os Serviços de Notificação por Push do Windows (WNS) (aplicativos do Tempo de Execução do Windows)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Este tópico explica como autenticar o servidor em nuvem usando os Serviços de Notificação por Push do Windows (WNS) e receber um token de acesso como retorno.

Pré-requisitos

Instruções

Etapa 1: Registre o aplicativo no Painel.

Para poder enviar notificações por WNS, você precisa registrar o seu aplicativo. Faça isso usando o Painel, que é o portal de desenvolvedores que permite enviar, certificar e gerenciar seus aplicativos da Windows Store. Ao registrar o aplicativo no Painel, você recebe as credenciais— um Identificador de segurança do pacote (SID) e uma chave secreta— que o serviço em nuvem usa para autenticar-se com WNS.

Para registrar:

  1. Vá para a página Aplicativos da Windows Store do Centro de Desenvolvimento do Windows e conecte-se com sua conta da Microsoft.

  2. Depois de conectado, clique no link Painel.

  3. No Painel, selecione Enviar um aplicativo.

    Local de envio de uma nova opção de aplicativo

  4. Na página Enviar um aplicativo, selecione Nome do aplicativo.

    Página enviar um aplicativo

  5. Forneça um nome exclusivo para seu aplicativo. Insira o nome e clique no botão Reservar nome. Se o nome estiver disponível, ele é reservado a seu aplicativo. Depois de ter reservado um nome para seu aplicativo com sucesso, os outros detalhes tornam-se disponíveis para modificação caso você escolha fazer isso nesse momento.

Etapa 2: Obter os valores de identidade para o aplicativo

Quando você reservou um nome para o aplicativo, a Windows Store criou suas credenciais de associado. Também atribuiu valores de identidade associados que devem estar presentes no manifesto de aplicativo (package.appxmanifest):—nome e publicador— Se você já tiver carregado o aplicativo para a Windows Store, esses valores serão automaticamente adicionados para o manifesto. Se você não carregou o aplicativo, precisará adicionar os valores de identidade ao manifesto manualmente.

  1. Selecione o link Serviços.

    A página do aplicativo, mostrando o link Serviços

  2. Na página Serviços, selecione o link Live Services encontrado na seção Serviços Móveis do Microsoft Azure

    A página Serviços

  3. Na página Notificações por push e Informações sobre serviços Live Connect selecione Identificar o aplicativo.

    Local de identificação da opção do aplicativo

  4. A página Identificar o aplicativo oferece um elemento identity para incluir no manifesto do aplicativo. Abra seu manifesto em um editor de texto e adicione esse elemento conforme instruído pela página.

    O elemento de identidade que deve ser copiado para o manifesto

Etapa 3: Obter as credenciais para o aplicativo

  1. Clique no link Autenticando seu serviço na parte inferior da mesma página Identificar o aplicativo

    Local da autenticação da opção de serviço

  2. A página Autenticando seu serviço fornece seu identificador de segurança e segredo do cliente. Para enviar notificações por push a esse aplicativo, o serviço em nuvem deve usar exatamente essas credenciais. Você não pode usar as credenciais de outro serviço em nuvem para enviar notificações para esse aplicativo e também não pode usá-las para enviar notificações a outro aplicativo.

    Observação  Esta página também pode ser usada para gerar novos credenciais.

     

    Autenticar a página de serviço mostrando o identificador de serviço (SID) e a chave secreta

  3. Carregue o SID e o segredo do cliente para o servidor em nuvem.

    Importante  O SID e o segredo do cliente devem ser armazenados e acessados de forma segura pelo serviço em nuvem. A divulgação ou o roubo dessas informações pode permitir que um invasor envie notificações para os usuários sem permissão ou conhecimento.

     

Etapa 4: Enviar as credenciais do servidor para o WNS

O serviço em nuvem apresenta suas credenciais (SID e segredo do cliente) através de uma solicitação de autenticação HTTPS que usa o formato "application/x-www-for-urlencoded".

Este exemplo mostra uma amostra HTTPS de solicitação de autenticação. Ele inclui um SID de pacote e chave secreta no grant_type. Certifique-se de substituir o seu próprio pacote SID no campo "client_id" e sua própria chave secreta no campo "client_secret" se você copiar este código. ConsulteSolicitação de serviço de notificação por push e cabeçalhos de respostas para informação sobre sintaxe.


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

O WNS envia seu servidor uma resposta à solicitação de autenticação. Se o código de resposta for "200 OK", isso significará que a autenticação foi bem-sucedida e a resposta inclui um token de acesso que o seu servidor de nuvem deverá guardar e utilizar em todas as notificações que ele enviar até que o token de acesso expire.

Um exemplo de uma resposta WNS para uma autenticação bem-sucedida é mostrada aqui.


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

O exemplo a seguir fornece o código necessário para enviar a solicitação de autenticação e receber a resposta. Você pode copiar esse exemplo diretamente no seu próprio código de servidor de nuvem, desde que inclua estas diretivas:

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

Tópicos relacionados

Visão geral dos Serviços de Notificação por Push do Windows (WNS)

Solicitação de serviço de notificação por push e cabeçalhos de respostas

Amostra de notificações por push e periódicas

Guia de início rápido: enviando uma notificação por push

Como solicitar, criar e salvar um canal de notificação