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


Руководство по поддержке резервного веб-размещения

Область применения: Зеленый круг с символом белой галочки. iOS (Swift) Зеленый круг с символом белой галочки. macOS (Swift) (Swift)

В этом руководстве показано, как получить маркер через браузер, где для завершения пользовательского потока недостаточно собственной проверки подлинности.

В этом руководстве описано следующее:

  • Проверьте ошибку BrowserRequired.
  • Обработка ошибки BrowserRequired.

Необходимые компоненты

Требуется браузер

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() метода. Чтобы использовать этот метод, необходимо выполнить несколько дополнительных конфигураций:

Теперь мы можем получить маркер и учетную запись в интерактивном режиме. Ниже приведен пример того, как это сделать:

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
        }
    }
}

Маркеры и учетные записи, возвращаемые, идентичны тем, которые будут получены с помощью собственного потока проверки подлинности.