Добавление проверки подлинности в приложение Xamarin.iOS

Обзор

В этом разделе показано, как выполнить проверку подлинности пользователей мобильного приложения службы приложений из клиентского приложения. В этом учебнике приведены инструкции, позволяющие добавить проверку подлинности в ознакомительный проект Xamarin.Forms, используя поставщик удостоверений, поддерживаемый службой приложений. После успешной проверки подлинности и авторизации мобильным приложением отображается значение идентификатора пользователя, и вы сможете получить доступ к закрытым табличным данным.

Сначала необходимо выполнить инструкции из руководства Создание приложения Xamarin.iOS. Если вы не используете скачанный проект быстрого запуска сервера, в проект необходимо добавить пакет расширений для аутентификации. Дополнительные сведения о пакетах расширений для сервера см. в статье Работа с пакетом SDK для внутреннего сервера .NET для мобильных приложений Azure.

Регистрация приложения для проверки подлинности и настройка служб приложений

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

  1. Настройте выбранный поставщик удостоверений, следуя соответствующим инструкциям:

  2. Повторите предыдущие шаги для каждого поставщика, поддержку которого вы хотите включить в свое приложение.

Добавление приложения в список разрешенных URL-адресов внешнего перенаправления

Для безопасной аутентификации требуется определить новую схему URL-адресов для своего приложения. Это позволяет системе аутентификации выполнять перенаправление обратно в приложение после завершения процесса аутентификации. В этом руководстве мы повсеместно используем схему URL-адресов appname. Тем не менее можно использовать любую схему URL-адресов на свой выбор. Она должна быть уникальной для мобильного приложения. Вот как можно включить перенаправление на стороне сервера.

  1. На портале Azure выберите свою службу приложений.

  2. Выберите пункт меню Аутентификация или авторизация.

  3. В поле Разрешенные URL-адреса внешнего перенаправления введите url_scheme_of_your_app://easyauth.callback. url_scheme_of_your_app в этой строке — это схема URL-адресов для вашего мобильного приложения. Она должна соответствовать обычной спецификации URL-адресов для протокола (можно использовать буквы и цифры, и адрес должен начинаться с буквы). Необходимо записать выбранную строку, так как потребуется в нескольких местах настроить код мобильного приложения с использованием схемы URL-адресов.

  4. Нажмите кнопку ОК.

  5. Выберите команду Сохранить.

Ограничение разрешений для пользователей, прошедших проверку подлинности

По умолчанию API-интерфейсы в серверной части мобильных приложений могут вызываться анонимно. Далее необходимо ограничить доступ всем клиентам, не прошедшим проверку подлинности.

  • Серверная часть Node.js (через портал Azure):

    В параметрах мобильных приложений щелкните простые таблицы и выберите таблицу. Щелкните Изменить разрешения, выберите для всех разрешений параметр Authenticated access only (Доступ только с проверкой подлинности) и нажмите кнопку Сохранить.

  • Серверная часть .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 требуется аутентификация.

Далее вы обновите клиентское приложение для запроса ресурсов из серверной части мобильного приложения прошедшим аутентификацию пользователем.

Добавление проверки подлинности в приложение

В этом разделе предстоит изменить приложение для отображения экрана входа до отображения данных. При запуске приложение не будет подключаться к Службе приложений и не будет отображать данные. После первого обновления пользователем появится экран входа; список задач появится после успешного входа.

  1. В проекте клиента откройте файл QSTodoService.cs и добавьте следующий оператор using и объект MobileServiceUser с методом доступа к классу QSTodoService:

    using UIKit;
    
    // Logged in user
    private MobileServiceUser user;
    public MobileServiceUser User { get { return user; } }
    
  2. Добавьте новый метод 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.

  3. Откройте файл 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();
    }
    
  4. Измените метод 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
    
  5. Откройте файл 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);
    }
    
  6. Откройте файл Info.plist и перейдите к записи Типы URL-адресов в разделе Дополнительно. Теперь настройте идентификатор и схемы URL-адресов для типов URL-адресов, а затем щелкните Добавить тип URL-адресов. Схемы URL-адресов должны совпадать с {url_scheme_of_your_app}.

  7. В среде Visual Studio, подключенной к узлу Mac или Visual Studio для Mac, запустите клиентский проект, указав устройство или эмулятор. Убедитесь, что в приложении не отображаются данные.

    Обновите, потянув вниз список элементов, чтобы появился экран входа. После успешного ввода допустимых учетных данных в приложении отобразится список элементов задач и вы сможете внести изменения в данные.