Поделиться через


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

Обзор

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

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

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

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

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

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

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

Для безопасной проверки подлинности необходимо определить новую схему URL-адресов для приложения. Это позволяет системе проверки подлинности перенаправляться обратно в приложение после завершения процесса проверки подлинности. В этом руководстве мы используем URL-схему название приложения на протяжении всего руководства. Однако вы можете использовать любую схему 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):

    В параметрах мобильных приложений нажмите 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.

  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, запустите клиентский проект, предназначенный для устройства или эмулятора. Убедитесь, что приложение не отображает данные.

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