Sdílet prostřednictvím


Kurz: Podpora webového náhradního kódu v nativní sadě JavaScript SDK pro ověřování

Platí pro: Zelený kruh se symbolem bílé značky zaškrtnutí, který označuje následující obsah platí pro externí tenanty. Externí tenanti (další informace)

Tento kurz ukazuje, jak získat tokeny zabezpečení prostřednictvím ověřování založeného na prohlížeči, kde nativní ověřování nestačí k dokončení toku ověřování pomocí mechanismu označovaného jako záložní web.

Webová záložní aplikace umožňuje klientské aplikaci, která používá nativní ověřování, používat ověřování delegované prohlížečem jako záložní mechanismus ke zlepšení odolnosti. K tomuto scénáři dochází v případě, že k dokončení toku ověřování nestačí nativní ověřování. Pokud například autorizační server vyžaduje možnosti, které klient nemůže poskytnout. Přečtěte si další informace o náhradním webu.

V tomto kurzu se naučíte:

  • Zkontrolujte isRedirectRequired chybu.
  • Zpracování isRedirectRequired chyby

Požadavky

Kontrola a zpracování náhradního webu

K jedné z chyb, ke kterým můžete dojít při použití javascriptové signIn() sady SDK nebo SignUp() metody, je result.error?.isRedirectRequired(). Metoda nástroje isRedirectRequired() kontroluje potřebu vrátit se k delegovanému ověřování v prohlížeči. K podpoře webového náhradního kódu použijte následující fragment kódu:

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}`);
   }
}

Když aplikace používá záložní mechanismus, aplikace získá tokeny zabezpečení pomocí loginPopup() metody.