diff --git a/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Login.razor b/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Login.razor index fd8ed1f04ae..faa7e86855f 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Login.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Login.razor @@ -9,7 +9,7 @@
Username or email address
-
+
Password
Forgot password?
diff --git a/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Register.razor b/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Register.razor new file mode 100644 index 00000000000..c8d96d65594 --- /dev/null +++ b/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Register.razor @@ -0,0 +1,58 @@ +@page "/tutorials/mfa/two-factor/register" +@inject IOptionsMonitor WebsiteOption +@inject ITotpService TotpService + +
+
+ +

Two-factor methods

+
+
+
Authenticator app
+
+ Authenticator apps and browser extensions like 1Password, Authy, Microsoft Authenticator, Google Authenticator, etc. generate one-time passwords that are used as a second factor to verify your identity when prompted during sign-in. +
+
Scan the QR code
+
+ Use an authenticator app or browser extension to scan. Learn more about enabling 2FA. +
+
+ +
+
Verify the code from the app
+ + +
+
+ +@code { + [Inject, NotNull] + private NavigationManager? NavigationManager { get; set; } + + private string? _content; + + private string? _code; + + protected override void OnInitialized() + { + base.OnInitialized(); + + _content = TotpService.GenerateOtpUri(new OtpOptions() + { + AccountName = "BootstrapBlazor", + IssuerName = "BootstrapBlazor", + UserName = "Simulator", + SecretKey = "OMM2LVLFX6QJHMYI", + Algorithm = OtpHashMode.Sha1, + Type = OtpType.Totp + }); + } + + private void OnRegister() + { + if (_code == TotpService.Compute("OMM2LVLFX6QJHMYI")) + { + NavigationManager.NavigateTo("/tutorials/mfa/two-factor/app"); + } + } +} diff --git a/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Register.razor.css b/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Register.razor.css new file mode 100644 index 00000000000..b82601e2b45 --- /dev/null +++ b/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/Register.razor.css @@ -0,0 +1,51 @@ +.bb-sign { + margin: 0 auto; + width: 640px; + padding: 0 1rem; +} + + .bb-sign img { + background-color: var(--bb-primary-color); + border-radius: 50%; + margin-block: 2rem; + } + + .bb-sign h1 { + font-size: 24px; + font-weight: 300; + letter-spacing: -0.5px; + margin-block-end: 1rem; + } + +.bb-sign-body { + background-color: #f6f8fa; + border: 1px solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + padding: 1rem; +} + + .bb-sign-body img { + width: 32px; + height: auto; + margin: 0; + margin-block-end: 1rem; + } + + .bb-sign-body h3 { + font-size: 20px; + font-weight: 400; + } + +.bb-sign-qr { + margin-top: 1rem; + margin-bottom: 1rem; +} + +::deep .qrcode { + padding: .5rem; + border: 1px solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + display: inline-flex; + align-items: center; + justify-items: center; +} diff --git a/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/TwoFactor.razor b/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/TwoFactor.razor index 4cdeb2598ce..858942869e3 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/TwoFactor.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Tutorials/MFA/TwoFactor.razor @@ -17,5 +17,8 @@ +