版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目錄 HYPERLINK /fc/editor/fckeditor.html?InstanceName=spBlogText&v=3.3&Toolbar=Default&v=3.1.html l S1 一次性密碼 HYPERLINK /fc/editor/fckeditor.html?InstanceName=spBlogText&v=3.3&Toolbar=Default&v=3.1.html l S2 完整的 OTP 解決方案 HYPERLINK /fc/editor/fckeditor.html?InstanceName=spBlogText&v=3.3&Toolbar=Default&
2、v=3.1.html l S3 測(cè)試 OTP 生成器客戶端 HYPERLINK /fc/editor/fckeditor.html?InstanceName=spBlogText&v=3.3&Toolbar=Default&v=3.1.html l S4 示例網(wǎng)站 HYPERLINK /fc/editor/fckeditor.html?InstanceName=spBlogText&v=3.3&Toolbar=Default&v=3.1.html l S5 身份驗(yàn)證 Web 服務(wù) HYPERLINK /fc/editor/fckeditor.html?InstanceName=spBlogTe
3、xt&v=3.3&Toolbar=Default&v=3.1.html l S6 完整的體系結(jié)構(gòu) HYPERLINK /fc/editor/fckeditor.html?InstanceName=spBlogText&v=3.3&Toolbar=Default&v=3.1.html l S7 運(yùn)行代碼示例 HYPERLINK /fc/editor/fckeditor.html?InstanceName=spBlogText&v=3.3&Toolbar=Default&v=3.1.html l S8 部署注意事項(xiàng) HYPERLINK /fc/editor/fckeditor.html?Insta
4、nceName=spBlogText&v=3.3&Toolbar=Default&v=3.1.html l S9 嘗試一下密碼的安全和管理是令企業(yè) IT 管理員 非常頭疼的一個(gè)問題。用戶往往創(chuàng)建非常簡(jiǎn)單的密碼,或?qū)⑵涿艽a寫下來以確保他們能夠記住這些密碼。此外,幾乎沒有安全有效的程序來重置密碼。既然存在這些限制,如何才能在遠(yuǎn)程用戶訪問您的網(wǎng)絡(luò)時(shí)減少此類安全問題呢?由于許多用戶都會(huì)寫下他們的密碼,如何才能使公司的密碼解決方案更加可靠呢?我將介紹如何使用基于標(biāo)準(zhǔn)的技術(shù)以及 C# 和 C 來開發(fā)一次性密碼 (OTP) 概念驗(yàn)證。但是,我想先大致介紹一下密碼替代技術(shù)。有多種方法可用于消除遠(yuǎn)程用戶的標(biāo)準(zhǔn)密
5、碼??墒褂米C書頒發(fā)機(jī)構(gòu)來向用戶頒發(fā)證書,但這需要公鑰基礎(chǔ)結(jié)構(gòu) (PKI),并且其設(shè)置和維護(hù)成本比較昂貴。同時(shí)還難于管理遠(yuǎn)程用戶的證書,尤其是使用基于硬件的令牌(如智能卡)時(shí)。此類高安全性常常導(dǎo)致高成本。另外,可使用 RSA 提供的一次性密碼解決方案 SecureID。但是,應(yīng)當(dāng)注意 SecureID 并非基于標(biāo)準(zhǔn)的技術(shù),因此它可能導(dǎo)致不兼容問題和授權(quán)開銷。第三種選擇是使用基于標(biāo)準(zhǔn)的 OTP 解決方案。但是,它有些什么類型的一次性密碼選項(xiàng),為什么 OTP 優(yōu)于傳統(tǒng)的密碼?我們這就來研究一下。一次性密碼傳統(tǒng)的靜態(tài)密碼通常只在需要時(shí)才進(jìn)行更改:當(dāng)它過期時(shí)或者當(dāng)用戶忘記密碼并需要重置時(shí)。由于密碼緩存在
6、計(jì)算機(jī)硬盤上并存儲(chǔ)在服務(wù)器上,因此它們很容易被破解。便攜式計(jì)算機(jī)尤其如此,因?yàn)樗鼈內(nèi)菀妆槐I。許多企業(yè)都為員工配備了便攜式計(jì)算機(jī),并將網(wǎng)絡(luò)打開以允許遠(yuǎn)程訪問。他們還會(huì)雇用臨時(shí)員工和供應(yīng)商。在此環(huán)境中,簡(jiǎn)單的靜態(tài)密碼解決方案可能成為一種不利因素。與靜態(tài)密碼不同,一次性密碼會(huì)在用戶每次登錄時(shí)發(fā)生更改。密碼有以下兩種生成方式:與時(shí)間同步或與計(jì)數(shù)器同步。兩種方法通常都要求用戶攜帶一個(gè)與服務(wù)器同步的小型硬件設(shè)備(通??梢話煸阼€匙鏈上),并且通常都使用一些算法來生成密碼。與時(shí)間同步的 OTP 已得到廣泛部署,但可能出現(xiàn)時(shí)鐘偏差問題。即,如果身份驗(yàn)證服務(wù)器和用戶令牌的時(shí)間不同,則無法生成預(yù)期的 OTP 值,并
7、且用戶身份驗(yàn)證將失敗。使用與時(shí)間同步的 OTP 時(shí),用戶通常必須在特定時(shí)間段內(nèi)輸入該密碼,否則會(huì)將其視為過期且必須生成另一密碼。與計(jì)數(shù)器同步的 OTP 解決方案將同步客戶端設(shè)備與服務(wù)器之間的計(jì)數(shù)器。每次請(qǐng)求設(shè)備的 OTP 值時(shí),計(jì)數(shù)器都會(huì)增加。就像使用與時(shí)間同步的 OTP 一樣,當(dāng)用戶想要登錄時(shí),他必須輸入設(shè)備上當(dāng)前顯示的 OTP。用于應(yīng)對(duì)復(fù)雜情況的 OTP 是一種特殊情況,它們通常還會(huì)使用硬件設(shè)備。但是,用戶必須提供一個(gè)已知值(如個(gè)人標(biāo)識(shí)號(hào) (PIN))才能生成 OTP。此類 OTP 目前正在歐洲廣泛應(yīng)用,用于為信用卡和借記卡增加身份驗(yàn)證。目前使用的 OTP 解決方案均建立在某種加密處理之上
8、,以根據(jù)同步參數(shù)(即時(shí)間或計(jì)數(shù)器值)、密鑰以及可能需要的 PIN 生成當(dāng)前密碼。例如,基于哈希的 OTP 使用加密哈希算法來計(jì)算密碼。如您所知,加密哈希是一種單向函數(shù),即將任意長(zhǎng)度的消息映射為固定長(zhǎng)度的摘要。因此,基于哈希的 OTP 首先進(jìn)行輸入(同步參數(shù)、密鑰、PIN),然后通過單向函數(shù)運(yùn)行它們,并且生成固定長(zhǎng)度的密碼。那么,究竟應(yīng)選擇哪種方法呢?由于希望了解其工作原理,因此我創(chuàng)建并測(cè)試了一個(gè)解決方案。接下來,我將介紹如何使用 IIS 7.0 和密鑰哈希消息身份驗(yàn)證來創(chuàng)建與計(jì)數(shù)器同步的 OTP(如 RFC 2104 和 RFC 4426 標(biāo)準(zhǔn)所述。其中 RFC 2104 是“HMAC:鍵入-
9、散列法用于信息身份驗(yàn)證”,網(wǎng)址是 ;而 RFC 4226 是“HOTP:基于 HMAC 的一次性密碼算法”,網(wǎng)址是 )。因?yàn)槭菧y(cè)試部署,我將使用簡(jiǎn)單的客戶端應(yīng)用程序來創(chuàng)建 OTP。如前所述,在實(shí)際情況中,您可能希望將其與防篡改硬件設(shè)備結(jié)合使用。我將大致介紹使用這種方法所需的基礎(chǔ)知識(shí),并提供一些入門資源。完整的 OTP 解決方案為構(gòu)建 OTP 解決方案,我需要?jiǎng)?chuàng)建一個(gè)基于標(biāo)準(zhǔn)的 OTP 身份驗(yàn)證 Web 服務(wù),該服務(wù)由 SQL Server 提供支持且集成到 ASP.NET 中。我將創(chuàng)建一個(gè) OTP 生成器,通過將其安裝到每臺(tái)客戶端計(jì)算機(jī)上,用戶就可運(yùn)行它來生成新的 OTP。當(dāng)收到 Web 瀏覽
10、器提示時(shí),用戶需要鍵入 OTP 值并單擊“Submit”(提交)按鈕進(jìn)行身份驗(yàn)證。OTP 插件模塊從 IIS 得到通知,并且隨后調(diào)用 Web 服務(wù)來檢驗(yàn)身份驗(yàn)證請(qǐng)求。Web 服務(wù)在 SQL Server 表中查找用戶的密鑰和計(jì)數(shù)器值、檢驗(yàn) OTP 計(jì)算,并響應(yīng)身份驗(yàn)證為成功還是失敗。圖 1 顯示了示例解決方案的體系結(jié)構(gòu)。請(qǐng)記住:在生產(chǎn)環(huán)境中,應(yīng)通過在客戶端和服務(wù)器之間配置信任關(guān)系以及限制無效的登錄嘗試等方法,進(jìn)一步強(qiáng)化此體系結(jié)構(gòu)來杜絕拒絕服務(wù) (DoS) 攻擊。圖 1 一次性密碼解決方案組件 本文附帶的示例代碼(位于MSDN 雜志網(wǎng)站的下載區(qū))包含一個(gè) Visual Studio 2005 解
11、決方案,其中有用于生成 OTP 的一個(gè) C+ DLL (HmacOtpDll)。由于該 DLL 供 OtpClient 和 Web 服務(wù)使用,我將其放在 system32 文件夾中。(我使用生成后事件來將其自動(dòng)復(fù)制到該位置。)此示例還包含一個(gè)名為 OtpClient 的控制臺(tái)應(yīng)用程序,可用它來生成 OTP 值。OtpClient 使用 XML 文件來存儲(chǔ)加密代碼和計(jì)數(shù)器。每次重建應(yīng)用程序時(shí),它都會(huì)將 XML 從項(xiàng)目根目錄復(fù)制到目標(biāo)目錄,從而將計(jì)數(shù)器重置為 0。名為 IIS7Module 的 IIS 模塊提供了 OTP 身份驗(yàn)證服務(wù),并且該模塊使用一個(gè)名為 WebService 的 Web 服務(wù)
12、來檢驗(yàn) OTP 值。該 Web 服務(wù)包含一個(gè)位于 App_Data 中的 SQL Server Express 數(shù)據(jù)庫。最后,我在 TestWebsite 項(xiàng)目中包括了用于測(cè)試該解決方案的網(wǎng)頁。測(cè)試 OTP 生成器客戶端測(cè)試 OTP 生成器客戶端應(yīng)用程序是一個(gè)獨(dú)立的工具,它允許用戶獲取 OTP 身份驗(yàn)證值。它免除了在實(shí)際部署中通常必需的硬件設(shè)備和挑戰(zhàn)(如 PIN 請(qǐng)求)。為計(jì)算 OTP,該客戶端組件使用與身份驗(yàn)證 Web 服務(wù)共享的 DLL。在本示例應(yīng)用程序中,用戶將運(yùn)行此工具來創(chuàng)建下一個(gè) OTP,然后將該值手動(dòng)鍵入到 Web 瀏覽器的表格中。我將使用 C# 和一些 C 來完成所有工作。(我選
13、擇使用 C 來實(shí)現(xiàn)底層 OTP 加密。)您已了解 OTP 在用戶級(jí)別的工作原理,但此解決方案是如何在功能級(jí)別上工作的呢?這個(gè)基于哈希的 OTP 解決方案有兩個(gè)輸入值:密鑰和計(jì)數(shù)。但是,OTP 解決方案還具有與實(shí)現(xiàn)程序相關(guān)的元數(shù)據(jù),包括執(zhí)行身份驗(yàn)證時(shí)用戶必須鍵入的密鑰的長(zhǎng)度和預(yù)期 OTP 值的長(zhǎng)度。我的示例程序?qū)⑸砷L(zhǎng)度為六個(gè)字符的 OTP,并且可支持最多八個(gè)字符。為簡(jiǎn)單起見,該實(shí)現(xiàn)使用將密鑰長(zhǎng)度限制為 64 個(gè)字節(jié)的一些固定長(zhǎng)度緩沖區(qū)。但是,假設(shè)密鑰是密碼學(xué)角度上的高質(zhì)量隨機(jī)數(shù)字,則會(huì)需要巨大的密鑰空間。此類密鑰將不會(huì)成為生產(chǎn)部署中的脆弱環(huán)節(jié)。(目前隨機(jī)密鑰通常為 256 位,即 32 字節(jié)。
14、)特定用戶(或從技術(shù)角度講,具有特定密鑰)每次進(jìn)行身份驗(yàn)證嘗試時(shí),計(jì)數(shù)值都會(huì)增加。OTP 解決方案的安全性依賴于永不重復(fù)使用的計(jì)數(shù)值;這一點(diǎn)由 OTP 服務(wù)器保證。實(shí)際使用時(shí),計(jì)數(shù)是 64 位無符號(hào)整數(shù)。如前所述,另一種部署方法是使用與服務(wù)器之間的時(shí)間同步。密鑰哈希消息身份驗(yàn)證代碼 (HMAC) 是基于密鑰的一種加密哈希?;驌Q句話說,HMAC 接受任意消息和密鑰,并將消息映射成固定長(zhǎng)度的摘要值(如 20 字節(jié)),從而確保只有具有相同密鑰的人才能從相同的消息生成相同的摘要值。HMAC-OTP 的首個(gè)計(jì)算步驟是接受計(jì)數(shù)值,并將其編碼為 HMAC 計(jì)算的輸入消息。實(shí)際使用時(shí),消息是設(shè)為計(jì)數(shù)器值的 8
15、 字節(jié)緩沖區(qū)。圖 2 描述了這一步驟以及接下來的兩個(gè)步驟。下一計(jì)算步驟是使用用戶密鑰計(jì)算上述消息的 HMAC。請(qǐng)注意,我在該實(shí)現(xiàn)中對(duì)字節(jié)順序進(jìn)行了編址以確保它與 RFC 兼容。圖 2 一次性密碼流程 (單擊該圖像獲得較大視圖)隨后,通過對(duì) 20 字節(jié)的 HMAC 結(jié)果進(jìn)行十進(jìn)制編碼,從而將此結(jié)果轉(zhuǎn)換為 OTP 值。其中包含兩個(gè)實(shí)踐要求:第一,我需要保留盡可能多的 HMAC 計(jì)算位,最多為 OTP 結(jié)果的長(zhǎng)度(在本例中為六位數(shù)),因?yàn)閬G失位會(huì)把計(jì)算暴露給加密攻擊。第二,我需要?jiǎng)?chuàng)建與盡可能多的輸入設(shè)備類型兼容的 OTP。這一兼容要求正是我采用十進(jìn)制編碼的原因所在。(這種強(qiáng)身份驗(yàn)證實(shí)現(xiàn)甚至與撥號(hào)式電
16、話兼容!)示例網(wǎng)站我的目標(biāo)是確保所設(shè)計(jì)的站點(diǎn)能正確地顯示用戶是否使用 OTP 實(shí)現(xiàn)成功登錄。為便于測(cè)試,此 OTP 解決方案包含一個(gè)示例網(wǎng)站。該網(wǎng)站的首頁是 Default.htm,此登錄頁面用于向通過身份驗(yàn)證的用戶展示 OTP 模塊如何保護(hù)非 ASP.NET 頁面。其中還包含用于顯示當(dāng)前已通過身份驗(yàn)證的用戶名的 Test.aspx 文件,以及顯示 Test.aspx 頁面如何從 System.Web.UI.Page.User 屬性檢索已通過身份驗(yàn)證的用戶名的 Test.aspx.cs 文件。該解決方案還包括一個(gè) web.config 文件(其中包含對(duì) OtpModule 的引用)以及引用了
17、IISModule.dll 文件的 Visual Studio 項(xiàng)目解決方案。IIS HTTP OTP 插件模塊是該網(wǎng)站的一個(gè)組件。該模塊與 IIS 交互,并將用戶重定向到可在其中輸入用戶名和 OTP 的 Web 窗體。當(dāng)用戶提交用戶名和 OTP 時(shí),該模塊會(huì)檢驗(yàn)輸入并將用戶重定向到相應(yīng)的成功或失敗頁面。該模塊還會(huì)將用戶的身份驗(yàn)證狀態(tài)與用戶會(huì)話關(guān)聯(lián)起來。為實(shí)現(xiàn)可維護(hù)性和可支持性,我希望能夠?qū)υ撃K進(jìn)行管理,因此我使用 C# 來編寫該模塊。插件模塊是身份驗(yàn)證 Web 服務(wù)(稍后我將進(jìn)行介紹)的客戶端。OTP 模塊實(shí)現(xiàn)了 IHttpModule 接口。實(shí)際上,該模塊非常簡(jiǎn)單,僅包括三個(gè)公共方法。第
18、一個(gè)是 Init,如下所示:復(fù)制代碼 public void Init(HttpApplication application) application.BeginRequest += new EventHandler(application_BeginRequest);如您所見,該模塊使用此方法來注冊(cè) BeginRequest 處理程序 application_BeginRequest。OTP BeginRequest 處理程序的目的是確保所有 HTTP 請(qǐng)求均來自通過身份驗(yàn)證的用戶。具體實(shí)現(xiàn)方式為使用以下幾個(gè)幫助函數(shù):一個(gè)函數(shù)用于確定調(diào)用方是否已通過身份驗(yàn)證,還有幾個(gè)函數(shù)用于在調(diào)用方尚未通
19、過身份驗(yàn)證時(shí)對(duì)其執(zhí)行身份驗(yàn)證。還有一點(diǎn)值得一提:在 BeginRequest 事件過程中截取請(qǐng)求的方式不會(huì)遵循 ASP.NET 應(yīng)用程序所使用的標(biāo)準(zhǔn)身份驗(yàn)證模式。但是,如果不希望其他模塊看到此請(qǐng)求(甚至是那些設(shè)計(jì)為在進(jìn)行身份驗(yàn)證之前截取請(qǐng)求的模塊),則建議使用此方法。IsAuthenticated 幫助函數(shù)將確定請(qǐng)求是否指明需要一個(gè)已通過身份驗(yàn)證的用戶。實(shí)現(xiàn)方法是:使用 System.Web 命名空間中的 HttpContext、HttpCookie 和 Security.FormsAuthenticationTicket 類來檢查應(yīng)用程序上下文中是否包含正確加密的身份驗(yàn)證 cookie。如果
20、存在 cookie 并且能夠正確解密,則認(rèn)為調(diào)用方已通過身份驗(yàn)證。否則,存在以下兩種可能的狀態(tài):該請(qǐng)求是應(yīng)處理的 OTP 身份驗(yàn)證請(qǐng)求,或者該 Web 客戶端請(qǐng)求無效(未通過身份驗(yàn)證),這時(shí)會(huì)顯示登錄窗體。OTP 模塊包括一個(gè)名為 LoginPage.htm 的內(nèi)置登錄窗體。它由以下五個(gè) HTML 元素組成:一個(gè)初始為空的錯(cuò)誤消息字段,一個(gè)用戶名字段、一個(gè)密碼字段、一個(gè)提交按鈕以及一個(gè)名為 hdLoginForm 的隱藏輸入字段。如果調(diào)用方已通過身份驗(yàn)證,則模塊無需執(zhí)行進(jìn)一步操作。繼續(xù)處理請(qǐng)求。在本演示中,將加載 Default.htm 頁面。如果調(diào)用方未通過身份驗(yàn)證,則會(huì)調(diào)用 IsAuthe
21、nticationPost 幫助函數(shù)。它將檢查請(qǐng)求類型是否為 POST,以及請(qǐng)求窗體是否包含 hdLoginForm 輸入字段。如果兩個(gè)條件都得到確認(rèn),則此方法將返回 true。如果請(qǐng)求是身份驗(yàn)證請(qǐng)求,則調(diào)用 TryAuthenticate 幫助函數(shù)。從請(qǐng)求上下文中檢索用戶名和 OTP 值,并將其傳遞給身份驗(yàn)證 Web 服務(wù)的 VerifyOtpCode 方法。如果確認(rèn)成功,則會(huì)將新的加密身份驗(yàn)證 cookie 附加到響應(yīng)中。然后,將該響應(yīng)重定向到默認(rèn)頁面 (Default.htm)。要演示這一效果,可先保存用戶請(qǐng)求的原始頁面,并在身份驗(yàn)證成功之后將用戶重定向到該頁面。如果 VerifyOtp
22、Code Web 服務(wù)調(diào)用失敗,請(qǐng)求將被重定向回登錄窗體(此時(shí)將顯示一個(gè)錯(cuò)誤消息),并且調(diào)用幫助函數(shù) ShowLoginForm。此幫助函數(shù)從模塊的資源部分加載登錄頁面、設(shè)置頁面中的錯(cuò)誤消息字符串(如果適用),并將登錄頁面設(shè)為對(duì)當(dāng)前請(qǐng)求的響應(yīng)。然后,它將請(qǐng)求標(biāo)記為已完成(無論請(qǐng)求的性質(zhì)如何都會(huì)完成這一步)。身份驗(yàn)證 Web 服務(wù)身份驗(yàn)證 Web 服務(wù)負(fù)責(zé)執(zhí)行實(shí)際的 OTP 身份驗(yàn)證,其方法是確定提供的 OTP 值是否表明命名用戶已擁有密鑰,。由于重用底層加密庫(此加密庫實(shí)現(xiàn)了在之前的有關(guān)測(cè)試 OTP 生成器客戶端的章節(jié)中所介紹的 OTP 計(jì)算),實(shí)現(xiàn) OTP 身份驗(yàn)證 Web 服務(wù)將非常簡(jiǎn)單。
23、該重用形式為對(duì)本機(jī) HmacOtpDll.dll 的 GenerateOTP 導(dǎo)出的 P/Invoke 調(diào)用。Web 服務(wù)提供一個(gè) Web 方法 VerifyOtpCode(在身份驗(yàn)證成功時(shí)它將返回 true)。該方法首先加載與身份驗(yàn)證請(qǐng)求中指定的用戶名相對(duì)應(yīng)的 SQL Server 數(shù)據(jù)庫行。如果 SQL Server 無法找到匹配行,該方法將返回 false。如果在 SQL Server 數(shù)據(jù)庫中找到相應(yīng)用戶名,該方法將把以下數(shù)據(jù)項(xiàng)傳給本機(jī) GenerateOTP:請(qǐng)求中指定的 OTP 值、用戶密鑰(從 SQL Server 中檢索得到)以及計(jì)數(shù)器值(也從 SQL Server 中檢索得到
24、)。GenerateOTP 將使用連續(xù)的計(jì)數(shù)器值進(jìn)行反復(fù)嘗試,直到返回匹配的 OTP 值或者已檢查過 1,000 個(gè)連續(xù)的計(jì)數(shù)器值。盡管不太可能從上次成功身份驗(yàn)證后重復(fù)嘗試一千次,但它可能使用戶意外將客戶端計(jì)數(shù)器運(yùn)行至脫機(jī)!通過縮小此范圍,還可使攻擊者實(shí)際猜測(cè)的 OTP 值與序列中的值恰好相等的機(jī)率更低,但它會(huì)增加用戶意外將客戶端計(jì)數(shù)器運(yùn)行至超出服務(wù)器允許范圍的可能性。在后一種情況下,需要請(qǐng)求管理員介入才能使用戶能夠再次進(jìn)行身份驗(yàn)證。如果在計(jì)數(shù)器范圍內(nèi)找到匹配的 OTP 值,則將把新的計(jì)數(shù)器值寫回?cái)?shù)據(jù)庫。然而遺憾的是,這需要身份驗(yàn)證 Web 服務(wù)具有數(shù)據(jù)庫的寫入權(quán)限,并且如前所述,由于必須確保
25、計(jì)數(shù)器值不發(fā)生重用,因此它對(duì)于 OTP 的安全性而言也至關(guān)重要。(為使一次性密碼唯一,必須保證它實(shí)際僅被使用一次。)具有簡(jiǎn)單架構(gòu)的 SQL Server 數(shù)據(jù)庫可用于存儲(chǔ)用戶名及對(duì)應(yīng)的 OTP 密鑰或種子值。還可擴(kuò)展該構(gòu)架以包含登錄信息(如使用 OTP 成功登錄和不成功登錄的次數(shù)和時(shí)間)。該數(shù)據(jù)庫由 Username、SecretCode 和 Counter 列組成。有關(guān)每個(gè)元素的解釋,請(qǐng)參閱“身份驗(yàn)證 Web 服務(wù)”一節(jié)。示例代碼附帶的數(shù)據(jù)庫副本僅包含一個(gè)存儲(chǔ)用戶名“testuser”的行。完整的體系結(jié)構(gòu)圖 3 顯示了解決方案完成時(shí)的體系結(jié)構(gòu)。如圖所示,用戶啟動(dòng)客戶端應(yīng)用程序、生成 OTP、
26、然后導(dǎo)航至身份驗(yàn)證 Web 應(yīng)用程序,并將 OTP 粘貼到 Web 瀏覽器窗體中。當(dāng) OTP 模塊檢測(cè)到請(qǐng)求尚未通過身份驗(yàn)證時(shí),它將生成窗體。當(dāng)用戶單擊“Submit”(提交)時(shí),Web 瀏覽器窗體將把請(qǐng)求發(fā)送到服務(wù)器(在其中它將被 OTP 模塊再次截?。?。接下來,OTP 模塊調(diào)用 OTP Web 服務(wù)來檢驗(yàn)用戶的身份驗(yàn)證數(shù)據(jù)。最后,如果成功,Web 服務(wù)器將針對(duì)請(qǐng)求頁面(此頁面可為任意類型:HTML、ASP.NET、PHP 等)調(diào)用處理程序。圖 3 詳細(xì)的 OTP 解決方案體系結(jié)構(gòu) (單擊該圖像獲得較大視圖)運(yùn)行代碼示例要運(yùn)行代碼示例,需要具有 IIS 7.0 的 Windows Vista
27、 或 Windows Server 2008 (并且針對(duì) Windows Server 2008 啟用“應(yīng)用程序服務(wù)器”角色)、Visual Studio 2005、SQL Server 2005 或 SQL Server Express 以及 OTP 示例代碼。要實(shí)驗(yàn)演示,建議使用 Windows Server 2008 和 SQL Server Express(因?yàn)槲揖褪褂玫乃鼈儯?。在下面的說明中,假設(shè) OTP 示例代碼解決方案文件位于 C:TestOTPOtp.sln。要準(zhǔn)備環(huán)境,使用“IIS 管理器”或通過編輯 web.config 文件來安裝 IIS 模塊。向 IIS_IUSRS 帳
28、戶或配置為自定義應(yīng)用程序池標(biāo)識(shí)的帳戶授予對(duì) C:TestOTPwebserviceapp_data 的讀寫權(quán)限。然后,為 OtpTest 和 OtpService 添加網(wǎng)站。使用 web.config 文件注冊(cè) IIS 模塊(此步驟已在示例中完成 請(qǐng)參閱 TestWebsiteWeb.Config)需要以下配置標(biāo)記:復(fù)制代碼 modules 還應(yīng)將模塊 DLL 添加到 bin 文件夾或全局程序集緩存 (GAC) 中。要向 GAC 注冊(cè) OTP 模塊,請(qǐng)使用如下所示命令:復(fù)制代碼 gacutil.exe /i iis7module.dll要使用“IIS 管理器”,請(qǐng)打開此管理器并在控制臺(tái)樹中單擊
29、計(jì)算機(jī)名稱。在中間窗格中,雙擊“Modules”(模塊)圖標(biāo),然后單擊操作窗格中的“Add Managed Module”(添加托管模塊)。接下來,從下拉列表框中選擇 OtpModule。如果將 DLL 放入 GAC 中并使用“IIS 管理器”來添加模塊,則可能需要重啟 IIS 才能刷新模塊列表。為正確增加 SQL Server Express 中的嘗試次數(shù)值,NETWORK SERVICE 帳戶需要具有對(duì) C:TestOtpWebServiceApp_Data 庫的讀寫權(quán)限。此對(duì)象所需權(quán)限是讀取和執(zhí)行、列出文件夾內(nèi)容、讀取以及寫入(如圖 4 所示)。圖 4 所需的對(duì) App_Data 目錄的
30、權(quán)限 還必須在 IIS 中為測(cè)試網(wǎng)站設(shè)置一個(gè)網(wǎng)站。為此,打開“IIS 管理器”控制臺(tái),并在其控制臺(tái)樹中,展開具有您的計(jì)算機(jī)名稱的節(jié)點(diǎn),右鍵單擊“Sites”(網(wǎng)站)并單擊“Add Web Site”(添加網(wǎng)站)。將以下設(shè)置用于新網(wǎng)站,然后單擊“OK”(確定)(圖 5 顯示了這些設(shè)置):圖 5 OtpTest 網(wǎng)站設(shè)置 (單擊該圖像獲得較大視圖)“Site name”(網(wǎng)站名稱):OtpTest “Physical path”(物理路徑):C:testOtpTestWebsite “Port”(端口):8000 還必須為 Web 服務(wù)創(chuàng)建一個(gè)網(wǎng)站。將以下設(shè)置用于該網(wǎng)站:網(wǎng)站名稱為 OtpServ
31、ice,物理路徑為 C:TestOtpWebService,并且端口為 8080。接下來,在 Visual Studio 中打開 Otp.sln 解決方案,在解決方案資源管理器中展開 IIS7Module,展開“Web References”(Web 引用)、右鍵單擊 OtpService,單擊“Properties”(屬性)并確認(rèn)“Web Reference URL”(Web 引用 URL)已設(shè)為 http:/localhost:8080/service.asmx。在“Build”(生成)菜單中,單擊“Build Solution”(生成解決方案)并確認(rèn)沒有發(fā)生生成錯(cuò)誤?,F(xiàn)在,應(yīng)執(zhí)行測(cè)試來確
32、保已適當(dāng)注冊(cè)并正確加載 OTP 模塊。為此,導(dǎo)航到 http:/localhost:8000 并確認(rèn)出現(xiàn)圖 6 所示的登錄頁面。要測(cè)試實(shí)現(xiàn),鍵入測(cè)試用戶名 testuser。圖 6 測(cè)試網(wǎng)站的首頁 要獲得 OTP 代碼文本框的值,以管理員身份打開命令提示符窗口并導(dǎo)航到 OTP 客戶端程序的生成目錄 (C:TestOtpotpclientbindebug)。運(yùn)行 OtpClient.exe 獲得下一 OTP 值。結(jié)果應(yīng)如圖 7 所示。圖 7 運(yùn)行 OtpClient.exe 以獲得 OTP 值 (單擊該圖像獲得較大視圖)將 OTP 值鍵入 OTP 代碼文本框,然后單擊“Submit”(提交)。圖
33、 8 在頁面中顯示了示例 OTP 代碼。如果身份驗(yàn)證成功,您會(huì)轉(zhuǎn)到 Default.htm 頁面。圖 8 具有示例 OTP 值的測(cè)試頁面 單擊默認(rèn)頁面上的 Text.aspx 鏈接進(jìn)入演示頁面,該頁面將顯示當(dāng)前通過身份驗(yàn)證的用戶(如果有)的名稱。如果身份驗(yàn)證憑據(jù)不正確,則會(huì)出現(xiàn)圖 9 所示的頁面。圖 9 身份驗(yàn)證不成功 部署注意事項(xiàng)如果要在實(shí)際環(huán)境中部署此示例解決方案,有許多需要考慮的事項(xiàng)。實(shí)際部署將用戶密鑰/種子存儲(chǔ)在防篡改的設(shè)備中(如硬件令牌)。建議將解決方案修改為在多次連續(xù)失敗的身份驗(yàn)證嘗試后鎖定帳戶??赏ㄟ^將多個(gè) SQL Server 列和一個(gè)功能添加到 Web 服務(wù)來實(shí)現(xiàn)此功能。如果互
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報(bào)參考:教育元宇宙的應(yīng)用倫理研究
- 2025年嚴(yán)于修身學(xué)習(xí)心得體會(huì)(5篇)
- 疫情防護(hù)2025年度企業(yè)員工培訓(xùn)與心理咨詢合同3篇
- 二零二五年度城市綠化養(yǎng)護(hù)勞務(wù)分包合同書4篇
- 二零二五年度城市住宅出售協(xié)議書(含裝修及家具配置)4篇
- 二零二五年鍋爐維修工程承包與環(huán)保驗(yàn)收協(xié)議3篇
- 2024手繪藝術(shù)作品拍賣合同協(xié)議3篇
- 安徽省二零二五年度住房租賃市場(chǎng)租賃糾紛處理合同
- 2025年護(hù)林員勞動(dòng)合同書(含森林資源保護(hù)培訓(xùn))3篇
- 2025版土地經(jīng)營權(quán)租賃與農(nóng)業(yè)產(chǎn)業(yè)扶貧合同3篇
- 消防產(chǎn)品目錄(2025年修訂本)
- 地方性分異規(guī)律下的植被演替課件高三地理二輪專題復(fù)習(xí)
- 光伏項(xiàng)目風(fēng)險(xiǎn)控制與安全方案
- 9.2提高防護(hù)能力教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 催收培訓(xùn)制度
- ISO 22003-1:2022《食品安全-第 1 部分:食品安全管理體系 審核與認(rèn)證機(jī)構(gòu)要求》中文版(機(jī)翻)
- 2024年廣東省高考地理真題(解析版)
- 2024高考物理廣東卷押題模擬含解析
- 人教版五年級(jí)上冊(cè)數(shù)學(xué)簡(jiǎn)便計(jì)算大全600題及答案
- GB/T 15945-1995電能質(zhì)量電力系統(tǒng)頻率允許偏差
- GB 32311-2015水電解制氫系統(tǒng)能效限定值及能效等級(jí)
評(píng)論
0/150
提交評(píng)論