Статьи

Создание внутренних данных и служб для приложений Windows 8: добавление аутентификации

В
предыдущих выпусках этой серии
я показал, как можно быстро создавать службы на основе REST, доступные через HTTP, которые позволяют легко хранить и извлекать данные в приложении Магазина Windows, используя несколько различных подходов, в том числе службы данных WCF, ASP.NET. Веб-API и новые мобильные службы Windows Azure. Вы можете
прочитать все предыдущие части серии здесь
. Я рекомендую как минимум прочитать вступительную статью и статью о мобильных службах Windows Azure, чтобы вы были знакомы с играми, которые я использую для демонстрации концепций этой серии, а также с основами мобильных служб.

Аутентификация — преимущество: мобильные службы Windows Azure

Как я отметил в посте , демонстрирующего Windows Azure Mobile Services , есть несколько функций в Windows Azure Mobile Services (далее WAMS или Mobile Services) , которые делают его хорошо подходят для строительства на заднюю часть конвейера для мобильных приложений ( в том числе приложений Windows Store ) и предоставляют значительные преимущества для быстрого запуска приложения и предоставления дополнительных необходимых услуг. В самой последней статье этой серии я показал, как использовать встроенную поддержку push-уведомлений. В этой статье я расскажу о встроенной поддержке аутентификации.

Кто ты?

Аутентификация отвечает на вопрос «кто ты?» Его цель — идентифицировать пользователя. Чтобы аутентификация была полезной, нам нужен надежный источник для идентификации пользователя. В веб-приложении это может быть пользовательская база данных имен пользователей и паролей для пользователей, которые зарегистрировались на нашем сайте. Хотя мы могли бы сделать то же самое с приложениями, проблема, с которой мы сталкиваемся, заключается в том, что многие пользователи сегодня не могут создать новую учетную запись для каждого приложения или веб-сайта, который они используют, поэтому, если мы заставим их пойти по этому пути, они могут решить просто удалите наше приложение и перейдите к другому, которое предъявляет к ним меньше требований.

Так что же делать разработчику приложений? Что ж, благодаря мобильным сервисам у вас есть доступ к ряду встроенных провайдеров для аутентификации информации, и вы можете выбрать, кому из них вы хотите доверять в целях аутентификации вашего приложения. Текущая версия Mobile Services на момент написания этой статьи поддерживает 4 провайдера аутентификации: учетную запись Microsoft (естественно), Twitter , Facebook и Google.

Поскольку большинство пользователей приложений, вероятно, имеют одну или несколько из этих учетных записей, вы можете значительно упростить это для себя (и своих пользователей), используя одного или нескольких из этих поставщиков для своего приложения. А мобильные сервисы делают это легко.

Давайте посмотрим, как добавить поддержку идентификации пользователей на основе их учетных записей Twitter, чтобы мы могли использовать их имя в качестве имени игрока в Space Cadet.

Обзор

Шаги высокого уровня для добавления аутентификации к мобильной службе (и ее клиентам) следующие:

  1. Получите необходимый ключ / секрет у провайдера, которого вы хотите использовать. В случае с Twitter вы можете получить это, создав приложение по адресу https://dev.twitter.com/apps
  2. Скопируйте значения для ключа и секрета в соответствующие поля на вкладке «Идентичность» вашего мобильного сервиса.
  3. Ограничьте разрешения по желанию на уровне таблицы, используя вкладку «Разрешения» нужной таблицы.
  4. Добавьте аутентификацию в клиентское приложение, вызвав функцию входа клиента мобильной службы.

Прохождение

Вот необходимые шаги в деталях:

  1. Посетите https://dev.twitter.com/apps (инструкции для этого шага для учетной записи Facebook , Google и Microsoft см. В документации по мобильным сервисам) и войдите в систему с нужной учетной записью Twitter (если у вас нет учетную запись, вы можете зарегистрировать один на сайте … вам нужно будет подтвердить свой адрес электронной почты, прежде чем вы сможете перейти к следующему шагу).
  2. Если вы еще не находитесь на странице «Мои приложения», в раскрывающемся меню в правом верхнем углу (где находится ваш аватар Twitter) выберите «Мои приложения», как показано ниже:
    TwitterMyApps
  3. Если у вас еще нет приложения, которое вы хотели бы использовать, нажмите кнопку «Создать новое приложение» и заполните следующие поля:
    1. Имя — название приложения, которое будет отображаться на экранах авторизации.
    2. Описание — текстовое описание приложения, которое также будет показано пользователю
    3. Веб-сайт — URL-адрес общедоступного веб-сайта с дополнительной информацией о вашем приложении. Это может быть ваш основной веб-сайт или ссылка на URL-адрес интернет-магазина вашего приложения.
    4. URL обратного вызова — URL для используемой вами мобильной службы (т. Е. Http: // MYAPPNAME .azure-mobile.net).
  4. Прочитайте условия обслуживания, установите флажок «Да, я согласен» (если вы согласны), а затем нажмите кнопку «Создать приложение в Твиттере».
  5. Вы будете перенаправлены на страницу, которая выглядит примерно так: обратите внимание на выделенные поля Consumer key и Consumer secret:
    TwitterApp
  6. Откройте портал управления Windows Azure , войдите в систему и откройте мобильную службу, для которой вы хотите добавить аутентификацию.
  7. Перейдите на вкладку Identity мобильной службы, вставьте ключ и секретный ключ Twitter в соответствующие поля на странице и нажмите кнопку Сохранить в нижней части страницы. ВАЖНО: Обращайтесь с секретом потребителя так же, как с паролем. Не делитесь им и не публикуйте их публично, и не используйте это значение в клиентском коде.
  8. Чтобы пользователи, не прошедшие проверку подлинности, не могли выполнять определенные операции с мобильным сервисом, перейдите на вкладку «Данные», щелкните нужную таблицу (в моем случае — таблицу игровых очков и перейдите на вкладку «Разрешения». По умолчанию разрешения для таблицы для каждой операции «Любой»). с ключом приложения », что означает любого клиента, который был настроен с правильным ключом приложения (ключ приложения можно получить из области« Конфигурировать »мобильной службы, используя кнопку« Управление ключами »в нижней части этой страницы). Давайте предположим, что мы хотите ограничить вставки и обновления для аутентифицированных пользователей и предотвратить удаление данных для всех, кроме сценариев и администраторов. Для этого мы меняем разрешения для таблицы следующим образом и нажимаем Сохранить:
    TablePermissions
    Вышеуказанные изменения предоставляют авторизованным пользователям право вставлять или обновлять записи, в то время как неаутентифицированные пользователи имеют право только читать записи. На этом этапе, если мы запустим игровой проект Space Cadet (тот же, который использовался в самом последнем посте этой серии ), мы получим исключение, когда игра попытается обновить таблицу лидеров, потому что клиент больше не авторизован для обновить данные без аутентификации. Поскольку демонстрационный проект не имеет глобального обработчика исключений, если мы отлаживаем, ошибка будет отображаться в функции terminateAppHandler в base.js, как показано ниже: Решение для этого простое … добавьте код для включения аутентификации.
    terminateAppHandler
  9. В моем файле leaderboardWAMS.js я собираюсь добавить переменную с именем userId в объявления в верхней части файла, и чуть ниже кода, который инициализирует мобильную службу, я сделаю вызов функции входа в систему , указав что я хочу войти через Twitter:

     // existing code to initilize the mobile service client

     leaderboardClient = new Microsoft.WindowsAzure.MobileServices.MobileServiceClient(

        "https://gameleaderwams.azure-mobile.net/",

        "dZiAISmMtUyaytLCCsBtWNrwoHKDkI39"

     );

      

     // Login with Twitter, and don't process additional 

     // initialization code until the authentication is complete

     leaderboardClient.login("twitter").done(function (result) {

       userId = result.userId;

     

       // Replace "gamescore" with your table name, if different

       gameScoresTable = leaderboardClient.getTable('gamescore');

       // make sure that the score table has at least one record for the player name / game name combo

       gameScoresTable.where({ player: playerName, game: gameName })

          .read().done(

             function (results) {

                if (results.length == 0) {

                   // initialize table

                   var gameScore = {

                      game: gameName, player: playerName, score: 0, wins: 0, losses: 0, ties: 0

                   };

                   gameScoresTable.insert(gameScore);

                };

                completed();

             },

             function (e) {

                showMessage(e.message);

             });

          });

   10. Теперь, если мы снова запустим игру, клиент мобильного сервиса автоматически вызовет правильные API, чтобы запросить у пользователя логин в Твиттере, как показано ниже:
   11. Если мы введем действительные учетные данные, нажмите «Авторизовать приложение» и начните играть в игру. и получить новый рекорд, игра снова сможет успешно обновить таблицу лидеров с новым рекордом.

TwitterAuth

Примечание о клиенте

Возможно, вы заметили, что в строке 10 кода выше мы сохраняем значение userId, возвращенного в результате вызова входа в систему. Хотя вы можете использовать это значение для удобства, не думайте, что оно допустимо, если вы отправляете его обратно на сервер. Данные и код клиента всегда следует рассматривать как подозрительные, поскольку определенный человек может потенциально подделать эти данные и попытаться вызвать вашу службу за пределами нормального рабочего процесса вашего приложения. В то время как в приложениях Магазина Windows существуют методы смягчения, которые усложняют эту задачу, любое клиентское приложение, отправляющее данные на сервер, подвержено аналогичным проблемам.

К счастью, мобильные сервисы предоставляют объект пользователя на стороне сервера, который доступен для каждого запроса, как часть вкладки Сценарии в каждой таблице мобильных сервисов. Этот пользовательский объект включает (среди прочего) свойство userId, которое будет содержать идентификатор пользователя, предоставленный сконфигурированным поставщиком аутентификации, при условии, что пользователь прошел аутентификацию успешно (в противном случае значение этого свойства будет неопределенным ).

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

     function update(item, user, request) {

           console.log("updated score record for: " + user.userId);

           request.execute();

     }

request.execute () — это код по умолчанию для каждой серверной операции сценария, поэтому соответствующий код здесь — строка 2, которая вызывает console.log для сохранения информации об идентификаторе пользователя. Затем эту информацию можно просмотреть на вкладке «Журналы» в корне мобильной службы, как показано ниже:

WAMSLog

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

Заворачивать

В этом посте я показал вам, как быстро и легко аутентифицировать пользователей по стороннему поставщику с помощью мобильных служб Windows Azure. После того, как вы настроили правильные учетные данные приложения, клиент мобильных служб берет на себя всю тяжелую работу по выполнению соответствующих вызовов API для платформы приложения, с которой вы работаете, и возвращает идентификатор пользователя и токен аутентификации из настроенной службы. ,

Вы можете узнать больше об аутентификации в Windows Azure Mobile Services здесь .

Для обзора

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

Что дальше?

В следующей части этой серии статей я рассмотрю, как мы можем получить некоторую дополнительную информацию о нашем аутентифицированном пользователе от настроенного провайдера идентификации, а также узнаю, как мы можем использовать службу Live Connect для единого входа. Я также работаю над серией эпизодов Microsoft DevRadio, в которой я буду обсуждать концепции этой серии и делать некоторые демонстрации с моими коллегами Брайаном Хитни и Питером Лаудати. Я опубликую ссылки на шоу, как только они станут доступны.

Пока вы ждете следующей партии, почему бы не зарегистрироваться в App Builder ? Существует множество отличных ресурсов для создания приложений для Windows 8 (а теперь и для Windows Phone 8), включая новую информацию от партнеров, которая позволяет быстро и легко создавать приложения и игры для Windows 8. бесплатно, и вы контролируете, как часто отправляются обновления, так что нет веских причин для их передачи. Зарегистрируйтесь сейчас !