Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här självstudien visar hur du skapar en ASP.NET MVC 5-webbapp med Two-Factor-autentisering. Du bör slutföra Skapa en säker ASP.NET MVC 5-webbapp med inloggning, e-postbekräftelse och lösenordsåterställning innan du fortsätter. Du kan ladda ned det färdiga programmet här. Nedladdningen innehåller felsökningshjälpare som gör att du kan testa e-postbekräftelse och SMS utan att konfigurera en e-post- eller SMS-provider.
Den här handledningen skrevs av Rick Anderson ( Twitter: @RickAndMSFT ).
- Skapa en ASP.NET MVC-app
- Konfigurera SMS för tvåfaktorautentisering
- Aktivera tvåfaktorautentisering
- ytterligare resurser
Skapa en ASP.NET MVC-app
Börja med att installera och köra Visual Studio Express 2013 för Web eller senare.
Obs
Varning! Du bör slutföra Skapa en säker ASP.NET MVC 5-webbapp med inloggning, e-postbekräftelse och lösenordsåterställning innan du fortsätter. Du måste installera Visual Studio 2013 Update 3 eller senare för att kunna slutföra den här handledningen.
- Skapa ett nytt ASP.NET webbprojekt och välj MVC-mallen. Webbformulär stöder också ASP.NET identitet, så du kan följa liknande steg i en webbformulärapp.
- Låt standardautentiseringen vara enskilda användarkonton. Om du vill vara värd för appen i Azure lämnar du kryssrutan markerad. Senare i självstudien kommer vi att distribuera till Azure. Du kan öppna ett Azure-konto kostnadsfritt.
- Ange att -projektet ska använda SSL-.
Konfigurera SMS för tvåfaktorautentisering
Den här självstudien innehåller instruktioner för att använda antingen Twilio eller ASPSMS, men du kan använda vilken annan SMS-leverantör som helst.
Skapa ett användarkonto med en SMS-provider
Installera ytterligare paket eller lägga till tjänstreferenser
Twilio:
I Package Manager-konsolen anger du följande kommando:
Install-Package Twilio
ASPSMS:
Följande tjänstreferens måste läggas till:Adress:
https://webservice.aspsms.com/aspsmsx2.asmx?WSDL
Namespace:
ASPSMSX2
Räkna ut autentiseringsuppgifter för SMS-providern
Vi rekommenderar att du använder det säkraste autentiseringsalternativet. Information om .NET-appar som distribuerats till Azure finns i:
Azure Key Vault och .NET Aspire är det säkraste sättet att lagra och hämta hemligheter. Azure Key Vault är en molntjänst som skyddar krypteringsnycklar och hemligheter som certifikat, anslutningssträngar och lösenord. Information om .NET Aspire finns i Säker kommunikation mellan värd- och klientintegreringar.
Undvik resursägarens lösenordsreferensbeviljande eftersom det:
- Exponerar användarens lösenord för klienten.
- Är en betydande säkerhetsrisk.
- Bör endast användas när andra autentiseringsflöden inte är möjliga.
När appen distribueras till en testserver kan en miljövariabel användas för att ange anslutningssträngen till en testdatabasserver. Miljövariabler lagras vanligtvis i oformaterad, okrypterad text. Om datorn eller processen komprometteras kan miljövariabler nås av ej betrodda parter. Vi rekommenderar att du inte använder miljövariabler för att lagra en produktionsanslutningssträng eftersom det inte är den säkraste metoden.
Riktlinjer för konfigurationsdata:
- Lagra aldrig lösenord eller andra känsliga data i konfigurationsproviderns kod eller i konfigurationsfiler för oformaterad text.
- Använd inte produktionshemligheter i utvecklings- eller testmiljöer.
- Ange hemligheter utanför projektet så att de inte av misstag kan checkas in på en källkodslagringsplats.
Twilio:
På fliken Instrumentpanel för ditt Twilio-konto kopierar du Kontos ID och Autentiseringstoken.
ASPSMS:
Från kontoinställningarna går du till Userkey- och kopierar den tillsammans med din egendefinierade Lösenord.
Vi lagrar senare dessa värden i filen web.config i nycklarna "SMSAccountIdentification"
och "SMSAccountPassword"
.
4. Ange SenderID/Originator
Twilio:
På fliken Nummer kopierar du ditt Twilio-telefonnummer.
ASPSMS:
I Unlock Originators-menyn låser du upp en eller flera originatorer eller väljer en alfanumerisk originator (stöds inte av alla nätverk).
Vi kommer senare att lagra det här värdet i filen web.config i nyckeln "SMSAccountFrom"
.
5. Överföra autentiseringsuppgifter för SMS-providern till app
Gör autentiseringsuppgifterna och avsändartelefonnumret tillgängliga för appen. För att hålla det enkelt lagrar vi dessa värden i filen web.config. När vi distribuerar till Azure kan vi lagra värdena på ett säkert sätt i avsnittet appinställningar på fliken Konfigurera webbplats.
[!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).
Implementering av dataöverföring till SMS-provider
Konfigurera klassen
SmsService
i filen App_Start\IdentityConfig.cs.Beroende på vilken SMS-provider som används aktiverar du antingen Twilio- eller avsnittet 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 } }
Uppdatera Views\Manage\Index.cshtml Razor-vyn: (obs! ta inte bara bort kommentarerna i slutkoden, använd koden nedan.)
@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>
Kontrollera att
EnableTwoFactorAuthentication
- ochDisableTwoFactorAuthentication
-åtgärdsmetoderna iManageController
har attributet[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"); }
Kör appen och logga in med det konto som du registrerade tidigare.
Klicka på ditt användar-ID, som aktiverar
Index
-åtgärdsmetoden iManage
styrenhet.
Klicka på Lägg till.
AddPhoneNumber
-åtgärdsmetoden visar en dialogruta för att ange ett telefonnummer som kan ta emot SMS.// GET: /Account/AddPhoneNumber public ActionResult AddPhoneNumber() { return View(); }
Om några sekunder får du ett sms med verifieringskoden. Ange den och tryck på Skicka.
Vyn Hantera visar att ditt telefonnummer har lagts till.
Aktivera tvåfaktorsautentisering
I den mallgenererade appen måste du använda användargränssnittet för att aktivera tvåfaktorautentisering (2FA). Om du vill aktivera 2FA klickar du på ditt användar-ID (e-postalias) i navigeringsfältet.
Klicka på aktivera 2FA.
sv-SE:
Logga ut och logga sedan in igen. Om du har aktiverat e-post (se min föregående självstudie) kan du välja SMS eller e-post för 2FA.
Sidan Verifiera kod visas där du kan ange koden (från SMS eller e-post).
Om du klickar på kryssrutan Kom ihåg den här webbläsaren undantas du från att behöva använda 2FA för att logga in när du använder webbläsaren och enheten där du har markerat kryssrutan. Så länge skadliga användare inte kan få åtkomst till din enhet, kommer aktivering av 2FA och att klicka på Kom ihåg den här webbläsaren att ge dig ett praktiskt sätt att snabbåtkomst till lösenord, samtidigt som du behåller ett starkt 2FA-skydd för all åtkomst från icke-betrodda enheter. Du kan göra detta på alla privata enheter som du använder regelbundet.
Den här guiden ger en snabb introduktion till hur man aktiverar 2FA i en ny ASP.NET MVC-app. Min självstudiekurs tvåfaktorautentisering med hjälp av SMS och e-post med ASP.NET Identity behandlar i detalj koden bakom exemplet.
Ytterligare resurser
- tvåfaktorautentisering med SMS och e-post med ASP.NET Identity Går in i detalj på tvåfaktorautentisering
- Länkar till ASP.NET Identity rekommenderade resurser
- Kontobekräftelse och Lösenordsåterställning med ASP.NET Identity Går in mer i detalj på lösenordsåterställning och kontobekräftelse.
- MVC 5-app med Facebook, Twitter, LinkedIn och Google OAuth2-inloggning Den här handledningen visar hur du skriver en ASP.NET MVC 5-app med Facebook- och Google OAuth 2-auktorisering. Den visar också hur du lägger till ytterligare data i identitetsdatabasen.
- Distribuera en säker ASP.NET MVC-app med Medlemskap, OAuth och SQL Database till Azure Web. Den här självstudien lägger till Azure-distribution, hur du skyddar din app med roller, hur du använder medlemskaps-API:et för att lägga till användare och roller samt ytterligare säkerhetsfunktioner.
- Skapa en Google-app för OAuth 2 och ansluta appen till projektet
- Skapa appen på Facebook och ansluta appen till projektet
- Konfigurera SSL i Project
- Så här konfigurerar du utvecklingsmiljön för C# och ASP.NET MVC