Självstudie: Stöd för webbåterställning i inbyggd autentisering Med JavaScript SDK

Gäller för: Grön cirkel med en vit bockmarkeringssymbol som anger att följande innehåll gäller för externa klienter. Externa klienter (läs mer)

Den här självstudien visar hur du hämtar säkerhetstoken via en webbläsarbaserad autentisering där intern autentisering inte räcker för att slutföra autentiseringsflödet med hjälp av en mekanism som kallas webbåterställning.

Med webbåterfall kan en klientapp som använder inbyggd autentisering använda webbläsardelad autentisering som en reservmekanism för att förbättra resiliensen. Det här scenariot inträffar när intern autentisering inte räcker för att slutföra autentiseringsflödet. Om auktoriseringsservern till exempel kräver funktioner som klienten inte kan tillhandahålla. Läs mer om webbåterställning.

I den här handledningen kommer du att:

  • Kontrollera isRedirectRequired felet.
  • Hantera isRedirectRequired fel.

Förutsättningar

Kontrollera och hantera webbåterställning

Ett av de fel du kan stöta på när du använder JavaScript SDK eller signIn()SignUp() -metoden är result.error?.isRedirectRequired(). Verktygsmetoden isRedirectRequired() kontrollerar behovet av att återgå till webbläsardelad autentisering. Använd följande kodfragment för att stödja webbåterställning:

const result = await authClient.signIn({
         username,
     });

if (result.isFailed()) {
   if (result.error?.isRedirectRequired()) {
      // Fallback to the delegated authentication flow.
      const popUpRequest: PopupRequest = {
         authority: customAuthConfig.auth.authority,
         scopes: [],
         redirectUri: customAuthConfig.auth.redirectUri || "",
         prompt: "login", // Forces the user to enter their credentials on that request, negating single-sign on.
      };

      try {
         await authClient.loginPopup(popUpRequest);

         const accountResult = authClient.getCurrentAccount();

         if (accountResult.isFailed()) {
            setError(
                  accountResult.error?.errorData?.errorDescription ??
                     "An error occurred while getting the account from cache"
            );
         }

         if (accountResult.isCompleted()) {
            result.state = new SignInCompletedState();
            result.data = accountResult.data;
         }
      } catch (error) {
         if (error instanceof Error) {
            setError(error.message);
         } else {
            setError("An unexpected error occurred while logging in with popup");
         }
      }
   } else {
         setError(`An error occurred: ${result.error?.errorData?.errorDescription}`);
   }
}

När appen använder återställningsmekanismen hämtar appen säkerhetstoken med hjälp loginPopup() av metoden .