Руководство по поддержке резервного веб-размещения
Область применения: iOS (Swift)
macOS (Swift) (Swift)
В этом руководстве показано, как получить маркер через браузер, где для завершения пользовательского потока недостаточно собственной проверки подлинности.
В этом руководстве описано следующее:
- Проверьте ошибку BrowserRequired.
- Обработка ошибки BrowserRequired.
Необходимые компоненты
- Если вы используете iOS, выполните действия, описанные в разделе "Вход пользователей" в примере мобильного приложения iOS.
- Если вы используете macOS, выполните действия, описанные в разделе "Вход пользователей в примере приложения macOS (Swift) с помощью собственной проверки подлинности.
Требуется браузер
BrowserRequired
— это резервный механизм для различных сценариев, в которых собственная проверка подлинности недостаточно для завершения потока пользователя.
Чтобы обеспечить стабильность приложения и избежать прерывания потока проверки подлинности, настоятельно рекомендуется использовать метод пакета SDK acquireToken()
для продолжения потока в браузере.
При инициализации пакета SDK необходимо указать, какие типы проблем могут поддерживать наше приложение. Ниже приведен список типов вызовов, которые принимает пакет SDK:
- OOB (вне полосы): добавьте этот тип проблемы, когда приложение iOS/macOS может обрабатывать одноразовый секретный код в данном случае в коде электронной почты.
- Пароль: добавьте этот тип проблемы, когда приложение может обрабатывать проверку подлинности на основе пароля.
Если Microsoft Entra требует возможностей, которые клиент не может предоставить BrowserRequired
ошибку, будет возвращена. Например, предположим, что мы инициализируем экземпляр пакета SDK, указывающий только тип OOB вызова, но в Центре администрирования Microsoft Entra приложение настроено с помощью потока пользователя электронной почты с паролем . При вызове метода signUp(username) из экземпляра пакета SDK возникает BrowserRequired
ошибка, так как Microsoft Entra требует другого типа вызова (пароль в данном случае), чем в пакете SDK.
Недостаточный тип вызова — это только один пример, когда BrowserRequired
может произойти.
BrowserRequired
— это общий резервный механизм, который может произойти в различных сценариях.
Пример потока
В следующем фрагменте кода показано, как можно указать типы вызовов во время инициализации экземпляра пакета SDK:
nativeAuth = try MSALNativeAuthPublicClientApplication(
clientId: "<client id>",
tenantSubdomain: "<tenant subdomain>",
challengeTypes: [.OOB]
)
В этом случае мы указываем только тип вызова OOB. Предположим, что в Центре администрирования Microsoft Entra приложение настроено с использованием потока пользователя электронной почты с паролем .
let parameters = MSALNativeAuthSignUpParameters(username: email)
nativeAuth.signUp(parameters: parameters, delegate: self)
func onSignUpStartError(error: MSAL.SignUpStartError) {
if error.isBrowserRequired {
// handle browser required error
}
}
При вызове signUp(parameters:delegate)
метода из экземпляра пакета SDK возникает BrowserRequired
ошибка, так как Microsoft Entra требует другого типа вызова (пароль в данном случае), чем тот, который настроен в пакете SDK.
Обработка ошибки BrowserRequired
Чтобы обработать эту ошибку, необходимо запустить браузер и разрешить пользователю выполнять поток проверки подлинности. Это можно сделать путем вызова acquireToken()
метода. Чтобы использовать этот метод, необходимо выполнить несколько дополнительных конфигураций:
- Настройка схем URL-адресов в проекте Xcode
- Настройка URI перенаправления в Центре администрирования Microsoft Entra
Теперь мы можем получить маркер и учетную запись в интерактивном режиме. Ниже приведен пример того, как это сделать:
func onSignUpStartError(error: MSAL.SignUpStartError) {
if error.isBrowserRequired {
let webviewParams = MSALWebviewParameters(authPresentationViewController: self)
let parameters = MSALInteractiveTokenParameters(scopes: ["User.Read"], webviewParameters: webviewParams)
nativeAuth.acquireToken(with: parameters) { (result: MSALResult?, error: Error?) in
// result will contain account and tokens retrieved in the browser
}
}
}
Маркеры и учетные записи, возвращаемые, идентичны тем, которые будут получены с помощью собственного потока проверки подлинности.