Sdílet prostřednictvím


Povolení generování kódu QR pro ověřovací aplikace TOTP v ASP.NET Core

ASP.NET Core se dodává s podporou ověřovacích aplikací pro individuální ověřování. Dvoufaktorové ověřování (2FA) ověřovací aplikace využívající jednorázový jednorázový algoritmus hesla (TOTP) založené na čase jsou doporučeným přístupem pro 2FA. 2FA využívající TOTP je upřednostňované pro SMS 2FA. Ověřovací aplikace poskytuje 6 až 8místný kód, který musí uživatelé zadat po potvrzení svého uživatelského jména a hesla. Ověřovací aplikace je obvykle nainstalovaná na smartphonu.

Upozorňující

Kód ASP.NET Core TOTP by měl být uchovávaný tajný kód, protože se dá použít k úspěšnému ověření několikrát předtím, než vyprší jeho platnost.

Šablony webové aplikace ASP.NET Core podporují ověřovací objekty, ale nepodporují generování kódu QR. Generátory kódu QR usnadňují nastavení 2FA. Tento dokument obsahuje pokyny pro Razor aplikace Pages a MVC o tom, jak přidat generování kódu QR na stránku konfigurace 2FA. Pokyny, které platí pro Blazor Web Apps, najdete v tématu Povolení generování kódu QR pro ověřovací aplikace TOTP v ASP.NET Core Blazor Web App.

Šablony webové aplikace ASP.NET Core podporují ověřovací objekty, ale nepodporují generování kódu QR. Generátory kódu QR usnadňují nastavení 2FA. Tento dokument vás provede přidáním generování kódu QR na stránku konfigurace 2FA.

Dvoufaktorové ověřování se neprovádí pomocí externího zprostředkovatele ověřování, jako je Google nebo Facebook. Externí přihlášení jsou chráněná jakýmkoli mechanismem, který externí zprostředkovatel přihlášení poskytuje. Zvažte například, že zprostředkovatel ověřování Microsoftu vyžaduje hardwarový klíč nebo jiný přístup 2FA. Pokud výchozí šablony vynucují "místní" 2FA, uživatelé by museli splnit dva přístupy 2FA, což není běžně používaný scénář.

Přidání kódů QR na stránku konfigurace 2FA

Tyto pokyny se používají qrcode.js z https://davidshimjs.github.io/qrcodejs/ úložiště.

  • Stáhněte si javascriptovou knihovnu qrcode.js wwwroot\lib do složky v projektu.
  • Postupujte podle pokynů v generování uživatelského rozhraní Identity /Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.
  • Na /Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtmlkonci souboru vyhledejte Scripts oddíl:
@section Scripts {
    @await Html.PartialAsync("_ValidationScriptsPartial")
}
  • Vytvořte nový javascriptový soubor volaný qr.js wwwroot/js a přidejte následující kód pro vygenerování kódu QR:
window.addEventListener("load", () => {
  const uri = document.getElementById("qrCodeData").getAttribute('data-url');
  new QRCode(document.getElementById("qrCode"),
    {
      text: uri,
      width: 150,
      height: 150
    });
});
  • Scripts Aktualizujte oddíl tak, aby se přidal odkaz na knihovnu, kterou qrcode.js jste si stáhli dříve.
  • qr.js Přidejte soubor s voláním pro vygenerování kódu QR:
@section Scripts {
    @await Html.PartialAsync("_ValidationScriptsPartial")

    <script type="text/javascript" src="~/lib/qrcode.js"></script>
    <script type="text/javascript" src="~/js/qr.js"></script>
}
  • Odstraňte odstavec, který vás na tyto pokyny odkazuje.

Spusťte aplikaci a ujistěte se, že můžete naskenovat kód QR a ověřit kód, který ověřovací program prokáže.

Změna názvu webu v kódu QR

Název webu v kódu QR se přebírá z názvu projektu, který zvolíte při počátečním vytvoření projektu. Můžete ho změnit vyhledáním GenerateQrCodeUri(string email, string unformattedKey) metody v souboru /Areas/Identity/Pages/Account/Manage/EnableAuthenticator.cshtml.cs.

Výchozí kód ze šablony vypadá takto:

private string GenerateQrCodeUri(string email, string unformattedKey)
{
    return string.Format(
        AuthenticatorUriFormat,
        _urlEncoder.Encode("Razor Pages"),
        _urlEncoder.Encode(email),
        unformattedKey);
}

Druhým parametrem string.Format volání je název vašeho webu, který pochází z názvu vašeho řešení. Dá se změnit na libovolnou hodnotu, ale musí být vždy zakódovaná adresa URL.

Použití jiné knihovny kódů QR

Knihovnu kódu QR můžete nahradit upřednostňovanou knihovnou. KÓD HTML obsahuje qrCode prvek, do kterého můžete kód QR umístit jakýmkoli mechanismem, který knihovna poskytuje.

Správně naformátovaná adresa URL kódu QR je k dispozici v:

  • AuthenticatorUri vlastnost modelu.
  • data-url vlastnost v elementu qrCodeData .

Nerovnoměrná distribuce času klienta a serveru TOTP

Ověřování TOTP (jednorázové heslo založené na čase) závisí na serveru i ověřovacím zařízení s přesným časem. Tokeny trvají jenom 30 sekund. Pokud přihlášení TOTP 2FA selhávají, zkontrolujte, jestli je čas serveru přesný a pokud možno synchronizovaný s přesnou službou NTP.