Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обзор
В этом разделе показано, как добавить облачную проверку подлинности в мобильное приложение. В этом руководстве вы добавляете аутентификацию в проект быстрого начала работы с универсальной платформой Windows (UWP) для мобильных приложений с помощью поставщика идентификации, поддерживаемого службой приложений 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.
Теперь можно убедиться, что анонимный доступ к серверной части отключен. С помощью проекта приложения UWP, установленного в качестве начального проекта, разверните и запустите приложение; Убедитесь, что необработанное исключение с кодом состояния 401 (несанкционированное) возникает после запуска приложения. Это происходит из-за того, что приложение пытается получить доступ к коду мобильного приложения в качестве пользователя без проверки подлинности, но теперь для таблице TodoItem требуется проверка подлинности.
Затем вы обновите приложение для проверки подлинности пользователей перед запросом ресурсов из службы приложений.
Добавление проверки подлинности в приложение
Откройте файл проекта приложения UWP MainPage.xaml.cs и добавьте следующий фрагмент кода:
// Define a member variable for storing the signed-in user. private MobileServiceUser user; // Define a method that performs the authentication process // using a Facebook sign-in. private async System.Threading.Tasks.Task<bool> AuthenticateAsync() { string message; bool success = false; try { // Change 'MobileService' to the name of your MobileServiceClient instance. // Sign-in using Facebook authentication. user = await App.MobileService .LoginAsync(MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); message = string.Format("You are now signed in - {0}", user.UserId); success = true; } catch (InvalidOperationException) { message = "You must log in. Login Required"; } var dialog = new MessageDialog(message); dialog.Commands.Add(new UICommand("OK")); await dialog.ShowAsync(); return success; }Этот код проверяет подлинность пользователя с помощью имени входа в Facebook. Если вы используете поставщик удостоверений, отличный от Facebook, измените значение MobileServiceAuthenticationProvider выше на значение для вашего поставщика.
Замените метод OnNavigatedTo() в MainPage.xaml.cs. Затем вы добавите кнопку входа в приложение, которое активирует проверку подлинности.
protected override async void OnNavigatedTo(NavigationEventArgs e) { if (e.Parameter is Uri) { App.MobileService.ResumeWithURL(e.Parameter as Uri); } }Добавьте следующий фрагмент кода в MainPage.xaml.cs:
private async void ButtonLogin_Click(object sender, RoutedEventArgs e) { // Login the user and then load data from the mobile app. if (await AuthenticateAsync()) { // Switch the buttons and load items from the mobile app. ButtonLogin.Visibility = Visibility.Collapsed; ButtonSave.Visibility = Visibility.Visible; //await InitLocalStoreAsync(); //offline sync support. await RefreshTodoItems(); } }Откройте файл проекта MainPage.xaml, найдите элемент, который определяет кнопку "Сохранить" и замените его следующим кодом:
<Button Name="ButtonSave" Visibility="Collapsed" Margin="0,8,8,0" Click="ButtonSave_Click"> <StackPanel Orientation="Horizontal"> <SymbolIcon Symbol="Add"/> <TextBlock Margin="5">Save</TextBlock> </StackPanel> </Button> <Button Name="ButtonLogin" Visibility="Visible" Margin="0,8,8,0" Click="ButtonLogin_Click" TabIndex="0"> <StackPanel Orientation="Horizontal"> <SymbolIcon Symbol="Permissions"/> <TextBlock Margin="5">Sign in</TextBlock> </StackPanel> </Button>Добавьте следующий фрагмент кода в App.xaml.cs:
protected override void OnActivated(IActivatedEventArgs args) { if (args.Kind == ActivationKind.Protocol) { ProtocolActivatedEventArgs protocolArgs = args as ProtocolActivatedEventArgs; Frame content = Window.Current.Content as Frame; if (content.Content.GetType() == typeof(MainPage)) { content.Navigate(typeof(MainPage), protocolArgs.Uri); } } Window.Current.Activate(); base.OnActivated(args); }Откройте файл Package.appxmanifest, перейдите к объявлениям, в раскрывающемся списке доступных объявлений выберите протокол и нажмите кнопку "Добавить". Настройте свойства объявления протокола. В отображаемое имядобавьте имя, которое вы хотите отобразить пользователям приложения. В nameдобавьте {url_scheme_of_your_app}.
Нажмите клавишу F5, чтобы запустить приложение, нажмите кнопку входа и войдите в приложение с помощью выбранного поставщика удостоверений. После успешного входа приложение выполняется без ошибок, и вы можете запрашивать серверную часть и вносить обновления в данные.
Храните маркер проверки подлинности на клиенте
В предыдущем примере показан стандартный вход, который требует от клиента связаться как с поставщиком удостоверений, так и со службой приложений при каждом запуске приложения. Это не только неэффективный метод, вы можете столкнуться с проблемами, связанными с использованием, если многие клиенты пытаются запустить приложение одновременно. Лучший подход — кэшировать маркер авторизации, возвращаемый службой приложений, и сначала попытаться использовать его перед использованием входа с использованием провайдера.
Примечание.
Маркер, выданный службами приложений, можно кэшировать независимо от того, используется ли клиентом управляемая или службой управляемая аутентификация. В этом руководстве используется аутентификация, управляемая сервисом.
В файле проекта MainPage.xaml.cs добавьте следующие директивы using:
using System.Linq; using Windows.Security.Credentials;Замените метод AuthenticateAsync следующим кодом:
private async System.Threading.Tasks.Task<bool> AuthenticateAsync() { string message; bool success = false; // This sample uses the Facebook provider. var provider = MobileServiceAuthenticationProvider.Facebook; // Use the PasswordVault to securely store and access credentials. PasswordVault vault = new PasswordVault(); PasswordCredential credential = null; try { // Try to get an existing credential from the vault. credential = vault.FindAllByResource(provider.ToString()).FirstOrDefault(); } catch (Exception) { // When there is no matching resource an error occurs, which we ignore. } if (credential != null) { // Create a user from the stored credentials. user = new MobileServiceUser(credential.UserName); credential.RetrievePassword(); user.MobileServiceAuthenticationToken = credential.Password; // Set the user from the stored credentials. App.MobileService.CurrentUser = user; // Consider adding a check to determine if the token is // expired, as shown in this post: https://aka.ms/jww5vp. success = true; message = string.Format("Cached credentials for user - {0}", user.UserId); } else { try { // Sign in with the identity provider. user = await App.MobileService .LoginAsync(provider, "{url_scheme_of_your_app}"); // Create and store the user credentials. credential = new PasswordCredential(provider.ToString(), user.UserId, user.MobileServiceAuthenticationToken); vault.Add(credential); success = true; message = string.Format("You are now signed in - {0}", user.UserId); } catch (MobileServiceInvalidOperationException) { message = "You must sign in. Sign-In Required"; } } var dialog = new MessageDialog(message); dialog.Commands.Add(new UICommand("OK")); await dialog.ShowAsync(); return success; }В этой версии AuthenticateAsyncприложение пытается использовать учетные данные, хранящиеся в PasswordVault для доступа к службе. Обычный вход также выполняется при отсутствии сохраненных учетных данных.
Примечание.
Кэшированный токен может быть просрочен, и истечение срока его действия также может произойти после успешной проверки подлинности в процессе использования приложения. Сведения о том, как определить, истек ли срок действия маркера, см. в статье Проверка наличия маркеров проверки подлинности с истекшим сроком действия. Решение для обработки ошибок авторизации, связанных с истекающими токенами, см. в записи по кэшированию и обработке просроченных токенов в управляемом пакете SDK для мобильных служб Azure.
Перезапустите приложение дважды.
Обратите внимание, что при первом запуске необходимо снова войти в систему через поставщика. Однако во втором перезапуске используются кэшированные учетные данные и выполняется обход входа.
Дальнейшие действия
Теперь, когда вы выполнили это базовое руководство по проверке подлинности, рассмотрите возможность продолжения работы с одним из следующих руководств:
-
Добавление push-уведомлений в приложение
Узнайте, как добавить в приложение поддержку push-уведомлений и настроить серверную часть мобильного приложения, чтобы использовать Центры уведомлений Azure для отправки push-уведомлений. -
Включить автономную синхронизацию для приложения
Узнайте, как добавить автономную поддержку приложения с помощью серверной части мобильного приложения. Автономная синхронизация позволяет конечным пользователям взаимодействовать с мобильным приложением — просматривать, добавлять или изменять данные, даже если сетевого подключения нет.