核心要點
- 多因素身份驗證 (MFA) 至少需要兩種不同的驗證方式,比傳統的單因素身份驗證安全得多。一種實用的 MFA 方法是要求用戶提供密碼和通過短信或語音呼叫發送到其手機的確認令牌。
- Twilio 提供了基礎設施和 API,開發人員可以使用它們來編寫交互式電話應用程序,包括多因素身份驗證系統。開發人員可以使用 TwiML(Twilio 標記語言)和其 REST API 通過 Twilio 進行撥打和接聽電話以及發送和接收短信。
- 使用 Twilio 實現多因素身份驗證涉及創建 Services_Twilio 類的新實例,通過 account 屬性訪問其 API,並通過 SMS 消息實例資源或 Calls 實例資源的 create() 方法分別發送短信或發起語音呼叫。
- 多因素身份驗證流程包括向用戶顯示啟動流程的登錄表單,驗證其憑據,將其代碼發送到其手機,並在她提交正確的代碼後才授權用戶。此流程可以自定義,並增強諸如重新發送確認代碼的鏈接、如果提供了錯誤的代碼則鎖定帳戶以及身份驗證事件的日誌記錄等功能。
確認用戶身份的方法多種多樣:參考用戶自身的一些方面(例如生物識別技術),詢問用戶知道的內容(例如密碼),或詢問用戶實際擁有的東西(例如 RFID 卡)。傳統的網站實施單因素身份驗證,只需要用戶的密碼。但另一方面,多因素身份驗證至少需要兩種不同的方法進行驗證,並且安全得多。使用生物識別技術來驗證某人對您網站的訪問權限可能還有很長的路要走,還有許多技術障礙和公民自由問題需要克服。一種更實用的多因素身份驗證方法是從其他兩個類別中實現選項,例如要求密碼和通過短信或語音呼叫發送到用戶的確認令牌(用戶知道密碼,並且擁有手機)。這就是您將在本文中學習如何實現的內容。如果您從頭開始進行電話集成,可能會令人沮喪,而且大多數情況下,構建自己的基礎設施並不實用(儘管可以使用商品硬件和 Asterisk 等程序來實現)。幸運的是,Twilio 提供了基礎設施和 API,開發人員可以使用它們輕鬆編寫交互式電話應用程序。我將在本文中使用他們的服務。您可以使用 TwiML(Twilio 標記語言)和其 REST API 通過 Twilio 進行撥打和接聽電話以及發送和接收短信。您可以直接使用 API,也可以使用可用的輔助庫之一。我在這裡將使用的庫是 twilio-php,這是 Twilio 發布並正式支持的庫。那麼,您準備好學習如何實現多因素身份驗證了嗎?繼續閱讀!
使用 PHP 連接 Twilio
連接到 Twilio 服務就像包含 twilio-php 庫和創建 Services_Twilio 類的新實例一樣簡單。該對象的構造函數接受您帳戶的 SID 和身份驗證令牌,這些令牌在您註冊其服務後列在您的 Twilio 帳戶的儀表板頁面上。有了可用的 Services_Twilio 實例,您可以通過 account 屬性訪問其 API。 account 公開了 Services_Twilio_Rest_Account 的一個實例,該實例代表您的 Twilio 帳戶。我這裡只使用一個帳戶,但可以擁有多個子帳戶。這對於根據您的需求細分您的交互可能很有用。您可以閱讀 Twilio 文檔來了解更多關於子帳戶的信息。
<?php require "Services/Twilio.php"; define("TWILIO_SID", "…"); define("TWILIO_AUTH_TOKEN", "…"); $twilio = new Services_Twilio(TWILIO_SID, TWILIO_AUTH_TOKEN); $acct = $twilio->account;
account 實例公開了其他幾個屬性,其中包括 calls 和 sms_messages。這些是諸如 Services_Twilio_Rest_Calls 和 Services_Twilio_Rest_SmsMessages 之類的對象的實例,它們封裝了分別用於發出您的呼叫和消息的 REST 資源。但是,您很少在 create() 方法之外使用這些對象,並且文檔將公開它們的屬性稱為“實例資源”。我將做同樣的事情以幫助避免任何混淆。
發送短信
發送短信是通過 SMS 消息實例資源 ($acct->sms_messages) 的 create() 方法完成的。該方法接受三個參數:您帳戶的Twilio 號碼(類似於電子郵件的“發件人地址”)、收件人的號碼(“收件人地址”)以及您的消息文本(最多可達160 個字符)。
<?php $code = "1234"; // some random auth code $msg = $acct->sms_messages->create( "+19585550199", // "from" number "+19588675309", // "to" number "Your access code is " . $code );
在幕後,twilio-php 庫代表您向 Twilio API 發出一些 TwiML 的 POST 請求。 Services_Twilio_Rest_SmsMessage 的一個實例由調用返回,該實例封裝了有關消息的信息。您可以在文檔中查看提供哪些信息的完整列表,但可能更重要的值是由 status 和 price 屬性公開的。 status 顯示短信的狀態(排隊、發送中、已發送或失敗),而 price 顯示為您的帳戶收取的消息金額。
發送語音呼叫
發起語音呼叫是通過 Calls 實例資源 ($acct->calls) 的 create() 方法完成的。與發送短信一樣,您需要提供您的帳戶號碼、收件人的號碼和消息。但是,在這種情況下,消息是描述呼叫性質的 TwiML 文檔的 URL。
<?php // Note spaces between each letter in auth code. This forces // the speech synthesizer to enunciate each digit. $code = "1 2 3 4"; $msg = $acct->calls->create( "+19585550199", // "from" number "+19588675309", // "to" number "http://example.com/voiceCall.php?code=" . urlencode($code) );
庫再次代表您發出 POST 請求,並進行語音呼叫。當被叫者接聽電話時,Twilio 的流程將檢索並執行回調 URL 的 XML 中提供的命令。在上面啟動語音呼叫的示例中,我已經將確認代碼作為 GET 參數傳遞到回調腳本的 URL 中。當 Twilio 檢索 URL 時,PHP 將在呈現響應時使用該參數。構建呼叫流程只需要少量 TwiML 標籤,但您可以使用它們來定義相當複雜的流程(例如電話樹菜單等)。但是,此類場景的基本呼叫流程可以由 PHP 生成,如下所示:
<?php require "Services/Twilio.php"; define("TWILIO_SID", "…"); define("TWILIO_AUTH_TOKEN", "…"); $twilio = new Services_Twilio(TWILIO_SID, TWILIO_AUTH_TOKEN); $acct = $twilio->account;
這裡使用的 TwiML 標籤是 Response(根元素)、Say(提供 Twilio 將說的文本)和 Gather(收集用戶的輸入)。在說出 Say 子元素指示的文本時,由於 Gather,Twilio 還將偵聽用戶輸入,並在之後暫停五秒鐘,以便用戶輸入其響應。如果 Gather 在沒有輸入的情況下超時,它將退出並執行後續的 Say 文本並終止呼叫。否則,輸入將通過 POST 發送回 action URL 以進行進一步處理。 Gather 的 Twilio 文檔非常擅長解釋行為以及您可以用來修改行為的元素屬性,甚至列出了幾個示例。我建議您快速閱讀一下。在繼續之前,還有一件事需要注意;我已經在啟動腳本中的 auth 代碼中每個數字之間添加了空格。這會強制語音合成器逐個發音,說“one two three four”而不是“one thousand two hundred thirty four”。對於語音合成,有時我們在文本中看到的並不總是我們得到的。如果它能為您的被叫者帶來更好的清晰度和理解,那麼修改或拼錯語音對話是可以的。
實現多因素身份驗證
既然您已經了解了與 Twilio 進行 SMS 和語音交互的基本工作流程,那麼現在該看看它如何適應登錄流程了。您在這裡看到的內容非常簡單明了,為了清晰起見,我已經減少了附帶代碼,因為您自己的登錄流程的細節必然會有所不同。應該向用戶顯示一個啟動流程的登錄表單。表單提交會導致您驗證其憑據並拒絕無效的憑據,但有效的憑據不應立即將用戶身份驗證到您的應用程序。相反,將用戶視為“部分已驗證”,這是一種狀態,允許她查看請求已發送到其手機的代碼的第二個表單。只有在她提交正確的代碼後,才應授權用戶。
<?php $code = "1234"; // some random auth code $msg = $acct->sms_messages->create( "+19585550199", // "from" number "+19588675309", // "to" number "Your access code is " . $code );
上面的代碼僅用於說明。在您的實際應用程序中,您可能需要考慮添加以下內容:
- 添加一個鏈接以將確認代碼重新發送到用戶的手機。
- 如果用戶決定不繼續該流程,請在代碼請求表單上添加一個取消鏈接。關於上面的代碼,這樣的鏈接需要取消設置
$_SESSION["username"]
,因為該值除了存儲用戶名外,還充當$_SESSION["isAuthenticated"]
的“部分身份驗證”標誌。 - 如果提供了錯誤的代碼,請添加節流或帳戶鎖定。
- 根據您的偏執程度或您面臨的合規性要求,將身份驗證事件記錄在某個位置。 (需要多因素身份驗證的應用程序通常足夠敏感,需要審計跟踪!)
此外,您可能需要考慮為您的目的創建足夠複雜的身份驗證代碼。 4 位數字代碼非常常見,但您並不局限於此。如果您選擇使用字母或字母數字值的混合,我建議避免容易混淆的值(例如數字 0 與字母 O,數字 1 與字母 I 等)。
總結
經濟實惠的移動設備和IP 電話的普及增加了與用戶交互的其他渠道,在本文中,您學習了一種通過使用“云通信”服務Twilio 實現多因素身份驗證來利用這些渠道的方法。我希望您發現本文有助於理解多因素身份驗證和 Twilio。請隨時在下面發表評論,分享您如何在自己的應用程序中使用 Twilio 或實現多因素身份驗證。我很想听聽您的想法!
(圖片來自 Fotolia)
關於使用 PHP 和 Twilio 進行多因素身份驗證的常見問題解答 (FAQ)
- 使用 PHP 和 Twilio 進行多因素身份驗證有多安全?
使用 PHP 和 Twilio 進行多因素身份驗證 (MFA) 非常安全。它通過要求用戶在訪問其帳戶之前提供至少兩種身份驗證方式來增加額外的安全層。第一種形式通常是密碼,第二種形式可以是通過短信發送到用戶手機的代碼。即使他們擁有密碼,這也使得未經授權的用戶更難以訪問帳戶。
- 我可以自定義身份驗證流程嗎?
是的,您可以自定義身份驗證流程以滿足您的需求。 Twilio 的 API 非常靈活,允許您根據您的特定要求調整身份驗證流程。您可以選擇第二因素的類型(例如短信、語音呼叫或電子郵件)、消息內容等等。
- Twilio 發送身份驗證代碼的可靠性如何?
Twilio 是一個可靠的發送身份驗證代碼的平台。它擁有強大的基礎設施並提供高交付率。它還提供實時交付報告,因此您可以跟踪消息的狀態。
- 如果用戶丟失了手機怎麼辦?
如果用戶丟失了手機,他們仍然可以使用備用代碼訪問其帳戶。這些代碼是在設置 MFA 時生成的,應保存在安全的地方。用戶可以輸入這些代碼而不是發送到其手機的代碼。
- 我可以將 MFA 與 PHP 和 Twilio 一起用於大型應用程序嗎?
是的,您可以將 MFA 與 PHP 和 Twilio 一起用於大型應用程序。 Twilio 的基礎設施旨在處理大量消息,使其適用於擁有大量用戶的應用程序。
- 如何測試 MFA 實現?
您可以通過創建一個測試帳戶並完成身份驗證流程來測試 MFA 實現。 Twilio 還提供了一個沙盒環境,您可以在其中測試代碼而無需發送實際消息。
- 是否可以在不進行編碼的情況下實現 MFA?
雖然可以使用某些 MFA 解決方案進行不編碼,但使用 PHP 和 Twilio 實現 MFA 需要一些編碼知識。但是,該過程很簡單,並且有很多資源可以幫助您。
- 使用 Twilio 進行 MFA 的費用是多少?
使用 Twilio 進行 MFA 的費用取決於您發送的消息數量。 Twilio 按消息收費,因此您發送的消息越多,費用越高。但是,Twilio 提供具有競爭力的價格和批量折扣。
- 我可以將 MFA 與 PHP 和 Twilio 一起用於非 Web 應用程序嗎?
是的,您可以將 MFA 與 PHP 和 Twilio 一起用於非 Web 應用程序。您可以在任何可以發送 HTTP 請求並處理 HTTP 響應的應用程序中實現 MFA。
- Twilio 還提供哪些其他服務?
除了 MFA 之外,Twilio 還提供一系列通信服務,包括語音、視頻、聊天和電子郵件。這些服務可用於構建各種應用程序,從客戶服務系統到營銷自動化工具。
以上是PHP主|具有PHP和Twilio的多因素身份驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP在現代Web開發中仍然重要,尤其在內容管理和電子商務平台。 1)PHP擁有豐富的生態系統和強大框架支持,如Laravel和Symfony。 2)性能優化可通過OPcache和Nginx實現。 3)PHP8.0引入JIT編譯器,提升性能。 4)雲原生應用通過Docker和Kubernetes部署,提高靈活性和可擴展性。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具