Aplikace ASP.NET MVC 5 s dvoufaktorovým ověřováním pomocí SMS a e-mailu
V tomto kurzu se dozvíte, jak vytvořit webovou aplikaci ASP.NET MVC 5 s ověřováním Two-Factor. Než budete pokračovat, měli byste dokončit vytvoření zabezpečené webové aplikace ASP.NET MVC 5 s přihlášením, potvrzením e-mailu a resetováním hesla . Dokončenou aplikaci si můžete stáhnout tady. Soubor ke stažení obsahuje pomocníky ladění, které umožňují otestovat potvrzení e-mailu a SMS bez nastavení poskytovatele e-mailu nebo serveru SMS.
Tento kurz napsal Rick Anderson (Twitter: @RickAndMSFT ).
- Vytvoření aplikace ASP.NET MVC
- Nastavení sms pro dvojúrovňové ověřování
- Povolení dvojúrovňového ověřování
- Další zdroje informací
Vytvoření aplikace ASP.NET MVC
Začněte instalací a spuštěním Visual Studio Express 2013 pro web nebo novější.
Poznámka
Upozornění: Než budete pokračovat, měli byste dokončit vytvoření zabezpečené webové aplikace ASP.NET MVC 5 s přihlášením, potvrzením e-mailu a resetováním hesla . K dokončení tohoto kurzu musíte nainstalovat aktualizaci Visual Studio 2013 Update 3 nebo vyšší.
- Vytvořte nový webový projekt ASP.NET a vyberte šablonu MVC. Web Forms také podporuje ASP.NET Identity, takže v aplikaci webových formulářů můžete postupovat podobně.
- Výchozí ověřování ponechte na individuálních uživatelských účtech. Pokud chcete aplikaci hostovat v Azure, nechte políčko zaškrtnuté. Později v tomto kurzu nasadíme do Azure. Účet Azure si můžete otevřít zdarma.
- Nastavte projekt tak, aby používal SSL.
Nastavení sms pro dvojúrovňové ověřování
Tento kurz obsahuje pokyny pro použití Twilia nebo ASPSMS, ale můžete použít libovolného jiného poskytovatele serveru SMS.
Vytvoření uživatelského účtu u poskytovatele serveru SMS
Instalace dalších balíčků nebo přidání odkazů na služby
Twilio:
V konzole Správce balíčků zadejte následující příkaz:
Install-Package Twilio
ASPSMS:
Je potřeba přidat následující odkaz na službu:Address:
https://webservice.aspsms.com/aspsmsx2.asmx?WSDL
Obor názvů:
ASPSMSX2
Zjištění přihlašovacích údajů uživatele poskytovatele SERVERU SMS
Twilio:
Na kartě Řídicí panel účtu Twilio zkopírujte IDENTIFIKÁTOR SID účtu a token ověřování.ASPSMS:
V nastavení účtu přejděte na Userkey (Klíč uživatele ) a zkopírujte ho společně s vlastním definovaným heslem.Později tyto hodnoty uložíme do souboruweb.config v rámci klíčů
"SMSAccountIdentification"
a"SMSAccountPassword"
.Určení SenderID / Původce
Twilio:
Na kartě Čísla zkopírujte svoje telefonní číslo Twilio.ASPSMS:
V nabídce Odemknout původce odemkněte jednoho nebo více původců nebo zvolte alfanumerický původce (nepodporuje ho všechny sítě).Později tuto hodnotu uložíme do souboruweb.config v klíči
"SMSAccountFrom"
.Přenos přihlašovacích údajů poskytovatele SMS do aplikace
Zpřístupněte aplikaci přihlašovací údaje a telefonní číslo odesílatele. Aby to bylo jednoduché, uložíme tyto hodnoty do web.config souboru. Když nasadíme do Azure, můžeme hodnoty bezpečně uložit v části Nastavení aplikace na kartě Konfigurace webu.
</connectionStrings> <appSettings> <add key="webpages:Version" value="3.0.0.0" /> <!-- Markup removed for clarity. --> <!-- SendGrid--> <add key="mailAccount" value="account" /> <add key="mailPassword" value="password" /> <add key="SMSAccountIdentification" value="My Identification" /> <add key="SMSAccountPassword" value="My Password" /> <add key="SMSAccountFrom" value="+12065551234" /> </appSettings> <system.web>
Upozornění
Zabezpečení – nikdy neukládejte citlivá data ve zdrojovém kódu. Účet a přihlašovací údaje se přidají do výše uvedeného kódu, aby byla ukázka jednoduchá. Viz Osvědčené postupy pro nasazení hesel a dalších citlivých dat do ASP.NET a Azure.
Implementace přenosu dat k poskytovateli serveru SMS
SmsService
Nakonfigurujte třídu v souboru App_Start\IdentityConfig.cs.V závislosti na použitém poskytovateli serveru SMS aktivujte část Twilio nebo ASPSMS :
public class SmsService : IIdentityMessageService { public Task SendAsync(IdentityMessage message) { // Twilio Begin //var accountSid = ConfigurationManager.AppSettings["SMSAccountIdentification"]; //var authToken = ConfigurationManager.AppSettings["SMSAccountPassword"]; //var fromNumber = ConfigurationManager.AppSettings["SMSAccountFrom"]; //TwilioClient.Init(accountSid, authToken); //MessageResource result = MessageResource.Create( //new PhoneNumber(message.Destination), //from: new PhoneNumber(fromNumber), //body: message.Body //); ////Status is one of Queued, Sending, Sent, Failed or null if the number is not valid //Trace.TraceInformation(result.Status.ToString()); ////Twilio doesn't currently have an async API, so return success. //return Task.FromResult(0); // Twilio End // ASPSMS Begin // var soapSms = new MvcPWx.ASPSMSX2.ASPSMSX2SoapClient("ASPSMSX2Soap"); // soapSms.SendSimpleTextSMS( // System.Configuration.ConfigurationManager.AppSettings["SMSAccountIdentification"], // System.Configuration.ConfigurationManager.AppSettings["SMSAccountPassword"], // message.Destination, // System.Configuration.ConfigurationManager.AppSettings["SMSAccountFrom"], // message.Body); // soapSms.Close(); // return Task.FromResult(0); // ASPSMS End } }
Aktualizujte zobrazení Views\Manage\Index.cshtml Razor: (poznámka: Neodstraňujte jenom komentáře v ukončovacím kódu, použijte následující kód.)
@model MvcPWy.Models.IndexViewModel @{ ViewBag.Title = "Manage"; } <h2>@ViewBag.Title.</h2> <p class="text-success">@ViewBag.StatusMessage</p> <div> <h4>Change your account settings</h4> <hr /> <dl class="dl-horizontal"> <dt>Password:</dt> <dd> [ @if (Model.HasPassword) { @Html.ActionLink("Change your password", "ChangePassword") } else { @Html.ActionLink("Create", "SetPassword") } ] </dd> <dt>External Logins:</dt> <dd> @Model.Logins.Count [ @Html.ActionLink("Manage", "ManageLogins") ] </dd> <dt>Phone Number:</dt> <dd> @(Model.PhoneNumber ?? "None") [ @if (Model.PhoneNumber != null) { @Html.ActionLink("Change", "AddPhoneNumber") @: | @Html.ActionLink("Remove", "RemovePhoneNumber") } else { @Html.ActionLink("Add", "AddPhoneNumber") } ] </dd> <dt>Two-Factor Authentication:</dt> <dd> @if (Model.TwoFactor) { using (Html.BeginForm("DisableTwoFactorAuthentication", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() <text>Enabled <input type="submit" value="Disable" class="btn btn-link" /> </text> } } else { using (Html.BeginForm("EnableTwoFactorAuthentication", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() <text>Disabled <input type="submit" value="Enable" class="btn btn-link" /> </text> } } </dd> </dl> </div>
Ověřte,
EnableTwoFactorAuthentication
že metody aDisableTwoFactorAuthentication
v objektuManageController
mají atribut [ValidateAntiForgeryToken] :// // POST: /Manage/EnableTwoFactorAuthentication [HttpPost,ValidateAntiForgeryToken] public async Task<ActionResult> EnableTwoFactorAuthentication() { await UserManager.SetTwoFactorEnabledAsync(User.Identity.GetUserId(), true); var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); if (user != null) { await SignInAsync(user, isPersistent: false); } return RedirectToAction("Index", "Manage"); } // // POST: /Manage/DisableTwoFactorAuthentication [HttpPost, ValidateAntiForgeryToken] public async Task<ActionResult> DisableTwoFactorAuthentication() { await UserManager.SetTwoFactorEnabledAsync(User.Identity.GetUserId(), false); var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); if (user != null) { await SignInAsync(user, isPersistent: false); } return RedirectToAction("Index", "Manage"); }
Spusťte aplikaci a přihlaste se pomocí účtu, který jste předtím zaregistrovali.
Klikněte na id uživatele, čímž se aktivuje
Index
metoda akce vManage
kontroleru.
Klikněte na Přidat.
Metoda
AddPhoneNumber
akce zobrazí dialogové okno pro zadání telefonního čísla, které může přijímat zprávy SMS.// GET: /Account/AddPhoneNumber public ActionResult AddPhoneNumber() { return View(); }
Za několik sekund dostanete textovou zprávu s ověřovacím kódem. Zadejte ho a stiskněte Odeslat.
Zobrazení Spravovat zobrazuje, že vaše telefonní číslo bylo přidáno.
Povolení dvoufaktorového ověřování
V aplikaci vygenerované šablonou musíte k povolení dvoufaktorového ověřování (2FA) použít uživatelské rozhraní. Pokud chcete povolit 2FA, klikněte na id uživatele (e-mailový alias) na navigačním panelu.
Klikněte na povolit 2FA.
Odhlaste se a pak se znovu přihlaste. Pokud jste povolili e-mail (viz můj předchozí kurz), můžete vybrat SMS nebo e-mail pro 2FA.
Zobrazí se stránka Ověřit kód, na které můžete kód zadat (z SMS nebo e-mailu).
Když kliknete na zaškrtávací políčko Pamatovat si tento prohlížeč , nebudete muset používat 2FA k přihlášení při používání prohlížeče a zařízení, kde jste políčko zaškrtnuli. Pokud uživatelé se zlými úmysly nemůžou získat přístup k vašemu zařízení, povolením 2FA a kliknutím na pamatovat si tento prohlížeč získáte pohodlný přístup pomocí hesla v jednom kroku a přitom si zachováte silnou ochranu 2FA pro veškerý přístup z nedůvěryhodných zařízení. Můžete to udělat na jakémkoli privátním zařízení, které pravidelně používáte.
Tento kurz obsahuje rychlý úvod k povolení 2FA v nové aplikaci ASP.NET MVC. Můj kurz Dvoufaktorové ověřování pomocí SMS a e-mailu s ASP.NET Identity se podrobně zabývá kódem za ukázkou.
Další materiály
- Dvojúrovňové ověřování pomocí SMS a e-mailu s ASP.NET Identity Podrobnosti o dvoufaktorovém ověřování
- Odkazy na doporučené zdroje informací o identitě ASP.NET
- Potvrzení účtu a obnovení hesla pomocí identity ASP.NET Podrobnější informace o obnovení hesla a potvrzení účtu.
- Aplikace MVC 5 s přihlášením k Facebooku, Twitteru, LinkedInu a Google OAuth2 V tomto kurzu se dozvíte, jak napsat aplikaci ASP.NET MVC 5 s autorizací Facebook a Google OAuth 2. Ukazuje také, jak přidat další data do databáze identit.
- Nasaďte aplikaci Secure ASP.NET MVC s členstvím, OAuth a SQL Database na web Azure. V tomto kurzu se přidá nasazení Azure, postup zabezpečení aplikace pomocí rolí, použití rozhraní API členství k přidání uživatelů a rolí a další funkce zabezpečení.
- Vytvoření aplikace Google pro OAuth 2 a připojení aplikace k projektu
- Vytvoření aplikace na Facebooku a připojení aplikace k projektu
- Nastavení SSL v projektu
- Nastavení vývojového prostředí C# a ASP.NET MVC
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro