Настройка проверки подлинности в примере приложения iOS Swift с помощью Azure Active Directory B2C
В этой статье на примере приложения iOS Swift показано, как добавить функцию проверки подлинности Azure Active Directory B2C (Azure AD B2C) в мобильное приложение.
OpenID Connect (OIDC) представляет собой протокол проверки подлинности, основанный на OAuth 2.0. OIDC можно использовать для безопасного входа пользователей в приложение. В этом примере мобильное приложение использует библиотеку проверки подлинности Майкрософт (MSAL) с ключом проверки для обмена кодом (PKCE). MSAL — это предоставляемая корпорацией Майкрософт библиотека, которая позволяет легко включить поддержку проверки подлинности и авторизации в мобильных приложениях.
Поток входа включает следующие шаги:
- В приложении пользователи выбирают Вход.
- Приложение открывает системный браузер мобильного устройства и инициирует запрос на проверку подлинности в Azure AD B2C.
- Пользователи выполняют вход или регистрацию, сброс пароля или вход с помощью учетной записи социальной сети.
- После входа пользователей Azure AD B2C возвращает приложению код авторизации.
- Приложение выполняет указанные ниже действия.
- Обменивает код авторизации на маркер идентификатора, маркер доступа и маркер обновления.
- Считывает утверждения маркера идентификатора.
- Сохраняет маркеры в кэше, размещенном в памяти, для последующего использования.
Чтобы ваше приложение могло входить в систему с использованием Azure AD B2C и совершать вызовы к веб-API, зарегистрируйте два приложения в каталоге Azure AD B2C.
Регистрация мобильного приложения позволяет вашему приложению выполнять вход с помощью Azure AD B2C. При регистрации приложения укажите URI перенаправления. URI перенаправления — это конечная точка, в которую пользователей перенаправляет служба Azure AD B2C, после того как они прошли проверку с ее помощью. В процессе регистрации приложения создается идентификатор приложения, который также называется идентификатором клиента. Он однозначно идентифицирует мобильное приложение (например, идентификатор приложения: 1).
После регистрации веб-API приложение сможет совершать вызовы к защищенному веб-API. После регистрации станут доступны разрешения (области) веб-API. В процессе регистрации приложения система создает идентификатор приложения, с помощью которого можно уникальным образом идентифицировать веб-API (например, идентификатор приложения: 2). Предоставьте мобильному приложению (с идентификатором приложения 1) разрешения для областей веб-API (с идентификатором приложения 2).
Регистрация и архитектура приложения показаны на следующих схемах:
После завершения проверки подлинности пользователи взаимодействуют с приложением, которое вызывает защищенный веб-API. Этот веб-API использует проверку подлинности посредством маркера носителя. Маркер носителя — это маркер доступа, полученный приложением от Azure AD B2C. Приложение передает маркер в заголовке авторизации HTTPS-запроса.
Authorization: Bearer <access token>
Если область действия токена доступа не соответствует областям веб-API, библиотека аутентификации получает новый токен доступа с правильными областями.
Поток выхода включает следующие шаги:
- В приложении пользователь выполняет выход.
- Приложение очищает объекты сеанса, а библиотека проверки подлинности очищает свой кэш маркеров.
- Приложение перенаправляет пользователя в конечную точку выхода Azure AD B2C, чтобы завершить сеанс Azure AD B2C.
- Пользователи перенаправляются обратно в приложение.
Компьютер, на котором работает:
- Xcode 13 или более поздней версии.
- Диспетчер зависимостей CocoaPods для проектов Swift и Objective-C Cocoa.
Если пользователи пытаются войти в приложение, оно инициирует запрос проверки подлинности к конечной точке авторизации через поток пользователя. Соответствующий поток пользователя определяет и контролирует взаимодействие с пользователем. Когда пользователи завершают поток пользователя, Azure AD B2C создает маркер и перенаправляет пользователя обратно в приложение.
Создайте поток пользователя или пользовательскую политику, если вы еще не сделали этого. Повторите эти шаги, чтобы создать три отдельных пользовательских потока:
- Объединенный пользовательский поток входа и регистрации, например
susi
. Этот пользовательский поток также поддерживает функцию Забыли пароль?. - Пользовательский поток редактирования профиля, например
edit_profile
. - Пользовательский поток сброса пароля, например
reset_password
.
Azure AD B2C добавляет B2C_1_
в начало имени пользовательского потока. Например, susi
преобразуется в B2C_1_susi
.
Создайте мобильное приложение и регистрацию приложения веб-API, а также укажете области для своего веб-API.
Чтобы создать регистрацию приложения веб-API (идентификатор приложения: 2), выполните следующие действия.
Войдите на портал Azure.
Убедитесь, что вы используете каталог, содержащий клиент Azure AD B2C. На панели инструментов портала выберите значок Каталоги и подписки.
В настройках портала на странице Каталоги и подписки найдите свой каталог Azure AD B2C в списке Имя каталога и выберите Переключить.
На портале Azure найдите и выберите Azure AD B2C.
Щелкните Регистрация приложений и выберите Новая регистрация.
В поле Имя введите имя приложения (например, my-api1). Оставьте значения по умолчанию для URI перенаправления и поддерживаемых типов учетных записей.
Выберите Зарегистрировать.
Когда регистрация приложения завершится, выберите Обзор.
Запишите значение идентификатора приложения (клиента) для дальнейшего использования при настройке веб-приложения.
Выберите созданное приложение my-api1 (идентификатор приложения: 2), чтобы открыть страницу Обзор.
В разделе Управление выберите Предоставление API.
Рядом с полем URI идентификатора приложения щелкните ссылку Задать. Замените значение по умолчанию (уникальный идентификатор) уникальным именем (например, tasks-api), а затем нажмите Сохранить.
Когда веб-приложение запрашивает маркер доступа для веб-API, оно должно добавить этот URI в качестве префикса для каждой области, определяемой для API.
В разделе Области, определенные этим API выберите Добавление области.
Чтобы создать область, определяющую доступ для чтения к API, сделайте следующее.
- В поле Имя области введите tasks.read.
- В качестве отображаемого имени согласия администратора укажите Доступ на чтение к API задач.
- В качестве описания согласия администратора введите Предоставляет доступ на чтение к API задач.
Выберите Добавить область.
Выберите Добавить область и добавьте область, определяющую доступ для записи к API:
- В поле Имя области введите tasks.write.
- В качестве отображаемого имени согласия администратора укажите Доступ на запись к API задач.
- В качестве описания согласия администратора введите Предоставляет доступ на запись к API задач.
Выберите Добавить область.
Чтобы создать регистрацию мобильного приложения, сделайте следующее:
- Войдите на портал Azure.
- Щелкните Регистрация приложений и выберите Новая регистрация.
- В поле Имя введите имя приложения (например, iOs-app1).
- В разделе Поддерживаемые типы учетных записей выберите элемент Accounts in any identity provider or organizational directory (for authenticating users with user flows) (Учетные записи в любом поставщике удостоверений или каталоге организации (для аутентификации пользователей с использованием сведений о маршрутах пользователей)).
- В разделе URL-адрес перенаправления щелкните Общедоступный клиент / собственный (мобильный и классический), а затем введите
msauth.com.microsoft.identitysample.MSALiOS://auth
. - Выберите Зарегистрировать.
- Когда регистрация приложения завершится, выберите Обзор.
- Запишите значение параметра Идентификатор приложения (клиента) для использования на более позднем этапе при настройке мобильного приложения.
Чтобы предоставить своему приложению (идентификатор приложения: 1) разрешения, выполните следующие действия.
Выберите Регистрация приложений, а затем выберите созданное вами приложение (идентификатор приложения: 1).
В разделе Управление выберите Разрешения API.
В разделе Настроенные разрешения выберите Добавить разрешение.
Выберите вкладку Мои API.
Выберите API (идентификатор приложения: 2), к которому веб-приложению должен быть предоставлен доступ. Например, введите my-api1.
В разделе Разрешение разверните узел tasks, а затем выберите определенные ранее области (например, tasks.read и tasks.write).
Выберите Добавить разрешения.
Выберите Предоставить согласие администратора для <имя арендатора>.
Выберите ответ Да.
Выберите Обновить, а затем убедитесь, что Разрешено для... отображается в разделе Состояние для обеих областей.
В списке настроенных разрешений выберите свою область, а затем скопируйте полное имя области.
В этом примере показано, как получить маркер доступа с соответствующими областями, который мобильное приложение может использовать для доступа к веб-API. Чтобы вызвать веб-API из кода, выполните следующие действия:
- Используйте существующий веб-API или создайте его. Дополнительные сведения см. в статье Включение проверки подлинности в собственном веб-API с использованием Azure AD B2C.
- Измените пример кода так, чтобы он вызывал веб-API.
- После настройки веб-API скопируйте URI конечной точки веб-API. Вы будете использовать конечную точку веб-API на следующих этапах.
Совет
Если у вас нет веб-API, вы все равно можете использовать этот пример. В этом случае приложение будет возвращать маркер доступа, но не сможет совершить вызов к веб-API.
Скачайте ZIP-файл или клонируйте пример веб-приложения из репозитория GitHub.
git clone https://github.com/Azure-Samples/active-directory-b2c-ios-swift-native-msal
Для установки библиотеки MSAL используйте CocoaPods. В окне терминала перейдите к корневой папке проекта. Эта папка содержит файл podfile. Выполните следующую команду:
pod install
Откройте рабочее пространство
MSALiOS.xcworkspace
с помощью Xcode.
Откройте файл ViewController.swift. Элементы класса ViewController
содержат сведения об используемом вами поставщике удостоверений Azure AD B2C. Мобильное приложение использует эти сведения для установления отношений доверия с Azure AD B2C, выполнения входа и выхода пользователя, получения маркеров и их проверки.
Обновите следующие элементы класса:
Клавиши | Значение |
---|---|
kTenantName | Полное имя клиента Azure AD B2C (например, contoso.onmicrosoft.com ). |
kAuthorityHostName | Первая часть имени клиента Azure AD B2C (например, contoso.b2clogin.com ). |
kClientID | Идентификатор мобильного приложения, полученный на шаге 2.3. |
kRedirectUri | URI перенаправления для мобильного приложения, полученный на шаге 2.3: msauth.com.microsoft.identitysample.MSALiOS://auth . |
kSignupOrSigninPolicy | Поток регистрации пользователя, поток входа пользователя в систему или пользовательская политика, созданная на шаге 1. |
kEditProfilePolicy | Поток пользователя для изменения профиля или пользовательская политика, созданная на шаге 1. |
kGraphURI | (Необязательно) Конечная точка веб-API, созданная на шаге 3 (например, https://contoso.azurewebsites.net/hello ). |
kScopes | Области веб-API, созданные на шаге 2.4. |
Скомпилируйте и запустите проект в симуляторе подключенного устройства iOS.
Выберите Войти, затем зарегистрируйтесь или войдите в систему с помощью локальной учетной записи Azure AD B2C или учетной записи социальной сети.
После успешной проверки подлинности отображаемое имя появится в области навигации.
Вы узнаете, как выполнять следующие задачи: