Краткое руководство: вход пользователей и вызов Microsoft Graph из iOS или macOS-приложения
В этом кратком руководстве вы скачаете и запустите пример кода, демонстрирующий, как нативное приложение для iOS или macOS может авторизовать пользователей и получить токен доступа для вызова API Microsoft Graph.
Краткое руководство относится как к приложениям iOS, так и к приложениям macOS. Некоторые шаги необходимы только для приложений iOS и будут указаны таким образом.
Необходимые условия
- Учетная запись Azure с активной подпиской. Создать учётную запись бесплатно.
- XCode 10+
- iOS 10+
- macOS 10.12+
Принцип работы примера
Регистрация приложения быстрого запуска
Чтобы зарегистрировать приложение и добавить сведения о регистрации приложения в решение вручную, выполните следующие действия.
- Войдите в центр администрирования Microsoft Entra как минимум в качестве разработчика приложений.
- Если у вас есть доступ к нескольким арендаторам, используйте значок Настройки
в верхнем меню, чтобы переключиться на арендатора, в котором вы хотите зарегистрировать приложение из меню Каталоги + подписки.
- Перейдите в идентификацию>>регистрации приложений.
- Выберите Новая регистрация.
- Введите имя для вашего приложения. Пользователи приложения могут увидеть это имя, и вы можете изменить его позже.
- Выберите Зарегистрировать.
- В разделе Управлениевыберите Аутентификация>Добавить платформу>iOS.
- Введите идентификатор пакета для вашего приложения. Идентификатор пакета — это уникальная строка, которая однозначно идентифицирует приложение, например
com.<yourname>.identitysample.MSALMacOS
. Запишите используемое значение. Обратите внимание, что конфигурация iOS также применима к приложениям macOS. - Выберите Настроить и сохраните сведения о конфигурации MSAL для использования позже в этом кратком руководстве.
- Выберите Готово.
Шаг 2. Скачивание примера проекта
Шаг 3. Установка зависимостей
- Извлеките ZIP-файл.
- В окне терминала перейдите в папку с скачанным примером кода и запустите
pod install
, чтобы установить последнюю библиотеку MSAL.
Шаг 4. Настройка проекта
Если вы выбрали вариант 1 выше, можно пропустить эти действия.
Откройте проект в XCode.
Измените ViewController.swift и замените строку, начиная с "let kClientID" следующим фрагментом кода. Не забудьте обновить значение
kClientID
с помощью идентификатора клиента, сохраненного при регистрации приложения ранее в этом кратком руководстве:let kClientID = "Enter_the_Application_Id_Here"
Если вы создаете приложение для национальных облаков Microsoft Entra, замените строки, содержащие "let kGraphEndpoint" и "let kAuthority", на правильные конечные точки. Для глобального доступа используйте значения по умолчанию:
let kGraphEndpoint = "https://graph.microsoft.com/" let kAuthority = "https://login.microsoftonline.com/common"
Другие конечные точки задокументированы здесь. Например, чтобы запустить быстрый запуск с Microsoft Entra Germany, используйте следующее:
let kGraphEndpoint = "https://graph.microsoft.de/" let kAuthority = "https://login.microsoftonline.de/common"
Откройте параметры проекта. В разделе Identity введите идентификатор пакета.
Щелкните правой кнопкой мыши Info.plist и выберите Открыть как>исходный код.
В корневом узле дикта замените
Enter_the_bundle_Id_Here
на идентификатор пакета , который вы использовали на портале. Обратите внимание на префиксmsauth.
в строке.<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>msauth.Enter_the_Bundle_Id_Here</string> </array> </dict> </array>
Создайте и запустите приложение!
Дополнительные сведения
Ознакомьтесь с этими разделами, чтобы узнать больше об этом кратком руководстве.
Получить MSAL
MSAL (MSAL.framework) — это библиотека, используемая для входа пользователей в систему и запроса токенов, которые используются для доступа к API, защищенному платформой удостоверений Майкрософт. Вы можете добавить MSAL в приложение с помощью следующего процесса:
$ vi Podfile
Добавьте следующий код в этот podfile (с целевым объектом проекта):
use_frameworks!
target 'MSALiOS' do
pod 'MSAL'
end
Выполните команду установки CocoaPods:
pod install
Инициализация MSAL
Вы можете добавить ссылку для MSAL, добавив следующий код:
import MSAL
Затем инициализировать MSAL с помощью следующего кода:
let authority = try MSALAADAuthority(url: URL(string: kAuthority)!)
let msalConfiguration = MSALPublicClientApplicationConfig(clientId: kClientID, redirectUri: nil, authority: authority)
self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration)
Где: | Описание |
---|---|
clientId |
Идентификатор приложения из приложения, зарегистрированного в portal.azure.com |
authority |
Платформа удостоверений Майкрософт. В большинстве случаев это будет https://login.microsoftonline.com/common |
redirectUri |
URI перенаправления приложения. Вы можете передать термин 'nil', чтобы использовать значение по умолчанию, или указать собственный URI перенаправления. |
Только для iOS дополнительные требования к приложению
Ваше приложение также должно иметь следующие элементы в AppDelegate
. Это позволяет MSAL SDK обрабатывать ответ токена из приложения аутентификации брокера во время аутентификации.
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String)
}
Заметка
На iOS 13+, если вы используете UISceneDelegate
вместо UIApplicationDelegate
, поместите этот код в функцию обратного вызова scene:openURLContexts:
вместо этого (см. документацию Apple ).
Если вы поддерживаете и UISceneDelegate, и UIApplicationDelegate для совместимости со старыми версиями iOS, то обратный вызов MSAL необходимо поместить в обоих случаях.
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let urlContext = URLContexts.first else {
return
}
let url = urlContext.url
let sourceApp = urlContext.options.sourceApplication
MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: sourceApp)
}
Наконец, ваше приложение должно иметь запись LSApplicationQueriesSchemes
в Info.plist вместе с CFBundleURLTypes
. Образец поставляется с этим в комплекте.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>msauthv2</string>
<string>msauthv3</string>
</array>
Вход для пользователей & запрос токенов
MSAL имеет два метода, используемых для получения маркеров: acquireToken
и acquireTokenSilent
.
acquireToken: Интерактивное получение токена
В некоторых ситуациях пользователям требуется взаимодействовать с платформой удостоверений Майкрософт. В таких случаях пользователю может потребоваться выбрать свою учетную запись, ввести свои учетные данные или предоставить согласие на разрешения вашего приложения. Например
- При первом входе пользователей в приложение
- Если пользователь сбрасывает пароль, ему потребуется ввести свои учетные данные.
- Когда приложение запрашивает доступ к ресурсу в первый раз
- Если требуется многофакторная проверка подлинности или другие политики условного доступа
let parameters = MSALInteractiveTokenParameters(scopes: kScopes, webviewParameters: self.webViewParamaters!)
self.applicationContext!.acquireToken(with: parameters) { (result, error) in /* Add your handling logic */}
Где: | Описание |
---|---|
scopes |
Содержит запрашиваемые области (то есть [ "user.read" ] для Microsoft Graph или [ "<Application ID URL>/scope" ] для пользовательских веб-API (api://<Application ID>/access_as_user )) |
acquireTokenSilent: Получить токен доступа в фоновом режиме
Приложения не должны требовать, чтобы пользователи входить каждый раз, когда они запрашивают токен. Если пользователь уже выполнил вход, этот метод позволяет приложениям незаметно запрашивать токены.
self.applicationContext!.getCurrentAccount(with: nil) { (currentAccount, previousAccount, error) in
guard let account = currentAccount else {
return
}
let silentParams = MSALSilentTokenParameters(scopes: self.kScopes, account: account)
self.applicationContext!.acquireTokenSilent(with: silentParams) { (result, error) in /* Add your handling logic */}
}
Где: | Описание |
---|---|
scopes |
Содержит запрашиваемые области (то есть [ "user.read" ] для Microsoft Graph или [ "<Application ID URL>/scope" ] для пользовательских веб-API (api://<Application ID>/access_as_user )) |
account |
Учетная запись, для которой запрашивается токен. В этом кратком руководстве описано приложение для одной учетной записи. Если вы хотите создать приложение с несколькими учетными записями, необходимо разработать логику, чтобы определить, какую учетную запись использовать для запросов токенов с помощью accountsFromDeviceForParameters:completionBlock: и передачи правильных accountIdentifier |
Справка и поддержка
Если вам нужна помощь, хотите сообщить о проблеме или хотите узнать о вариантах поддержки, см. справку и поддержку для разработчиков.
Дальнейшие действия
Перейдите к пошаговому руководству, в котором вы создаете приложение iOS или macOS, которое получает маркер доступа из платформы удостоверений Майкрософт и использует его для вызова API Microsoft Graph.