ASP.NET MVC 5-app met sms en e-mail Two-Factor authenticatie
door Rick Anderson
In deze zelfstudie leert u hoe u een ASP.NET MVC 5-web-app bouwt met Two-Factor-verificatie. U moet Een beveiligde ASP.NET MVC 5-web-app maken met aanmelden, e-mailbevestiging en wachtwoordherstel voordat u doorgaat. U kunt de voltooide toepassing hierdownloaden. De download bevat helpers voor foutopsporing waarmee u e-mailbevestiging en sms kunt testen zonder een e-mail- of SMS-provider in te stellen.
Deze handleiding is geschreven door Rick Anderson (Twitter: @RickAndMSFT).
- Een ASP.NET MVC-app maken
- SMS instellen voor tweeledige verificatie
- Tweeledige verificatie inschakelen
- Aanvullende bronnen
Een ASP.NET MVC-app maken
Begin met het installeren en uitvoeren van Visual Studio Express 2013 voor Web of hoger.
Notitie
Waarschuwing: u moet Een beveiligde ASP.NET MVC 5-web-app maken met aanmelding, bevestiging van e-mail en wachtwoordherstel voordat u doorgaat. U moet Visual Studio 2013 Update 3 of hoger installeren om deze zelfstudie te voltooien.
- Maak een nieuw ASP.NET-webproject en selecteer de MVC-sjabloon. Web Forms ondersteunt ook ASP.NET Identity, zodat u vergelijkbare stappen in een webformulier-app kunt volgen.
- Laat de standaardverificatie staan als afzonderlijke gebruikersaccounts. Als u de app in Azure wilt hosten, laat u het selectievakje ingeschakeld. Verderop in de zelfstudie implementeren we in Azure. U kunt gratis een Azure-account openen.
- Stel het project in om SSL-te gebruiken.
SMS instellen voor tweeledige verificatie
Deze zelfstudie bevat instructies voor het gebruik van Twilio of ASPSMS, maar u kunt elke andere SMS-provider gebruiken.
Een gebruikersaccount maken met een SMS-provider
Aanvullende pakketten installeren of serviceverwijzingen toevoegen
Twilio:
Voer in de Package Manager-console de volgende opdracht in:
Install-Package Twilio
ASPSMS:
De volgende servicereferentie moet worden toegevoegd:Adres:
https://webservice.aspsms.com/aspsmsx2.asmx?WSDL
Namespace:
ASPSMSX2
Het achterhalen van gebruikersgegevens van de sms-provider
We raden u aan de veiligste veilige verificatieoptie te gebruiken. Zie voor .NET-apps die zijn geïmplementeerd in Azure:
Azure Key Vault en .NET Aspire bieden de veiligste manier om geheimen op te slaan en op te halen. Azure Key Vault is een cloudservice waarmee versleutelingssleutels en geheimen, zoals certificaten, verbindingsreeksen en wachtwoorden, worden beschermd. Zie voor .NET Aspire Beveiligde communicatie tussen hosting en clientintegraties.
Vermijd het gebruik van de Resource Owner Password Credentials Grant omdat het:
- Stelt het wachtwoord van de gebruiker beschikbaar voor de client.
- Is een aanzienlijk beveiligingsrisico.
- Mag alleen worden gebruikt wanneer andere verificatiestromen niet mogelijk zijn.
Wanneer de app wordt geïmplementeerd op een testserver, kan een omgevingsvariabele worden gebruikt om de verbindingsreeks in te stellen op een testdatabaseserver. Omgevingsvariabelen worden over het algemeen opgeslagen in niet-versleutelde tekst. Als de machine of het proces is aangetast, kunnen omgevingsvariabelen worden geopend door niet-vertrouwde partijen. Wij raden af om omgevingsvariabelen te gebruiken om een productieverbindingsreeks op te slaan, omdat dit niet de veiligste benadering is.
Richtlijnen voor configuratiegegevens:
- Sla nooit wachtwoorden of andere gevoelige gegevens op in configuratieprovidercode of in configuratiebestanden met tekst zonder opmaak.
- Gebruik geen productiegeheimen in ontwikkel- of testomgevingen.
- Geef geheimen buiten het project op, zodat ze niet per ongeluk kunnen worden doorgevoerd in een opslagplaats met broncode.
Twilio:
Kopieer op het tabblad Dashboard van uw Twilio-account de account-SID- en verificatietoken.
ASPSMS:
Navigeer vanuit uw accountinstellingen naar Userkey en kopieer deze samen met uw zelf gedefinieerde Wachtwoord.
Deze waarden worden later opgeslagen in het bestand web.config in de sleutels "SMSAccountIdentification"
en "SMSAccountPassword"
.
4. SenderID/Originator opgeven
Twilio:
Kopieer uw Twilio-telefoonnummer van het tabblad Nummers.
ASPSMS:
In het Ontgrendelen Origineers-menu, ontgrendel één of meer Origineers of kies een alfanumerieke Origineer (niet ondersteund door alle netwerken).
Deze waarde wordt later opgeslagen in het web.config bestand in de sleutel "SMSAccountFrom"
.
5. Referenties van sms-provider overzetten naar app
Maak de referenties en het telefoonnummer van de afzender beschikbaar voor de app. Om het eenvoudig te houden, slaan we deze waarden op in het bestand web.config. Wanneer we in Azure implementeren, kunnen we de waarden veilig opslaan in de sectie app-instellingen op het tabblad Configureren van de website.
[!code-xml[Main](aspnet-mvc-5-app-with-sms-and-email-two-factor-authentication/samples/sample1.xml?highlight=8-10)]
> [!WARNING]
> Security - Never store sensitive data in your source code. The account and credentials are added to the code above to keep the sample simple. See [Best practices for deploying passwords and other sensitive data to ASP.NET and Azure](../../../identity/overview/features-api/best-practices-for-deploying-passwords-and-other-sensitive-data-to-aspnet-and-azure.md).
implementatie van gegevensoverdracht naar sms-provider
Configureer de klasse
SmsService
in het bestand App_Start\IdentityConfig.cs.Afhankelijk van de gebruikte SMS-provider activeert u de Twilio- of de sectie 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 } }
Werk de Views\Manage\Index.cshtml Razor view bij: (let op: verwijder niet alleen de opmerkingen in de afsluitcode, gebruik de onderstaande code.)
@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>
Controleer of de
EnableTwoFactorAuthentication
- enDisableTwoFactorAuthentication
-actiemethoden in deManageController
het kenmerk[ValidateAntiForgeryToken] hebben:// // 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"); }
Voer de app uit en meld u aan met het account dat u eerder hebt geregistreerd.
Klik op uw gebruikers-id, waarmee de
Index
actiemethode inManage
controller wordt geactiveerd.
Klik op Toevoegen.
De actiemethode
AddPhoneNumber
geeft een dialoogvenster weer om een telefoonnummer in te voeren dat sms-berichten kan ontvangen.// GET: /Account/AddPhoneNumber public ActionResult AddPhoneNumber() { return View(); }
Over een paar seconden krijgt u een sms-bericht met de verificatiecode. Voer het in en druk op Verzenden.
In de weergave Beheren ziet u dat uw telefoonnummer is toegevoegd.
Tweeledige verificatie inschakelen
In de door de sjabloon gegenereerde app moet u de gebruikersinterface gebruiken om tweeledige verificatie (2FA) in te schakelen. Als u 2FA wilt inschakelen, klikt u op uw gebruikers-id (e-mailalias) in de navigatiebalk.
Klik op 2FA inschakelen.
Afmelden en vervolgens weer aanmelden. Als u e-mail hebt ingeschakeld (zie mijn vorige zelfstudie), kunt u de sms of e-mail voor 2FA selecteren.
De pagina Code verifiëren wordt weergegeven waar u de code kunt invoeren (via sms of e-mail).
Als u het selectievakje Deze browser onthouden aanvinkt, hoeft u geen 2FA te gebruiken om in te loggen wanneer u de browser en het apparaat gebruikt waarop u het selectievakje hebt aangevinkt. Zolang kwaadwillende gebruikers geen toegang tot uw apparaat kunnen krijgen, 2FA inschakelen en klikken op de Deze browser onthouden u handige wachtwoordtoegang met één stap biedt, terwijl u nog steeds sterke 2FA-beveiliging behoudt voor alle toegang vanaf niet-vertrouwde apparaten. U kunt dit doen op elk privéapparaat dat u regelmatig gebruikt.
Deze zelfstudie biedt een korte inleiding tot het inschakelen van 2FA voor een nieuwe ASP.NET MVC-app. In mijn zelfstudie Tweeledige verificatie met sms en e-mail met ASP.NET Identity in detail wordt beschreven wat de code achter het voorbeeld is.
Aanvullende informatiebronnen
- tweeledige verificatie met behulp van sms en e-mail met ASP.NET Identity Wordt uitgebreid ingegaan op tweeledige verificatie
- Links naar aanbevolen ASP.NET Identity-bronnen
- Accountbevestiging en wachtwoordherstel met ASP.NET Identity Gaat dieper in op wachtwoordherstel en accountbevestiging.
- MVC 5-app met Facebook, Twitter, LinkedIn en Google OAuth2-aanmelding In deze zelfstudie ziet u hoe u een ASP.NET MVC 5-app schrijft met Facebook- en Google OAuth 2-autorisatie. Ook ziet u hoe u aanvullende gegevens toevoegt aan de identiteitsdatabase.
- Een Secure ASP.NET MVC-app implementeren met lidmaatschap, OAuth en SQL Database in Azure Web. In deze zelfstudie wordt Azure-implementatie toegevoegd, hoe u uw app kunt beveiligen met rollen, hoe u de lidmaatschaps-API gebruikt om gebruikers en rollen toe te voegen en aanvullende beveiligingsfuncties.
- Een Google-app voor OAuth 2 maken en de app verbinden met het project
- De app maken in Facebook en de app verbinden met het project
- SSL instellen in project
- C# en ASP.NET MVC-ontwikkelomgeving instellen