這篇文章將展示怎么使用SMS短信啟動雙重驗證
創建一個ASP.NET 5項目
一開始,使用Visual studio 2015創建一個新的ASP.NET Web應用程序:
在下一步中選擇ASP.NET 5 Templates中的Website項目模板,並在右側面板中確認選擇了Individual Authentication:
到這里,項目已經創建,這可能需要幾分鍾來加載,注意在Visual studio狀態欄中指示正在下載的一些資源,Visual studio下載了一些它認為需要的文件作為應用程序解決方案的一部分。
運行應用程序
在項目加載結束后,運行這個應用程序,你將看到以下頁面:
使用SMS短信進行雙重驗證
本教程使用Twilio,但是你也可以使用其他任何的SMS技術提供商。
- 創建Twilio賬號
- 從”Account“選項卡,拷貝賬戶的SID和Auth token
- 從”Numbers“選項卡頁面中,拷貝你Twilio電話號碼
- 確保以上兩項在你的應用程序中可用
- 在應用程序中添加Twilio的Nuget包
- 在MessageServices中添加代碼來發送SMS短信
public static Task SendSmsAsync(string number, string message) { // Plug in your SMS service here to send a text message. var twilio = new TwilioRestClient("YourTwilioSid", "YourTwilioToken"); var result = twilio.SendMessage("YourTwilioPhoneNumber", number, message); return Task.FromResult(0); }
注意:在dnxcore50中Twilio不可用,因為twilio不包含這個版本的nuget包,如果你需要在這個版本中使用,可以使用Twilio的REST API
注意:不要直接把賬戶信息寫到代碼里,上文中這樣做知識盡量保持代碼簡潔,實際操作中,你需要使用Secret Manager處理這些機密信息
開啟雙重驗證
應用程序已經包含了可以雙重驗證的代碼,下文中步驟展示如何打開它:、
1. 打開在Views/Manage目錄下的Index.cshtml模板
2.取消注釋的代碼以讓用戶可以輸入自己的電話號碼:
<dt>Phone Number:</dt> <dd> @(Model.PhoneNumber ?? "None") [ @if (Model.PhoneNumber != null) { <a asp-controller="Manage" asp-action="AddPhoneNumber">Change</a> @: | <a asp-controller="Manage" asp-action="RemovePhoneNumber">Remove</a> } else { <a asp-controller="Manage" asp-action="AddPhoneNumber">Add</a> } ] </dd>
3. 取消注釋下列代碼,讓用戶可以打開或者關閉雙重驗證:
<dt>Two-Factor Authentication:</dt> <dd> @if (Model.TwoFactor) { <form asp-controller="Manage" asp-action="DisableTwoFactorAuthentication" method="post" class="form-horizontal" role="form"> <text> Enabled <input type="submit" value="Disable" class="btn btn-link" /> </text> </form> } else { <form asp-controller="Manage" asp-action="EnableTwoFactorAuthentication" method="post" class="form-horizontal" role="form"> <text> Disabled <input type="submit" value="Enable" class="btn btn-link" /> </text> </form> } </dd>
使用雙重驗證登陸應用程序
運行應用程序,來展示雙重驗證:
1. 為應用程序注冊一個新的用戶:
2. 在上部導航欄中,單擊你的用戶名郵件地址:
3. 添加電話號碼:
4. 此時如果一切正常,你將收到一條來自上文中獲取到的號碼的短信:
5. 在頁面中輸入收到的驗證碼:
6. 提交頁面,電話號碼就將顯示在用戶信息頁面中:
7. 點擊Enable,開啟雙重驗證:
8. 退出,並用這個用戶名和密碼重新登陸,驗證用戶名密碼通過后,將跳轉到一個讓你選擇驗證方式的頁面,如果你有其他雙重驗證方式,例如二維碼或者Email,下拉列表中將會存在對應選項:
9. 最后點擊提交,輸入收到的驗證碼,登陸成功:
禁用賬戶來防止暴力破解
我們推薦你應用雙重驗證時使用賬戶禁用,一旦用戶執行登錄,每次失敗的嘗試將會被記錄,一旦到達設置的錯誤次數(默認是五次),當前賬戶將會倍禁用5分鍾,以下的配置將在用戶登錄失敗十次后禁用賬戶10分鍾:
services.Configure<IdentityOptions>(options => { options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(10); options.Lockout.MaxFailedAccessAttempts = 10; });