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


Руководство. Добавление регистрации метода строгой проверки подлинности электронной почты в приложение Android

В этом руководстве показано, как реализовать регистрацию метода строгой проверки подлинности электронной почты в приложении Android с помощью собственной проверки подлинности. Хотя бы одна строчная проверка подлинности является обязательной для пользователей с поддержкой многофакторной проверки подлинности (MFA). В настоящее время мы поддерживаем только одноразовый секретный код электронной почты и SMS как надежный метод проверки подлинности.

В этом руководстве вы узнаете, как:

  • Зарегистрируйте надежный метод проверки подлинности для пользователя с поддержкой MFA.
  • Обработка ошибок при регистрации метода сильной аутентификации.

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

  1. Выполните шаги из руководства : добавление входа в приложение Android с использованием собственной проверки подлинности.

  2. Чтобы применить MFA для клиентов, выполните действия, описанные в разделе "Добавление MFA в приложение", чтобы добавить Email OTP в поток входа. В настоящее время родная аутентификация поддерживает одноразовый пароль через электронную почту и SMS в качестве второго фактора для MFA. Таким образом, функция OTP по электронной почте в качестве второго фактора доступна только в том случае, если метод проверки подлинности является адресом электронной почты с паролем.

  3. Если вы хотите изучить реализацию регистрации надежных методов проверки подлинности, взгляните на наш пример кода перед началом работы.

Добавление регистрации метода строгой проверки подлинности в файл конфигурации клиента

Чтобы поддерживать метод строгой проверки подлинности, обновите конфигурацию клиента Android, чтобы включить необходимые возможности регистрации.

{
    "client_id": "Enter_the_Application_Id_Here",
    "authorities": [
    {
        "type": "CIAM",
        "authority_url": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/Enter_the_Tenant_Subdomain_Here.onmicrosoft.com/"
    }
    ],
    "challenge_types": ["oob", "password"],
    "capabilities": ["registration_required"],
    "logging": {
    "pii_enabled": false,
    "log_level": "INFO",
    "logcat_enabled": true
    }
}

Регистрация однократного секретного кода электронной почты в качестве метода строгой проверки подлинности

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

Чтобы зарегистрировать надежный метод проверки подлинности (одноразовый секретный код электронной почты) для пользователя с поддержкой MFA, необходимо:

  1. Создайте пользовательский интерфейс для:

    • Сообщите пользователю, что регистрация метода строгой проверки подлинности требуется для входа (необязательно).
    • Соберите адрес электронной почты для регистрации в качестве метода строгой проверки подлинности. Если пользователь не предоставляет адрес электронной почты, будет использоваться адрес электронной почты по умолчанию, указанный во время создания учетной записи.
    • Соберите одноразовый секретный код электронной почты от пользователя, чтобы выполнить двухфакторную проверку подлинности.
    • Повторно отправить одноразовый секретный код (рекомендуется).
  2. Обработка знака StrongAuthMethodRegistrationRequired в результате:

     val parameters = NativeAuthSignInParameters(username = email)
     parameters.password = password 
     val signInResult: SignInResult = authClient.signIn(parameters) 
    
     when (actionResult) {
         // Handle "strong authentication method registration required" result 
         is SignInResult.StrongAuthMethodRegistrationRequired -> {
             val authMethod = actionResult.authMethods.first {it.challengeChannel.uppercase() == "EMAIL"}
             // Next Step: challengeAuthMethod using nextState 
         }
     }
    

    При входе, если требуется многофакторная аутентификация, и нет зарегистрированной сильной аутентификации, система возвращает SignInResult.StrongAuthMethodRegistrationRequired; пользователю необходимо указать альтернативный адрес электронной почты в качестве метода сильной аутентификации или использовать адрес электронной почты по умолчанию, предоставленный при создании учетной записи.

  3. Обработка challengeAuthMethod() результата:

    val registerStrongAuthState = signInResult.nextState
    verificationContact = "user@contoso.com" // Do NOT hard-code email in production. Use the email provided during account creation or prompt the user for input.
    val params = NativeAuthChallengeAuthMethodParameters(authMethod, verificationContact = verificationContact)
    val challengeAuthResult = registerStrongAuthState.challengeAuthMethod(params)
    
    when (challengeAuthResult) {
        is RegisterStrongAuthChallengeResult.VerificationRequired -> {
            // Next Step: submitChallenge using nextState
        }
        is RegisterStrongAuthChallengeError -> {
            // Handle "register strong auth challenge" error
        }
        else -> {
            // Handle unexpected result
        }
    }
    

    Метод challengeAuthMethod() отправляет одноразовый секретный код на адрес электронной почты, указанный в verificationContact. В большинстве обычных случаев challengeAuthMethod()возвращает результат RegisterStrongAuthChallengeResult.VerificationRequired, указывающий, что пакет SDK ожидает, что приложение отправит одноразовый код, отправленный на адрес электронной почты. Объект RegisterStrongAuthChallengeResult.VerificationRequired содержит новую ссылку на состояние, которую можно получить с помощью challengeAuthResult.nextState. Новое состояние предоставляет доступ к submitChallenge() методу, который можно использовать для ввода одноразового кода, отправленного на электронную почту пользователя.

  4. Обработка submitChallenge() результата:

    val registerStrongAuthVerificationRequiredState = challengeAuthResult.nextState
    val submitChallengeResult = registerStrongAuthVerificationRequiredState.submitChallenge(emailCode)
    
    when (actionResult) {
        is SignInResult.Complete -> {
            // Handle sign in success      
        }
        is RegisterStrongAuthSubmitChallengeError -> {
            // Handle "register strong auth submit challenge" error
        }
        else -> {
            // Handle unexpected result      
        }
    }
    

    В большинстве распространенных сценариев submitChallenge() возвращает результат SignInResult.Complete, который указывает, что пользователь успешно прошел проверку подлинности.

Обработка ошибок регистрации метода строгой проверки подлинности

Для обработки ошибок, возникающих во время регистрации метода строгой проверки подлинности, можно использовать следующие фрагменты кода:

  1. Обработка ошибок для challengeAuthMethod() метода:

    val challengeAuthResult = registerStrongAuthState.challengeAuthMethod(params)
    
    if (challengeAuthResult is RegisterStrongAuthChallengeResult.VerificationRequired) {
        // Next Step: submit challenge
    } else if (challengeAuthResult is RegisterStrongAuthChallengeError) {
        // Handle errors under RegisterStrongAuthChallengeError
        when {
            error.isInvalidInput() -> {
                // Display error
            }
            else -> {
                // Unexpected error
            }
        }
    }
    

    Он RegisterStrongAuthChallengeError обрабатывается после регистрации задачи с помощью registerStrongAuthState.challengeAuthMethod() метода. Используйте метод isInvalidInput() для проверки конкретной ошибки, например, введенный контакт для проверки неверен. В этом случае для отправки новой задачи необходимо использовать предыдущую ссылку на состояние.

  2. Обработка ошибок для submitChallenge() метода:

    val submitChallengeResult = registerStrongAuthVerificationRequiredState.submitChallenge(challenge = emailCode)
    
    if (submitChallengeResult is SignInResult.Complete) {
        // Handle sign in success
    } else if (submitChallengeResult is RegisterStrongAuthSubmitChallengeError) {
        // Handle errors under RegisterStrongAuthSubmitChallengeError
        when {
            error.isInvalidChallenge() -> {
                // Display error
            }
            else -> {
                // Unexpected error
            }
        }
    }
    

    Он RegisterStrongAuthSubmitChallengeError обрабатывается после отправки задачи с помощью registerStrongAuthVerificationRequiredState.submitChallenge(challenge = emailCode). Используйте метод isInvalidChallenge() для проверки конкретной ошибки, например, такой как недопустимое отправленное задание. В этом случае для повторного выполнения отправки задания необходимо использовать ссылку на предыдущий статус.

Дальнейшие действия