Handleiding: Zelfservice-wachtwoordherstel toevoegen

Van toepassing op: Groene cirkel met een wit vinkje dat aangeeft dat de volgende inhoud van toepassing is op externe tenants. Externe tenants (meer informatie)

In deze zelfstudie ziet u hoe u gebruikers in staat stelt hun wachtwoord te wijzigen of opnieuw in te stellen, zonder tussenkomst van de beheerder of helpdesk.

In deze handleiding leert u:

  • Voeg een selfserviceproces voor wachtwoordreset (SSPR) toe.
  • Voeg de vereiste gebruikersinterface (UI) voor SSPR toe aan uw app.
  • Omgaan met fouten.

Voorwaarden

Voeg een selfservicestroom voor wachtwoordherstel toe

Als u SSPR-stroom wilt toevoegen aan uw Android-toepassing, hebt u een gebruikersinterface voor wachtwoordherstel nodig:

  • Een invoertekstveld voor het verzamelen van het e-mailadres van de gebruiker (gebruikersnaam).
  • Een invoertekstveld voor het verzamelen van eenmalige wachtwoordcode.
  • Een invoertekstveld voor het verzamelen van een nieuw wachtwoord.

Wanneer gebruikers hun wachtwoorden vergeten, hebben ze een formulier nodig om hun gebruikersnamen (e-mailadressen) in te voeren om de stroom voor wachtwoordherstel te starten. De gebruiker selecteert de knop Wachtwoord vergeten of koppeling.

Het herstelproces voor het wachtwoord starten

Als u de aanvraag wilt verwerken wanneer de gebruiker de knop Wachtwoord vergeten knop of koppeling selecteert, gebruikt u de resetPassword(parameters) methode van de Android SDK, zoals wordt weergegeven in het volgende codefragment:

 private fun forgetPassword() { 
     CoroutineScope(Dispatchers.Main).launch { 
         val parameter = NativeAuthResetPasswordParameters(username = email)
         val actionResult = authClient.resetPassword(parameter)

         when (resetPasswordResult) { 
             is ResetPasswordStartResult.CodeRequired -> { 
                 // The implementation of submitCode() please see below. 
                 submitCode(resetPasswordResult.nextState) 
             } 
             is ResetPasswordError -> {
                 // Handle errors
                 handleResetPasswordError(resetPasswordResult)
             }
         }
     } 
 } 
  • resetPassword(parameters) methode initieert de stroom voor wachtwoordherstel, en er wordt een eenmalige code verzonden naar het e-mailadres van de gebruiker voor verificatie.

  • Het terugkeerresultaat van resetPassword(parameters) is ofwel ResetPasswordStartResult.CodeRequired of ResetPasswordError.

  • Als resetPasswordResult is ResetPasswordStartResult.CodeRequired, moet de app de eenmalige wachtwoordcode van de gebruiker verzamelen en deze verzenden, zoals wordt weergegeven in Eenmalige wachtwoordcode verzenden van e-mail.

  • Als resetPasswordResult is ResetPasswordError, biedt Android SDK hulpprogrammamethoden waarmee u de specifieke fouten verder kunt analyseren: - isUserNotFound() - isBrowserRequired()

  • Deze fouten geven aan dat de vorige bewerking is mislukt en dat er dus geen verwijzing naar een nieuwe status beschikbaar is. U kunt deze fouten afhandelen, zoals wordt weergegeven in fouten verwerken sectie.

Eenmalige wachtwoordcode voor e-mail verzenden

Uw app verzamelt de eenmalige wachtwoordcode voor e-mail van de gebruiker. Als u de eenmalige wachtwoordcode voor e-mail wilt verzenden, gebruikt u het volgende codefragment:

private suspend fun submitCode(currentState: ResetPasswordCodeRequiredState) { 
    val code = binding.codeText.text.toString() 
    val submitCodeResult = currentState.submitCode(code) 

    when (submitCodeResult) { 
        is ResetPasswordSubmitCodeResult.PasswordRequired -> { 
            // Handle success
            resetPassword(submitCodeResult.nextState) 
        } 
         is SubmitCodeError -> {
             // Handle errors
             handleSubmitCodeError(actionResult)
         }
    } 
} 
  • Het retourresultaat van de submitCode() actie is ResetPasswordSubmitCodeResult.PasswordRequired of SubmitCodeError.

  • Als submitCodeResult is ResetPasswordSubmitCodeResult.PasswordRequired de app een nieuw wachtwoord van de gebruiker moet verzamelen en moet verzenden zoals wordt weergegeven in Een nieuw wachtwoord verzenden.

  • Als de gebruiker de eenmalige wachtwoordcode van de e-mail niet ontvangt, kan de app de wachtwoordcode van de e-mail opnieuw verzenden. Gebruik het volgende codefragment om een nieuwe eenmalige wachtwoordcode voor een e-mail opnieuw te verzenden:

    private fun resendCode() { 
         clearCode() 
    
         val currentState = ResetPasswordCodeRequiredState 
    
         CoroutineScope(Dispatchers.Main).launch { 
             val resendCodeResult = currentState.resendCode() 
    
             when (resendCodeResult) { 
                 is ResetPasswordResendCodeResult.Success -> { 
                     // Handle code resent success
                 } 
                 is ResendCodeError -> {
                      // Handle ResendCodeError errors
                  }
             } 
         } 
    } 
    
    • Het retourresultaat van de resendCode() actie is ResetPasswordResendCodeResult.Success of ResendCodeError.

    • ResendCodeError is een onverwachte fout voor SDK. Deze fout geeft aan dat de vorige bewerking is mislukt, dus er is geen verwijzing naar een nieuwe status beschikbaar.

  • Als submitCodeResult is SubmitCodeError, biedt Android SDK hulpprogrammamethoden waarmee u de specifieke fouten verder kunt analyseren:

    • isInvalidCode()
    • isBrowserRequired()

    Deze fouten geven aan dat de vorige bewerking is mislukt en dat er dus geen verwijzing naar een nieuwe status beschikbaar is. U kunt deze fouten afhandelen, zoals wordt weergegeven in fouten verwerken sectie.

Een nieuw wachtwoord verzenden

Nadat u het e-mailadres van de gebruiker hebt geverifieerd, moet u een nieuw wachtwoord van de gebruiker verzamelen en verzenden. Het wachtwoord dat de app van de gebruiker verzamelt, moet voldoen aan het wachtwoordbeleid van Microsoft Entra. Gebruik het volgende codefragment:

private suspend fun resetPassword(currentState: ResetPasswordPasswordRequiredState) { 
    val password = binding.passwordText.text.toString() 

    val submitPasswordResult = currentState.submitPassword(password) 

    when (submitPasswordResult) { 
        is ResetPasswordResult.Complete -> { 
            // Handle reset password complete. 
        } 
        is ResetPasswordSubmitPasswordError -> {
            // Handle errors
            handleSubmitPasswordError(actionResult)
        }
    } 
} 
  • Het retourresultaat van de submitPassword() actie is ResetPasswordResult.Complete of ResetPasswordSubmitPasswordError.

  • ResetPasswordResult.Complete geeft een geslaagd proces voor het opnieuw instellen van het wachtwoord aan.

  • Als submitPasswordResult is ResetPasswordSubmitPasswordError, biedt de SDK hulpprogrammamethoden voor het verder analyseren van het specifieke type fout dat wordt geretourneerd: - isInvalidPassword() - isPasswordResetFailed()

    Deze fouten geven aan dat de vorige bewerking is mislukt en dat er dus geen verwijzing naar een nieuwe status beschikbaar is. U kunt deze fouten afhandelen, zoals wordt weergegeven in fouten verwerken sectie.

Automatisch aanmelden na het opnieuw instellen van het wachtwoord

Na een geslaagde stroom voor wachtwoordherstel kunt u uw gebruikers automatisch aanmelden zonder een nieuwe aanmeldingsstroom te starten.

De ResetPasswordResult.Complete retourneert een SignInContinuationState-object. De SignInContinuationState biedt toegang tot de signIn(parameters)-methode.

Als u gebruikers automatisch wilt aanmelden na het opnieuw instellen van een wachtwoord, gebruikt u het volgende codefragment:

 private suspend fun resetPassword(currentState: ResetPasswordPasswordRequiredState) { 
     val submitPasswordResult = currentState.submitPassword(password) 
 
     when (submitPasswordResult) { 
         is ResetPasswordResult.Complete -> { 
             signInAfterPasswordReset(nextState = actionResult.nextState)
         } 
     } 
 } 
 
 private suspend fun signInAfterPasswordReset(nextState: SignInContinuationState) {
     val signInContinuationState = nextState

     val parameters = NativeAuthSignInContinuationParameters()
     val signInActionResult = signInContinuationState.signIn(parameters)

     when (actionResult) {
         is SignInResult.Complete -> {
             fetchTokens(accountState = actionResult.resultValue)
         }
         else {
             // Handle unexpected error
         }
     }
  }
 
 private suspend fun fetchTokens(accountState: AccountState) {
     val getAccessTokenParameters = NativeAuthGetAccessTokenParameters()
     val accessTokenResult = accountState.getAccessToken(getAccessTokenParameters)

     if (accessTokenResult is GetAccessTokenResult.Complete) {
         val accessToken =  accessTokenResult.resultValue.accessToken
         val idToken = accountState.getIdToken()
     }
 }

Als u ID-tokenclaims wilt ophalen na aanmelding, gebruikt u de stappen in Tokenclaims ID lezen.

Fouten bij het opnieuw instellen van wachtwoorden afhandelen

Er kunnen enkele verwachte fouten optreden. De gebruiker kan bijvoorbeeld proberen het wachtwoord opnieuw in te stellen met een niet-bestaand e-mailbericht of een wachtwoord opgeven dat niet voldoet aan de wachtwoordvereisten.

Wanneer er fouten optreden, geeft u uw gebruikers een aanwijzing over de fouten.

Deze fouten kunnen optreden aan het begin van de stroom voor wachtwoordherstel of bij het verzenden van een eenmalige wachtwoordcode of bij het verzenden van een wachtwoord.

Fout bij opnieuw instellen van het beginwachtwoord afhandelen

Gebruik het volgende codefragment om de fout af te handelen die wordt veroorzaakt door het opnieuw instellen van wachtwoorden:

private fun handleResetPasswordError(error: ResetPasswordError) {
    when {
        error.isUserNotFound() -> {
            // Display error
        }
        else -> {
            // Unexpected error
        }
    }
}

Afhandeling van fout bij het verzenden van eenmalige wachtwoordcode via e-mail

Gebruik het volgende codefragment om de fout af te handelen die wordt veroorzaakt door het verzenden van een eenmalige wachtwoordcode voor e-mail:

private fun handleSubmitCodeError(error: SubmitCodeError) {
    when {
        error.isInvalidCode() -> {
            // Display error
        }
        else -> {
            // Unexpected error
        }
    }
}

Fout bij verzenden van wachtwoord afhandelen

Gebruik het volgende codefragment om de fout af te handelen die wordt veroorzaakt door het verzenden van een wachtwoord:

private fun handleSubmitPasswordError(error: ResetPasswordSubmitPasswordError) {
    when {
        error.isInvalidPassword() || error.isPasswordResetFailed()
        -> {
            // Display error
        }
        else -> {
            // Unexpected error
        }
    }
}

Volgende stappen

Handleiding: Webfallback implementeren in Android-app