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

Tags: azure, azure mobile services, javascript, node.js

Привет!

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

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

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

Давайте представим что у нас есть следующий код создания клиента для подключения к службе Windows 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. На портале Windows 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 от сторонних глаз нужно решать отдельно и это мы обсудим чуть позже.

Все вопросы и пожелания приветствуются в комментариях.

No Comments

Add a Comment

Поделиться