1. 程式人生 > 其它 >使用ASP.NET Identity以手機簡訊實現雙重驗證建立一個ASP.NET 5專案執行應用程式使用SMS簡訊進行雙重驗證開啟雙重驗證使用雙重驗證登陸應用程式禁用賬戶來防止暴力破解

使用ASP.NET Identity以手機簡訊實現雙重驗證建立一個ASP.NET 5專案執行應用程式使用SMS簡訊進行雙重驗證開啟雙重驗證使用雙重驗證登陸應用程式禁用賬戶來防止暴力破解

這篇文章將展示怎麼使用SMS簡訊啟動雙重驗證

建立一個ASP.NET 5專案

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

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

到這裡,專案已經建立,這可能需要幾分鐘來載入,注意在Visual studio狀態列中指示正在下載的一些資源,Visual studio下載了一些它認為需要的檔案作為應用程式解決方案的一部分。

執行應用程式

在專案載入結束後,執行這個應用程式,你將看到以下頁面:

使用SMS簡訊進行雙重驗證

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

  1. 建立Twilio賬號
  2. 從”Account“選項卡,拷貝賬戶的SID和Auth token
  3. 從”Numbers“選項卡頁面中,拷貝你Twilio電話號碼
  4. 確保以上兩項在你的應用程式中可用
  5. 在應用程式中新增Twilio的Nuget包
  6. 在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>
            @: &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. 為應用程式註冊一個新的使用者:

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;
});

原文地址:http://docs.asp.net/en/latest/security/2fa.html