Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
készítette: Rick Anderson
Ez az oktatóanyag bemutatja, hogyan hozhat létre ASP.NET MVC 5-webalkalmazást Two-Factor-hitelesítéssel. A folytatás előtt be kell fejeznie Biztonságos ASP.NET MVC 5 webalkalmazás létrehozása bejelentkezéssel, e-mail-megerősítéssel és jelszó-visszaállítással. A befejezett alkalmazás itt töltheti le. A letöltés hibakeresési segédeket tartalmaz, amelyek lehetővé teszik az e-mailek megerősítésének és az SMS-nek az e-mail vagy SMS-szolgáltató beállítása nélküli tesztelését.
Ez az oktatóanyag írta Rick Anderson ( Twitter: @RickAndMSFT ).
- ASP.NET MVC-alkalmazás létrehozása
- SMS beállítása kéttényezős hitelesítéshez
- Kéttényezős hitelesítés engedélyezése
- További erőforrások
ASP.NET MVC-alkalmazás létrehozása
Első lépésként telepítse és futtassa a Visual Studio Express 2013 for Web vagy újabb verzióját.
Jegyzet
Figyelmeztetés: A folytatás előtt be kell fejeznie Biztonságos ASP.NET MVC 5 webalkalmazás létrehozása bejelentkezéssel, e-mail-megerősítéssel és jelszó-visszaállítással. Az oktatóanyag elvégzéséhez telepítenie kell Visual Studio 2013 3. frissítésének vagy újabb verzióját.
- Hozzon létre egy új ASP.NET webes projektet, és válassza ki az MVC-sablont. A Web Forms támogatja az ASP.NET Identitást is, így egy webűrlapalkalmazás hasonló lépéseit követheti.
- Hagyja meg alapértelmezett hitelesítésként az egyéni felhasználói fiókokkal történő hitelesítést . Ha az alkalmazást az Azure-ban szeretné üzemeltetni, hagyja bejelölve a jelölőnégyzetet. Az oktatóanyag későbbi részében üzembe helyezünk az Azure-ban. Ingyenes
nyithat Meg egy Azure-fiókot. - Állítsa be a projektet SSL-használatára.
SMS beállítása kéttényezős hitelesítéshez
Ez az oktatóanyag útmutatást nyújt a Twilio vagy az ASPSMS használatához, de bármely más SMS-szolgáltatót használhat.
Felhasználói fiók létrehozása SMS-szolgáltatóval
További csomagok telepítése vagy szolgáltatáshivatkozások hozzáadása
Twilio:
A Package Manager konzolon adja meg a következő parancsot:
Install-Package TwilioASPSMS:
A következő szolgáltatáshivatkozást kell hozzáadni:
Cím:
https://webservice.aspsms.com/aspsmsx2.asmx?WSDLNamespace:
ASPSMSX2Az SMS-szolgáltató felhasználói hitelesítő adatainak kiderítése
Javasoljuk, hogy a legbiztonságosabb hitelesítési lehetőséget használja. Az Azure-ban üzembe helyezett .NET-alkalmazásokért lásd:
Az Azure Key Vault és .NET Aspire biztosítják a titkos kódok tárolásának és lekérésének legbiztonságosabb módját. Az Azure Key Vault egy felhőalapú szolgáltatás, amely védi a titkosítási kulcsokat és titkos kulcsokat, például a tanúsítványokat, a kapcsolati sztringeket és a jelszavakat. A .NET Aspire-ről a Az üzemeltetés és az ügyfélintegrációk közötti biztonságos kommunikációcímű témakörben olvashat.
Kerülje az erőforrás-tulajdonos jelszó hitelesítő adatainak megadását, mert:
- Elérhetővé teszi a felhasználó jelszavát az ügyfél számára.
- Jelentős biztonsági kockázat.
- Csak akkor használható, ha más hitelesítési folyamatok nem lehetségesek.
Amikor az alkalmazást egy tesztkiszolgálón helyezik üzembe, egy környezeti változóval a kapcsolati sztringet egy tesztadatbázis-kiszolgálóra állíthatja be. A környezeti változók általában egyszerű, titkosítatlan szövegben vannak tárolva. Ha a gép vagy a folyamat sérült, a környezeti változókat nem megbízható felek érhetik el. Nem javasoljuk, hogy környezeti változók használatával tároljon éles kapcsolati láncot, mivel nem ez a legbiztonságosabb módszer.
Konfigurációs adatokra vonatkozó irányelvek:
- Soha ne tároljon jelszavakat vagy más bizalmas adatokat konfigurációszolgáltatói kódban vagy egyszerű szöveges konfigurációs fájlokban.
- Ne használj üzemi titkokat fejlesztési vagy tesztelési környezetekben.
- Adja meg a projekten kívüli érzékeny adatokat, hogy ezek véletlenül ne kerüljenek feltöltve egy forráskód-tárházba.
Twilio:
A Twilio-fiók Irányítópult lapján másolja ki a fiók SID- és hitelesítési jogkivonatát.
ASPSMS:
A fiókbeállítások között keresse meg a Userkey-et, és másolja azt együtt a saját maga által meghatározott Jelszó-mal.
Később ezeket az értékeket a és "SMSAccountIdentification" kulcsokhoz a "SMSAccountPassword" fájlban tároljuk.
4. Küldő azonosítója/származtatója megadása
Twilio:
A Számok lapon másolja ki a Twilio-telefonszámot.
ASPSMS:
A Kezdeményezők zárolásának feloldása menüben oldja fel egy vagy több kezdeményező zárolását, vagy válasszon alfanumerikus kezdeményezőt (az összes hálózat nem támogatja).
Ezt az értéket később a web.config fájlban tároljuk a kulcs "SMSAccountFrom" .
5. SMS-szolgáltató hitelesítő adatainak átvitele az alkalmazásba
A hitelesítő adatok és a feladó telefonszámának elérhetővé tétele az alkalmazás számára. Az egyszerűség érdekében ezeket az értékeket a web.config fájlban tároljuk. Az Azure-ban való üzembe helyezéskor az értékeket biztonságosan tárolhatjuk a webhely konfigurálás lapjának alkalmazásbeállítások szakaszában.
[!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).
SMS-szolgáltatónak történő adatátvitel megvalósítása
Konfigurálja a
SmsServiceosztályt a App_Start\IdentityConfig.cs fájlban.A használt SMS-szolgáltatótól függően aktiválja a Twilio vagy a ASPSMS szakaszt:
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 } }Frissítse a Views\Manage\Index.cshtml Razor nézetet: (megjegyzés: ne csak távolítsa el a megjegyzéseket a kilépési kódban, használja az alábbi kódot.)
@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>Ellenőrizze, hogy a
EnableTwoFactorAuthenticationDisableTwoFactorAuthenticationésManageControllerműveleti metódusa rendelkezik-e az[ValidateAntiForgeryToken] attribútummal:// // 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"); }Futtassa az alkalmazást, és jelentkezzen be a korábban regisztrált fiókkal.
Kattintson a felhasználói azonosítójára, amely aktiválja a
IndexműveletmetódustManagevezérlőben.
Kattintson a Hozzáadás gombra.
A
AddPhoneNumberműveletmetódus egy párbeszédpanelt jelenít meg, amely megadja az SMS-üzenetek fogadására képes telefonszámot.// GET: /Account/AddPhoneNumber public ActionResult AddPhoneNumber() { return View(); }
Néhány másodperc múlva megjelenik egy szöveges üzenet az ellenőrző kóddal. Adja meg, majd nyomja meg a Küldésgombot.
A Manage (Kezelés) nézet azt mutatja, hogy a telefonszám hozzáadva lett.
Kéttényezős hitelesítés engedélyezése
A sablon által létrehozott alkalmazásban a felhasználói felületen engedélyeznie kell a kéttényezős hitelesítést (2FA). A 2FA engedélyezéséhez kattintson a felhasználói azonosítójára (e-mail aliasára) a navigációs sávon.
Kattintson a 2FA engedélyezésére.
Jelentkezzen ki, majd jelentkezzen be újra. Ha engedélyezte az e-maileket (lásd a korábbi oktatóanyagot), kiválaszthatja a 2FA-hoz tartozó SMS-t vagy e-mailt.
Megjelenik a Kód ellenőrzése lap, ahol beírhatja a kódot (SMS-ből vagy e-mailből).
A Ne feledje ezt a böngészőt jelölőnégyzetre kattintva mentesül a 2FA használata alól a bejelentkezéshez azon a böngészőn és eszközön, ahol bejelölte ezt a négyzetet. Mindaddig, amíg a rosszindulatú felhasználók nem férnek hozzá az eszközéhez, a 2FA engedélyezése és a Ne feledje ezt a böngészőt opció választása kényelmes egylépéses jelszóhasználatot tesz lehetővé, miközben megőrzi az erős 2FA-védelmet az összes nem megbízható eszközről történő hozzáféréshez. Ezt bármely rendszeresen használt magáneszközön megteheti.
Ez az oktatóanyag gyors bevezetést nyújt a 2FA engedélyezéséhez egy új ASP.NET MVC-alkalmazáson. Az oktatóanyagom kéttényezős hitelesítést SMS és e-mail segítségével az ASP.NET Identity keretrendszerrel részletesen bemutatja, és a minta mögötti kódot is alaposan elemzi.
További erőforrások
- Kéttényezős hitelesítés SMS-ben és e-mailben ASP.NET Identitás Részletesen ismerteti a kéttényezős hitelesítést
- ASP.NET Identity ajánlott erőforrásokra mutató hivatkozások
- Fiók megerősítése és jelszó-helyreállítás az ASP.NET Identity-vel Részletesebben ismerteti a jelszó-helyreállítást és a fiók megerősítését.
- MVC 5 alkalmazás Facebook, Twitter, LinkedIn és Google OAuth2 bejelentkezéssel Ez az oktatóanyag bemutatja, hogyan írhat ASP.NET MVC 5 alkalmazást Facebook és Google OAuth 2 hitelesítéssel. Azt is bemutatja, hogyan adhat hozzá további adatokat az identitásadatbázishoz.
- Biztonságos ASP.NET MVC-alkalmazás üzembe helyezése az Azure Web számára Tagsági rendszerrel, OAuth-tal és SQL-Database adatbázissal. Ez az oktatóanyag hozzáadja az Azure üzembe helyezését, az alkalmazás szerepkörökkel való védelmét, a tagsági API használatát a felhasználók és szerepkörök hozzáadásához, valamint további biztonsági funkciókat.
- Google-alkalmazás létrehozása az OAuth 2-hez és az alkalmazás csatlakoztatása a projekthez
- Az alkalmazás létrehozása a Facebookon és az alkalmazás csatlakoztatása a projekthez
- SSL beállítása a projektben
- C# és ASP.NET MVC fejlesztési környezet beállítása