一、什麼是雙重認證 所謂雙重認證簡單來說就是除了用戶名密碼方式外,還額外增加了一道登錄屏障。登錄時先輸入用戶名和密碼,正確後會向郵箱或手機號發送一個驗證碼(取決於您採用何種方式,甚至可以採用銀行的電子KEY啥的),輸入的驗證碼如果正確的話,才可以登錄系統。 二、AbpZero中使用雙重認證特別需要註 ...
一、什麼是雙重認證
所謂雙重認證簡單來說就是除了用戶名密碼方式外,還額外增加了一道登錄屏障。登錄時先輸入用戶名和密碼,正確後會向郵箱或手機號發送一個驗證碼(取決於您採用何種方式,甚至可以採用銀行的電子KEY啥的),輸入的驗證碼如果正確的話,才可以登錄系統。
二、AbpZero中使用雙重認證特別需要註意的地方
1.發送的內容中沒有驗證碼!
AbpZero項目中AbpUserManager類的RegisterTwoFactorProviders方法主要用於指定可用的驗證信息發送提供程式,該方法中定義了發送信息的內容,信息內容從語言包中讀取,可是在語言包中並沒有該項!
所以需要在語言包文件中Localization/XX/XX-zh-CN.xml中添加相應的語言項,需要註意的是語言項中的內容一定要添加占位符!不然發送的內容中是沒有驗證碼的
2.如何使用簡訊發送驗證碼?
1.後臺需要開啟雙重認證,使用手機號驗證這個就不說了
2.需要在項目中定義一個類來實現IIdentityMessageService介面,重寫SendAsync方法來實現信息發送
/// <summary> /// 發送信息驗證碼 /// </summary> public class IdentitySmsMessageService : IIdentityMessageService, ITransientDependency { public ILogger Logger { get; set; } private readonly ISmsSender _iSMSSender; public IdentitySmsMessageService(ISmsSender iSMSSender) { Logger = NullLogger.Instance; _iSMSSender = iSMSSender; } public async Task SendAsync(IdentityMessage message) { /* //TODO: Implement this service to send SMS to users. This is used by UserManager (ASP.NET Identity) on two factor auth. Logger.Warn("Sending SMS is not implemented! Message content:"); Logger.Warn("Destination : " + message.Destination); Logger.Warn("Subject : " + message.Subject); Logger.Warn("Body : " + message.Body); */ var msg = new SmsMessage(); msg.Mobile = message.Destination; msg.Content = message.Body; await _iSMSSender.SendAsync(msg); } }
3.賬號必須要有手機號(PhoneNumber)且手機號是驗證過的(IsPhoneNumberConfirmed),如果當前登錄賬號不滿足這兩個條件,則只能選擇郵箱方式(因為郵箱在註冊時是必須填寫的),這個坑太深真的太深了。
三、驗證碼和激活郵件有效期疑問
abpzero用戶管理這塊是基於identity framework實現的,查了很多資料,都沒有看到驗證碼和激活郵件的過期時間,據說identity framework才會有這功能,不得不吐槽一下,太坑了。。。