使用ASP.NET Identity以手機短信實現雙重驗證


這篇文章將展示怎么使用SMS短信啟動雙重驗證

創建一個ASP.NET 5項目

一開始,使用Visual studio 2015創建一個新的ASP.NET Web應用程序:

image

在下一步中選擇ASP.NET 5 Templates中的Website項目模板,並在右側面板中確認選擇了Individual Authentication:

image

到這里,項目已經創建,這可能需要幾分鍾來加載,注意在Visual studio狀態欄中指示正在下載的一些資源,Visual studio下載了一些它認為需要的文件作為應用程序解決方案的一部分。

運行應用程序

在項目加載結束后,運行這個應用程序,你將看到以下頁面:

image

使用SMS短信進行雙重驗證

本教程使用Twilio,但是你也可以使用其他任何的SMS技術提供商。

  1. 創建Twilio賬號
  2. 從”Account“選項卡,拷貝賬戶的SID和Auth token
  3. 從”Numbers“選項卡頁面中,拷貝你Twilio電話號碼
  4. 確保以上兩項在你的應用程序中可用
  5. 在應用程序中添加Twilio的Nuget包
  6. 在MessageServices中添加代碼來發送SMS短信

image

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>
            @: &nbsp;|&nbsp;
            <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. 為應用程序注冊一個新的用戶:

image

2. 在上部導航欄中,單擊你的用戶名郵件地址:

image

3. 添加電話號碼:

image

4. 此時如果一切正常,你將收到一條來自上文中獲取到的號碼的短信:

QQ圖片20150901205912

5. 在頁面中輸入收到的驗證碼:

image

6. 提交頁面,電話號碼就將顯示在用戶信息頁面中:

image

7. 點擊Enable,開啟雙重驗證:

image

8. 退出,並用這個用戶名和密碼重新登陸,驗證用戶名密碼通過后,將跳轉到一個讓你選擇驗證方式的頁面,如果你有其他雙重驗證方式,例如二維碼或者Email,下拉列表中將會存在對應選項:

image

9. 最后點擊提交,輸入收到的驗證碼,登陸成功:

image

禁用賬戶來防止暴力破解

我們推薦你應用雙重驗證時使用賬戶禁用,一旦用戶執行登錄,每次失敗的嘗試將會被記錄,一旦到達設置的錯誤次數(默認是五次),當前賬戶將會倍禁用5分鍾,以下的配置將在用戶登錄失敗十次后禁用賬戶10分鍾:

services.Configure<IdentityOptions>(options =>
{
    options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(10);
    options.Lockout.MaxFailedAccessAttempts = 10;
});
原文地址: http://docs.asp.net/en/latest/security/2fa.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM