diff --git a/lib/web/desktop.go b/lib/web/desktop.go
index 55046dc796adf..93be476734baa 100644
--- a/lib/web/desktop.go
+++ b/lib/web/desktop.go
@@ -374,6 +374,9 @@ func (h *Handler) performSessionMFACeremony(
return mfa.PromptFunc(func(ctx context.Context, chal *proto.MFAAuthenticateChallenge) (*proto.MFAAuthenticateResponse, error) {
codec := tdpMFACodec{}
+ if chal.WebauthnChallenge == nil {
+ return nil, trace.AccessDenied("Desktop access requires WebAuthn MFA, please register a WebAuthn device to connect")
+ }
// Send the challenge over the socket.
msg, err := codec.Encode(
&client.MFAAuthenticateChallenge{
diff --git a/web/packages/teleport/src/DesktopSession/DesktopSession.tsx b/web/packages/teleport/src/DesktopSession/DesktopSession.tsx
index 73505665e47e0..ba4055ced10f7 100644
--- a/web/packages/teleport/src/DesktopSession/DesktopSession.tsx
+++ b/web/packages/teleport/src/DesktopSession/DesktopSession.tsx
@@ -26,13 +26,14 @@ import Dialog, {
DialogHeader,
DialogTitle,
} from 'design/Dialog';
+import { Attempt as AsyncAttempt } from 'shared/hooks/useAsync';
import { Attempt } from 'shared/hooks/useAttemptNext';
import AuthnDialog from 'teleport/components/AuthnDialog';
import TdpClientCanvas from 'teleport/components/TdpClientCanvas';
import { TdpClientCanvasRef } from 'teleport/components/TdpClientCanvas/TdpClientCanvas';
import { useListener } from 'teleport/lib/tdp/client';
-import type { MfaState } from 'teleport/lib/useMfa';
+import { MfaState, shouldShowMfaPrompt } from 'teleport/lib/useMfa';
import TopBar from './TopBar';
import useDesktopSession, {
@@ -257,7 +258,7 @@ export function DesktopSession(props: State) {
{screenState.screen === 'anotherSessionActive' && (
)}
- {screenState.screen === 'mfa' && }
+ {screenState.screen === 'mfa' && }
{screenState.screen === 'alert dialog' && (
)}
@@ -282,17 +283,6 @@ export function DesktopSession(props: State) {
);
}
-const MfaDialog = ({ mfa }: { mfa: MfaState }) => {
- return (
-
- );
-};
-
const AlertDialog = ({ screenState }: { screenState: ScreenState }) => (