Как выполнять проверку подлинности с помощью службы push-уведомлений Windows (WNS) (приложения среды выполнения Windows)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

В этой статье описано, как выполнить проверку подлинности облачного сервера при помощи служб push-уведомлений Windows (WNS) и получить маркер доступа.

Необходимые условия

Инструкции

Этап 1: Регистрация приложения на информационной панели

Прежде чем отправлять уведомления через службу WNS, необходимо зарегистрировать приложение. Для этого воспользуйтесь информационной панелью — порталом разработчиков, предназначенным для отправки, сертификации приложений Магазина Windows и управления ими. При регистрации приложения на информационной панели вам предоставляются учетные данные — идентификатор безопасности пакета (SID) и секретный ключ, — которые будут использоваться вашей облачной службой для прохождения проверки подлинности при помощи WNS.

Регистрация:

  1. Перейдите на страницу Приложения Магазина Windows в Центре разработки для Windows и войдите в систему с учетной записью Майкрософт.

  2. Войдя в систему, перейдите по ссылке Информационная панель.

  3. На информационной панели выберите Отправить приложение.

    Расположение функции отправки нового приложения

  4. На странице отправки приложения выберите Имя приложения.

    Страница отправки приложения

  5. Дайте своему приложению уникальное имя. Введите имя и нажмите кнопку Зарезервировать имя. Если имя доступно, оно будет зарезервировано для вашего приложения. Если понадобится, после резервирования имени приложения вы сможете изменить другие данные.

Этап 2: Получение значений удостоверения для вашего приложения

При резервировании имени для вашего приложения Магазин Windows создал сопоставленные с вами учетные данные. Вам также были присвоены значения удостоверения — имя и издатель, — которые должны присутствовать в файле манифеста вашего приложения (package.appxmanifest). Если вы уже отправили свое приложение в Магазин Windows, эти значения будут автоматически добавлены в манифест. Если вы еще не отправили свое приложение, то значения удостоверения потребуется добавить в манифест вручную.

  1. Перейдите по ссылке Службы.

    Страница приложения со ссылкой “Службы”

  2. На странице Службы перейдите по ссылке Службы Live в разделе Мобильные службы Microsoft Azure.

    Страница “Службы”

  3. На странице Сведения о push-уведомлениях и службах Live Connect выберите Идентификация приложения.

    Расположение параметров идентификации приложения

  4. На странице Идентификация приложения содержится элемент identity, который нужно включить в манифест приложения. Откройте манифест в текстовом редакторе и добавьте этот элемент, как указано в инструкциях на странице.

    Элемент идентификатора, который необходимо скопировать в манифест

Этап 3: Получение учетных данных для приложения

  1. Щелкните ссылку Проверка подлинности службы внизу той же страницы Идентификация приложения.

    Расположение параметров проверки подлинности вашей службы

  2. На странице Проверка подлинности службы содержатся идентификатор безопасности и секрет клиента. Чтобы отправлять push-уведомления этому приложению, ваша облачная служба должна использовать именно эти учетные данные. Вы не можете использовать учетные данные другой облачной службы для отправки уведомлений этому приложению, а также эти учетные данные — для отправки уведомлений другому приложению.

    Примечание  Эту страницу также можно использовать для генерирования новых учетных данных.

     

    Страница проверки подлинности вашей службы с ИД безопасности и секретным ключом

  3. Отправьте идентификатор безопасности и секрет клиента на облачный сервер.

    Важно  Идентификатор безопасности и секрет клиента должны находиться в надежном месте, доступном для облачной службы. Если эта информация станет известна посторонним лицам, они смогут отправлять уведомления пользователям без вашего ведома и согласия.

     

Этап 4: Отправка учетных данных облачного сервера службе WNS

Облачная служба передает свои учетные данные (ИД безопасности и секрет клиента) в HTTPS-запросе проверки подлинности, который использует формат "application/x-www-for-urlencoded".

Здесь показан пример запроса проверки подлинности HTTPS. Он включает ИД безопасности пакета и секретный ключ в grant_type. Замените ваш ИД безопасности пакета в поле "client_id", а ваш секретный ключ в поле "client_secret", если копируете этот код. Сведения о синтаксисе см. в разделе Заголовки запросов и ответов службы push-уведомлений.


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 отправляет серверу ответ на запрос проверки подлинности. Если код этого ответа — "200 OK", проверка подлинности считается успешной и ответ включает маркер доступа, который облачный сервер должен сохранить и использовать во всех отправляемых уведомлениях до истечения срока действия маркера.

Пример ответа WNS на успешную проверку подлинности показан здесь.


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

В следующем примере приведен код для отправки запроса проверки подлинности и получения ответа. Вы можете скопировать этот пример напрямую в собственный код облачного сервера, если вы включаете следующие директивы:

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

Связанные разделы

Общие сведения о службах push-уведомлений Windows (WNS)

Заголовки запросов и ответов службы push-уведомлений

Пример push-уведомлений и периодических уведомлений

Краткое руководство: отправка push-уведомлений

Запрос, создание и сохранение канала уведомлений