В этой части рассмотрены вопросы аутентификации в мобильном сервисе из вашего приложения.
Регистрация приложения для аутентификации и настройка мобильного сервиса
Для аутентификации пользователей необходимо зарегистрировать провайдера идентификации, который будет использоваться для вашего приложения, после чего зарегистрировать в мобильном сервисе.
Войдите на портале управления, перейдите на MobileServices и выберите ваш мобильный сервис (рисунок 1).
Увеличить
Рис. 1. Портал управления Windows Azure
Перейдите на вкладку Dashboard и запишите значение SiteURL (рисунок 2).
Увеличить
Рис. 2. Портал управления Windows Azure
Настроим аутентификацию через Facebook. Для этого понадобится аккаунт Facebook.
Перейдите на страницу Facebook Developers и войдите в систему.
Нажмите Apps, затем Create New App (рисунок 3).
Увеличить
Рис. 3. Портал Facebook
Выберите уникальное имя для приложения и нажмите OK (рисунок 4), что зарегистрирует приложение на Facebook.
Увеличить
Рис. 4. Портал Facebook
В Select how your app integrates with Facebook разверните Website with Facebook Login,введите URL мобильного сервиса в поле Site URL и нажмите Save Changes (рисунок 5).
Увеличить
Рис. 5. Портал Facebook
Запишите значения App ID и App Secret (рисунок 6).
Увеличить
Рис. 6. Портал Facebook
Аутентификация на портале настроена.
Перейдите на портал управления Windows Azure и во вкладке Identity введите записанные значения App ID и App Secret, после чего нажмите Save (рисунок 7).
Увеличить
Рис. 7. Портал управления Windows Azure
Ограничения прав аутентифицировавшихся пользователей
На портале управления во вкладке Data выберите таблицу TodoItem (рисунок 8).
Увеличить
Рис. 8. Портал управления Windows Azure
На вкладке Permissions определите все права в Only authenticated users и нажмите Save (рисунок 9).
Увеличить
Рис. 9. Портал управления Windows Azure
Откройте проект из предыдущей части и запустите его. Убедитесь, что при запуске приложения выдается ошибка 401 (Unauthorized). Это происходит из-за того, что теперь таблица TodoItem доступна только аутентифицировавшимся пользователям.
Добавьте в файл mainpage.xaml.cs:
private MobileServiceUser user;
private async System.Threading.Tasks.Task Authenticate()
{
while (user == null)
{
string message;
try
{
user = await App.MobileService
.LoginAsync(MobileServiceAuthenticationProvider.Facebook);
message =
string.Format("You are now logged in - {0}", user.UserId);
}
catch (InvalidOperationException)
{
message = "You must log in. Login Required";
}
var dialog = new MessageDialog(message);
dialog.Commands.Add(new UICommand("OK"));
await dialog.ShowAsync();
}
}
В этом коде создается переменная для хранения текущего пользователя и метод для обработки процесса аутентификации.
Замените содержимое метода OnNavigatedTo:
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
await Authenticate();
RefreshTodoItems();
}
Запустите приложение и аутентифицируйтесь в выбранном провайдере идентификации.
Существует возможность использовать серверные скрипты для авторизации аутентифицировавшихся пользователей и выдачи им прав на доступ к данным в Windows Azure Mobile Services.
Регистрация скриптов
Перейдите на портал управления Windows Azure и на вкладке MobileServices выберите ваше приложение (рисунок 10) .
Увеличить
Рис. 10. Портал управления Windows Azure
На вкладке Data выберите таблицу TodoItem (рисунок 11).
Увеличить
Рис. 11. Портал управления Windows Azure
Нажмите Script и выберите Insert (рисунок 12).
Увеличить
Рис. 12. Портал управления Windows Azure
Замените код и нажмите Save.
function insert(item, user, request) {
item.userId = user.userId;
request.execute();
}
Скрипт добавляет в сущность значение userId, которая является идентификатором аутентифицировшегося пользователя, перед тем, как она вставляется в таблицу.
Замените код операции Read:
function read(query, user, request) {
query.where({ userId: user.userId });
request.execute();
}
Запуск приложения
Откройте проект, созданный ранее, и запустите его, после чего войдите в систему, используя ваши учетные данные. Обратите внимание на изменения в интерфейсе.