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

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

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

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

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

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

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

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

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

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

  3. В разделе Поставщики проверки подлинности щелкните Azure Active Directory.

  4. Для параметра Режим управления задайте значение Дополнительно.

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

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

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

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

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

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

    В параметрах мобильных приложений щелкните Easy Tables (Простые таблицы) и выберите таблицу. Щелкните Изменить разрешения, выберите для всех разрешений параметр 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.

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

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

Objective-C:

  1. На компьютере Mac откройте файл QSTodoListViewController.m в Xcode и добавьте следующий метод.

    - (void)loginAndGetData
    {
        QSAppDelegate *appDelegate = (QSAppDelegate *)[UIApplication sharedApplication].delegate;
        appDelegate.qsTodoService = self.todoService;
    
        [self.todoService.client loginWithProvider:@"google" urlScheme:@"appname" controller:self animated:YES completion:^(MSUser * _Nullable user, NSError * _Nullable error) {
            if (error) {
                NSLog(@"Login failed with error: %@, %@", error, [error userInfo]);
            }
            else {
                self.todoService.client.currentUser = user;
                NSLog(@"User logged in: %@", user.userId);
    
                [self refresh];
            }
        }];
    }
    

    Измените google на microsoftaccount, twitter, facebook или windowsazureactivedirectory, если Google не используется как поставщик удостоверений. Если вы используете Facebook, необходимо разрешить список доменов Facebook в приложении.

    Замените urlScheme уникальным именем своего приложения. Значение urlScheme должно быть таким же, как и для протокола схемы URL-адресов, указанного в поле Разрешенные URL-адреса внешнего перенаправления на портале Azure. urlScheme используется при обратном вызове аутентификации для переключения на приложение после завершения запроса аутентификации.

  2. Замените [self refresh] в viewDidLoad в файле QSTodoListViewController.m следующим кодом.

    [self loginAndGetData];
    
  3. Откройте файл QSAppDelegate.h и добавьте в него следующий код.

    #import "QSTodoService.h"
    
    @property (strong, nonatomic) QSTodoService *qsTodoService;
    
  4. Откройте файл QSAppDelegate.m и добавьте в него следующий код.

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
    {
        if ([[url.scheme lowercaseString] isEqualToString:@"appname"]) {
            // Resume login flow
            return [self.qsTodoService.client resumeWithURL:url];
        }
        else {
            return NO;
        }
    }
    

    Добавьте этот код непосредственно перед строкой #pragma mark - Core Data stack. Замените appname значением urlScheme, которое использовалось на шаге 1.

  5. Откройте файл AppName-Info.plist (замените AppName именем своего приложения) и добавьте в него следующий код.

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.microsoft.azure.zumo</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appname</string>
            </array>
        </dict>
    </array>
    

    Этот код должен быть помещен в элемент <dict>. Замените строку appname (в массиве для CFBundleURLSchemes) именем приложения, выбранным на шаге 1. Внести эти изменения можно также в редакторе PList. Щелкните файл AppName-Info.plist в XCode, чтобы открыть редактор PList.

    Замените строку com.microsoft.azure.zumo для CFBundleURLName идентификатором своего пакета Apple.

  6. Нажмите кнопку Выполнить, чтобы запустить приложение, и войдите в систему. После входа вы должны увидеть список Todo и сможете вносить изменения.

Swift:

  1. На компьютере Mac откройте файл ToDoTableViewController.swift в Xcode и добавьте следующий метод.

    func loginAndGetData() {
    
        guard let client = self.table?.client, client.currentUser == nil else {
            return
        }
    
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.todoTableViewController = self
    
        let loginBlock: MSClientLoginBlock = {(user, error) -> Void in
            if (error != nil) {
                print("Error: \(error?.localizedDescription)")
            }
            else {
                client.currentUser = user
                print("User logged in: \(user?.userId)")
            }
        }
    
        client.login(withProvider:"google", urlScheme: "appname", controller: self, animated: true, completion: loginBlock)
    
    }
    

    Измените google на microsoftaccount, twitter, facebook или windowsazureactivedirectory, если Google не используется как поставщик удостоверений. Если используется Facebook, то требуется добавить домены Facebook в список разрешений в приложении.

    Замените urlScheme уникальным именем своего приложения. Значение urlScheme должно быть таким же, как и для протокола схемы URL-адресов, указанного в поле Разрешенные URL-адреса внешнего перенаправления на портале Azure. urlScheme используется при обратном вызове аутентификации для переключения на приложение после завершения запроса аутентификации.

  2. Удалите строки self.refreshControl?.beginRefreshing() и self.onRefresh(self.refreshControl) в конце viewDidLoad() в файле ToDoTableViewController.swift. Добавьте вызов loginAndGetData() вместо них:

    loginAndGetData()
    
  3. Откройте файл AppDelegate.swift и добавьте следующую строку в класс AppDelegate.

    var todoTableViewController: ToDoTableViewController?
    
    func application(_ application: UIApplication, openURL url: NSURL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if url.scheme?.lowercased() == "appname" {
            return (todoTableViewController!.table?.client.resume(with: url as URL))!
        }
        else {
            return false
        }
    }
    

    Замените appname значением urlScheme, которое использовалось на шаге 1.

  4. Откройте файл AppName-Info.plist (замените AppName именем своего приложения) и добавьте в него следующий код.

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLName</key>
            <string>com.microsoft.azure.zumo</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>appname</string>
            </array>
        </dict>
    </array>
    

    Этот код должен быть помещен в элемент <dict>. Замените строку appname (в массиве для CFBundleURLSchemes) именем приложения, выбранным на шаге 1. Внести эти изменения можно также в редакторе PList. Щелкните файл AppName-Info.plist в XCode, чтобы открыть редактор PList.

    Замените строку com.microsoft.azure.zumo для CFBundleURLName идентификатором своего пакета Apple.

  5. Нажмите кнопку Выполнить, чтобы запустить приложение, и войдите в систему. После входа вы должны увидеть список Todo и сможете вносить изменения.

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