Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обзор
В этом разделе показано, как пройти проверку подлинности пользователей мобильного приложения службы приложений из клиентского приложения. В этом руководстве вы добавите аутентификацию в проект быстрого начала Xamarin.iOS, используя поставщика удостоверений, поддерживаемого службой приложений. После успешной проверки подлинности, произведенной вашим мобильным приложением, отображается идентификатор пользователя, и вы сможете получить доступ к данным ограниченного доступа таблицы.
Сначала необходимо выполнить руководство по созданию приложения Xamarin.iOS. Если вы не используете скачанный проект сервера быстрого запуска, необходимо добавить пакет расширения проверки подлинности в проект. Дополнительные сведения о пакетах расширений сервера см. в статье Работа с пакетом SDK серверного сервера .NET для мобильных приложений Azure.
Регистрация приложения для проверки подлинности и настройка служб приложений
Сначала необходимо зарегистрировать приложение на сайте поставщика удостоверений, а затем задать учетные данные, созданные поставщиком, в серверной части мобильных приложений.
Настройте предпочитаемого поставщика удостоверений, следуя инструкциям для конкретного поставщика:
Повторите предыдущие шаги для каждого поставщика, которого вы хотите поддерживать в приложении.
Добавьте своё приложение в список разрешённых URL-адресов для внешнего перенаправления
Для безопасной проверки подлинности необходимо определить новую схему URL-адресов для приложения. Это позволяет системе проверки подлинности перенаправляться обратно в приложение после завершения процесса проверки подлинности. В этом руководстве мы используем URL-схему название приложения на протяжении всего руководства. Однако вы можете использовать любую схему URL-адресов, выбранную вами. Оно должно быть уникальным для мобильного приложения. Чтобы включить перенаправление на стороне сервера, выполните следующие действия.
На портале Azureвыберите службу приложений.
Щёлкните пункт меню Аутентификация / Авторизация.
В разрешенных URL-адресов для внешних перенаправленийвведите
url_scheme_of_your_app://easyauth.callback
. url_scheme_of_your_app в этой строке — URL-схема для вашего мобильного приложения. Он должен соответствовать обычной спецификации URL-адреса для протокола (использовать только буквы и цифры и начинать с буквы). Следует заметить строку, которую вы выберете, так как вам потребуется настроить код мобильного приложения с помощью схемы URL-адресов в нескольких местах.Нажмите кнопку ОК.
Нажмите кнопку Сохранить.
Ограничение разрешений для пользователей, прошедших проверку подлинности
По умолчанию API-интерфейсы в серверной части мобильных приложений можно вызывать анонимно. Затем необходимо ограничить доступ только к прошедшим проверку подлинности клиентам.
Node.js внутренний интерфейс (через портал Azure):
В параметрах мобильных приложений нажмите Easy Tables и выберите свою таблицу. Щелкните Изменить разрешения, выберите только проверенный доступ для всех разрешений, а затем нажмите Сохранить.
.NET бэкэнд (C#):
В проекте сервера перейдите к контроллерам>TodoItemController.cs. Добавьте атрибут
[Authorize]
в класс TodoItemController, как показано ниже. Чтобы ограничить доступ только к определенным методам, этот атрибут также можно применить только к этим методам, а не к классу. Переопубликуйте серверный проект.[Authorize] public class TodoItemController : TableController<TodoItem>
Node.js бекенд (через код Node.js):
Чтобы требовать проверку подлинности для доступа к таблицам, добавьте следующую строку в скрипт сервера Node.js:
table.access = 'authenticated';
Дополнительные сведения см. в разделе Практическое руководство. Требование проверки подлинности для доступа к таблицам. Сведения о том, как скачать проект кода быстрого запуска с сайта, см. в статье Практическое руководство. Скачивание проекта кода внутреннего руководства Node.js с помощью Git.
В Visual Studio или Xamarin Studio запустите клиентский проект на устройстве или эмуляторе. Убедитесь, что необработанное исключение с кодом состояния 401 (неавторизовано) возникает после запуска приложения. Сбой регистрируется в консоли отладчика. Итак, в Visual Studio в окне вывода должна появиться ошибка.
Этот неавторизованный сбой происходит, потому что приложение пытается получить доступ к серверу мобильного приложения в качестве неаутентифицированного пользователя. Теперь таблица TodoItem требует аутентификации.
Затем вы обновите клиентское приложение, чтобы запросить ресурсы из серверной части мобильного приложения с прошедшим проверку подлинности пользователем.
Добавление проверки подлинности в приложение
В этом разделе вы измените приложение, чтобы отобразить экран входа перед отображением данных. При запуске приложения он не будет подключаться к службе приложений и не будет отображать данные. После первого выполнения пользователем жеста обновления откроется экран входа; После успешного входа отобразится список элементов todo.
В клиентском проекте откройте файл QSTodoService.cs и добавьте следующую инструкцию using и
MobileServiceUser
с аксессором к классу QSTodoService:using UIKit; // Logged in user private MobileServiceUser user; public MobileServiceUser User { get { return user; } }
Добавьте новый метод с именем Authenticate в QSTodoService со следующим определением:
public async Task Authenticate(UIViewController view) { try { AppDelegate.ResumeWithURL = url => url.Scheme == "{url_scheme_of_your_app}" && client.ResumeWithURL(url); user = await client.LoginAsync(view, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); } catch (Exception ex) { Console.Error.WriteLine (@"ERROR - AUTHENTICATION FAILED {0}", ex.Message); } }
Замечание
Если вы используете поставщик удостоверений, отличный от Facebook, измените значение, переданное в LoginAsync выше, на одно из следующих: MicrosoftAccount, Twitter, Google или WindowsAzureActiveDirectory.
Откройте QSTodoListViewController.cs. Измените определение метода ViewDidLoad , удалив вызов RefreshAsync() в конце:
public override async void ViewDidLoad () { base.ViewDidLoad (); todoService = QSTodoService.DefaultService; await todoService.InitializeStoreAsync(); RefreshControl.ValueChanged += async (sender, e) => { await RefreshAsync(); } // Comment out the call to RefreshAsync // await RefreshAsync(); }
Измените метод RefreshAsync , чтобы пройти проверку подлинности, если свойство User имеет значение NULL. Добавьте следующий код в верхней части определения метода:
// start of RefreshAsync method if (todoService.User == null) { await QSTodoService.DefaultService.Authenticate(this); if (todoService.User == null) { Console.WriteLine("couldn't login!!"); return; } } // rest of RefreshAsync method
Откройте AppDelegate.cs, добавьте следующий метод:
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options) { if (client.ResumeWithURL(app, url, options)) return true; return base.OpenUrl(app, url, options); }
Откройте файл Info.plist , перейдите к типам URL-адресов в разделе "Дополнительно ". Теперь настройте идентификатор и схемы URL вашего типа URL и нажмите Добавить тип URL. Схемы URL-адресов должны совпадать с {url_scheme_of_your_app}.
В Visual Studio, подключенном к узлу Mac или Visual Studio для Mac, запустите клиентский проект, предназначенный для устройства или эмулятора. Убедитесь, что приложение не отображает данные.
Выполните жест обновления, вытащив список элементов, что приведет к отображению экрана входа. После успешного ввода допустимых учетных данных приложение отобразит список элементов todo, и вы можете внести обновления в данные.