Авторизация в Microsoft Azure Mobile Services на уровне администратора с использованием Master Key

Данный пост является продолжением вопроса поднятого во время трех моих вебинаров на тему "Разработка HTML 5 приложений с использованием Microsoft Azure Mobile Services". Если вы не участвовали в вебинарах, то их можно посмотреть в записи:

  1. Разработка веб сайта на html 5 с использованием Azure Mobile Services
  2. Разработка backend`а для сайта с использованием Azure Mobile Services
  3. Авторизация пользователей с использованием Azure Mobile Services

В этом коротком посте я хотел рассказать как нам пройти проверку авторизации и выполнить запрос к сервису с правами администратора.

Давайте представим что у нас есть следующий код создания клиента для подключения к службе Microsoft Azure Mobile Services:

var appUrl = 'https://webinar-onlineshop.azure-mobile.net/'; var appKey = 'ZHNxhVbjQhZTzUcMuXVQpugLVCIEEv25'; var client = new WindowsAzure.MobileServiceClient(appUrl, appKey);

А также у нас есть следующий код для вставки записи в таблицу:

var table = client.getTable('category'); var entity = { title: 'my new category' }; table.insert(entity).done( function(result) { alert('inserted'); }, function(error) { alert(error); } );

Этот код работает только в том случае, если на операцию вставки в таблицу установлены права Anybody with the Application Key. Но сам параметр Application Key является публичным и его знает каждый наш пользователь. Если мы хотим разрешить метод вставки только администраторам, то нам необходимо сделать 2 вещи:

1. На портале Microsoft Azure для желаемой операции (в нашем случае это вставка в таблицу category) установить права доступа Only Scripts and Admins.

2. Переписать создание нашего клиента к сервису следующим образом:

var appUrl = 'https://webinar-onlineshop.azure-mobile.net/'; var appKey = 'ZHNxhVbjQhZTzUcMuXVQpugLVCIEEv25'; var masterKey = 'OXitusEIBdIZEeiUoYAIxbRFBbCFnw62'; var client = new WindowsAzure.MobileServiceClient(appUrl, appKey) .withFilter(function(request, next, callback){ request.headers['X-ZUMO-MASTER'] = masterKey; next(request, callback); });

Дргими словами нам нужно добавить в запрос заголовок с именем X-ZUMO-MASTER и значением равным параметру Master Key нашего сервиса.

Таким образом мы можем ограничить доступ к нашему сервису используя Master Key. Учитывая что в JavaScript весь код вляется открытым, то задачу защиты Master Key от сторонних глаз нужно решать отдельно и это мы обсудим чуть позже.

 

Автор статьи: Антон Бойко (boyko.ant@live.com)

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