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


Краткое руководство: вход пользователей и вызов Microsoft Graph из iOS или macOS-приложения

В этом кратком руководстве вы скачаете и запустите пример кода, демонстрирующий, как нативное приложение для iOS или macOS может авторизовать пользователей и получить токен доступа для вызова API Microsoft Graph.

Краткое руководство относится как к приложениям iOS, так и к приложениям macOS. Некоторые шаги необходимы только для приложений iOS и будут указаны таким образом.

Необходимые условия

Принцип работы примера

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

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

Чтобы зарегистрировать приложение и добавить сведения о регистрации приложения в решение вручную, выполните следующие действия.

  1. Войдите в центр администрирования Microsoft Entra как минимум в качестве разработчика приложений.
  2. Если у вас есть доступ к нескольким арендаторам, используйте значок Настройки в верхнем меню, чтобы переключиться на арендатора, в котором вы хотите зарегистрировать приложение из меню Каталоги + подписки.
  3. Перейдите в идентификацию>>регистрации приложений.
  4. Выберите Новая регистрация.
  5. Введите имя для вашего приложения. Пользователи приложения могут увидеть это имя, и вы можете изменить его позже.
  6. Выберите Зарегистрировать.
  7. В разделе Управлениевыберите Аутентификация>Добавить платформу>iOS.
  8. Введите идентификатор пакета для вашего приложения. Идентификатор пакета — это уникальная строка, которая однозначно идентифицирует приложение, например com.<yourname>.identitysample.MSALMacOS. Запишите используемое значение. Обратите внимание, что конфигурация iOS также применима к приложениям macOS.
  9. Выберите Настроить и сохраните сведения о конфигурации MSAL для использования позже в этом кратком руководстве.
  10. Выберите Готово.

Шаг 2. Скачивание примера проекта

Шаг 3. Установка зависимостей

  1. Извлеките ZIP-файл.
  2. В окне терминала перейдите в папку с скачанным примером кода и запустите pod install, чтобы установить последнюю библиотеку MSAL.

Шаг 4. Настройка проекта

Если вы выбрали вариант 1 выше, можно пропустить эти действия.

  1. Откройте проект в XCode.

  2. Измените ViewController.swift и замените строку, начиная с "let kClientID" следующим фрагментом кода. Не забудьте обновить значение kClientID с помощью идентификатора клиента, сохраненного при регистрации приложения ранее в этом кратком руководстве:

    let kClientID = "Enter_the_Application_Id_Here"
    
  3. Если вы создаете приложение для национальных облаков Microsoft Entra, замените строки, содержащие "let kGraphEndpoint" и "let kAuthority", на правильные конечные точки. Для глобального доступа используйте значения по умолчанию:

    let kGraphEndpoint = "https://graph.microsoft.com/"
    let kAuthority = "https://login.microsoftonline.com/common"
    
  4. Другие конечные точки задокументированы здесь. Например, чтобы запустить быстрый запуск с Microsoft Entra Germany, используйте следующее:

    let kGraphEndpoint = "https://graph.microsoft.de/"
    let kAuthority = "https://login.microsoftonline.de/common"
    
  5. Откройте параметры проекта. В разделе Identity введите идентификатор пакета.

  6. Щелкните правой кнопкой мыши Info.plist и выберите Открыть как>исходный код.

  7. В корневом узле дикта замените 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>
    
  8. Создайте и запустите приложение!

Дополнительные сведения

Ознакомьтесь с этими разделами, чтобы узнать больше об этом кратком руководстве.

Получить 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.