使用一次性密碼解決方案更安全地驗(yàn)證身份_第1頁(yè)
使用一次性密碼解決方案更安全地驗(yàn)證身份_第2頁(yè)
使用一次性密碼解決方案更安全地驗(yàn)證身份_第3頁(yè)
使用一次性密碼解決方案更安全地驗(yàn)證身份_第4頁(yè)
使用一次性密碼解決方案更安全地驗(yàn)證身份_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1/2目錄HYPERLINK”"\l”S1"一次性密碼

HYPERLINK”"\l”S2"完整的OTP解決方案

HYPERLINK""\l”S3"測(cè)試OTP生成器客戶端

\l"S4"示例網(wǎng)站?HYPERLINK""\l"S6"完整的體系結(jié)構(gòu)

HYPERLINK”"\l”S7"運(yùn)行代碼示例

HYPERLINK”"\l"S8"部署注意事項(xiàng)?HYPERLINK""\l”S9”嘗試一下密碼的安全和管理是令企業(yè)IT管理員非常頭疼的一個(gè)問(wèn)題。用戶往往創(chuàng)建非常簡(jiǎn)單的密碼,或?qū)⑵涿艽a寫下來(lái)以確保他們能夠記住這些密碼。此外,幾乎沒(méi)有安全有效的程序來(lái)重置密碼。既然存在這些限制,如何才能在遠(yuǎn)程用戶訪問(wèn)您的網(wǎng)絡(luò)時(shí)減少此類安全問(wèn)題呢?由于許多用戶都會(huì)寫下他們的密碼,如何才能使公司的密碼解決方案更加可靠呢?我將介紹如何使用基于標(biāo)準(zhǔn)的技術(shù)以及C#和C來(lái)開(kāi)發(fā)一次性密碼(OTP)概念驗(yàn)證.但是,我想先大致介紹一下密碼替代技術(shù)。有多種方法可用于消除遠(yuǎn)程用戶的標(biāo)準(zhǔn)密碼??墒褂米C書(shū)頒發(fā)機(jī)構(gòu)來(lái)向用戶頒發(fā)證書(shū),但這需要公鑰基礎(chǔ)結(jié)構(gòu)(PKI),并且其設(shè)置和維護(hù)成本比較昂貴。同時(shí)還難于管理遠(yuǎn)程用戶的證書(shū),尤其是使用基于硬件的令牌(如智能卡)時(shí)。此類高安全性常常導(dǎo)致高成本。另外,可使用RSA提供的一次性密碼解決方案SecureID。但是,應(yīng)當(dāng)注意SecureID并非基于標(biāo)準(zhǔn)的技術(shù),因此它可能導(dǎo)致不兼容問(wèn)題和授權(quán)開(kāi)銷。第三種選擇是使用基于標(biāo)準(zhǔn)的OTP解決方案。但是,它有些什么類型的一次性密碼選項(xiàng),為什么OTP優(yōu)于傳統(tǒng)的密碼?我們這就來(lái)研究一下。一次性密碼傳統(tǒng)的靜態(tài)密碼通常只在需要時(shí)才進(jìn)行更改:當(dāng)它過(guò)期時(shí)或者當(dāng)用戶忘記密碼并需要重置時(shí)。由于密碼緩存在計(jì)算機(jī)硬盤上并存儲(chǔ)在服務(wù)器上,因此它們很容易被破解.便攜式計(jì)算機(jī)尤其如此,因?yàn)樗鼈內(nèi)菀妆槐I.許多企業(yè)都為員工配備了便攜式計(jì)算機(jī),并將網(wǎng)絡(luò)打開(kāi)以允許遠(yuǎn)程訪問(wèn).他們還會(huì)雇用臨時(shí)員工和供應(yīng)商。在此環(huán)境中,簡(jiǎn)單的靜態(tài)密碼解決方案可能成為一種不利因素。與靜態(tài)密碼不同,一次性密碼會(huì)在用戶每次登錄時(shí)發(fā)生更改。密碼有以下兩種生成方式:與時(shí)間同步或與計(jì)數(shù)器同步。兩種方法通常都要求用戶攜帶一個(gè)與服務(wù)器同步的小型硬件設(shè)備(通??梢話煸阼€匙鏈上),并且通常都使用一些算法來(lái)生成密碼。與時(shí)間同步的OTP已得到廣泛部署,但可能出現(xiàn)時(shí)鐘偏差問(wèn)題。即,如果身份驗(yàn)證服務(wù)器和用戶令牌的時(shí)間不同,則無(wú)法生成預(yù)期的OTP值,并且用戶身份驗(yàn)證將失敗.使用與時(shí)間同步的OTP時(shí),用戶通常必須在特定時(shí)間段內(nèi)輸入該密碼,否則會(huì)將其視為過(guò)期且必須生成另一密碼。與計(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解決方案均建立在某種加密處理之上,以根據(jù)同步參數(shù)(即時(shí)間或計(jì)數(shù)器值)、密鑰以及可能需要的PIN生成當(dāng)前密碼。例如,基于哈希的OTP使用加密哈希算法來(lái)計(jì)算密碼。如您所知,加密哈希是一種單向函數(shù),即將任意長(zhǎng)度的消息映射為固定長(zhǎng)度的摘要。因此,基于哈希的OTP首先進(jìn)行輸入(同步參數(shù)、密鑰、PIN),然后通過(guò)單向函數(shù)運(yùn)行它們,并且生成固定長(zhǎng)度的密碼。那么,究竟應(yīng)選擇哪種方法呢?由于希望了解其工作原理,因此我創(chuàng)建并測(cè)試了一個(gè)解決方案。接下來(lái),我將介紹如何使用IIS7.0和密鑰哈希消息身份驗(yàn)證來(lái)創(chuàng)建與計(jì)數(shù)器同步的OTP(如RFC2104和RFC4426標(biāo)準(zhǔn)所述.其中RFC2104是“HMAC:鍵入-散列法用于信息身份驗(yàn)證”,網(wǎng)址是;而RFC4226是“HOTP:基于HMAC的一次性密碼算法",網(wǎng)址是)。因?yàn)槭菧y(cè)試部署,我將使用簡(jiǎn)單的客戶端應(yīng)用程序來(lái)創(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ù)由SQLServer?提供支持且集成到中.我將創(chuàng)建一個(gè)OTP生成器,通過(guò)將其安裝到每臺(tái)客戶端計(jì)算機(jī)上,用戶就可運(yùn)行它來(lái)生成新的OTP。當(dāng)收到Web瀏覽器提示時(shí),用戶需要鍵入OTP值并單擊“Submit”(提交)按鈕進(jìn)行身份驗(yàn)證。OTP插件模塊從IIS得到通知,并且隨后調(diào)用Web服務(wù)來(lái)檢驗(yàn)身份驗(yàn)證請(qǐng)求。Web服務(wù)在SQLServer表中查找用戶的密鑰和計(jì)數(shù)器值、檢驗(yàn)OTP計(jì)算,并響應(yīng)身份驗(yàn)證為成功還是失敗.圖1顯示了示例解決方案的體系結(jié)構(gòu)。請(qǐng)記?。涸谏a(chǎn)環(huán)境中,應(yīng)通過(guò)在客戶端和服務(wù)器之間配置信任關(guān)系以及限制無(wú)效的登錄嘗試等方法,進(jìn)一步強(qiáng)化此體系結(jié)構(gòu)來(lái)杜絕拒絕服務(wù)(DoS)攻擊。圖1一次性密碼解決方案組件本文附帶的示例代碼(位于《MSDN?雜志》網(wǎng)站的下載區(qū))包含一個(gè)VisualStudio?2005解決方案,其中有用于生成OTP的一個(gè)C++DLL(HmacOtpDll)。由于該DLL供OtpClient和Web服務(wù)使用,我將其放在system32文件夾中。(我使用生成后事件來(lái)將其自動(dòng)復(fù)制到該位置。)此示例還包含一個(gè)名為OtpClient的控制臺(tái)應(yīng)用程序,可用它來(lái)生成OTP值。OtpClient使用XML文件來(lái)存儲(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ù)來(lái)檢驗(yàn)OTP值。該Web服務(wù)包含一個(gè)位于App_Data中的SQLServerExpress數(shù)據(jù)庫(kù).最后,我在TestWebsite項(xiàng)目中包括了用于測(cè)試該解決方案的網(wǎng)頁(yè)。測(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)行此工具來(lái)創(chuàng)建下一個(gè)OTP,然后將該值手動(dòng)鍵入到Web瀏覽器的表格中。我將使用C#和一些C來(lái)完成所有工作。(我選擇使用C來(lái)實(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)單起見(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é)。)特定用戶(或從技術(shù)角度講,具有特定密鑰)每次進(jìn)行身份驗(yàn)證嘗試時(shí),計(jì)數(shù)值都會(huì)增加。OTP解決方案的安全性依賴于永不重復(fù)使用的計(jì)數(shù)值;這一點(diǎn)由OTP服務(wù)器保證。實(shí)際使用時(shí),計(jì)數(shù)是64位無(wú)符號(hào)整數(shù).如前所述,另一種部署方法是使用與服務(wù)器之間的時(shí)間同步。密鑰哈希消息身份驗(yàn)證代碼(HMAC)是基于密鑰的一種加密哈希?;驌Q句話說(shuō),HMAC接受任意消息和密鑰,并將消息映射成固定長(zhǎng)度的摘要值(如20字節(jié)),從而確保只有具有相同密鑰的人才能從相同的消息生成相同的摘要值。HMAC-OTP的首個(gè)計(jì)算步驟是接受計(jì)數(shù)值,并將其編碼為HMAC計(jì)算的輸入消息。實(shí)際使用時(shí),消息是設(shè)為計(jì)數(shù)器值的8字節(jié)緩沖區(qū)。圖2描述了這一步驟以及接下來(lái)的兩個(gè)步驟。下一計(jì)算步驟是使用用戶密鑰計(jì)算上述消息的HMAC。請(qǐng)注意,我在該實(shí)現(xiàn)中對(duì)字節(jié)順序進(jìn)行了編址以確保它與RFC兼容。圖2一次性密碼流程(單擊該圖像獲得較大視圖)隨后,通過(guò)對(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)式電話兼容?。┦纠W(wǎng)站我的目標(biāo)是確保所設(shè)計(jì)的站點(diǎn)能正確地顯示用戶是否使用OTP實(shí)現(xiàn)成功登錄.為便于測(cè)試,此OTP解決方案包含一個(gè)示例網(wǎng)站。該網(wǎng)站的首頁(yè)是Default。htm,此登錄頁(yè)面用于向通過(guò)身份驗(yàn)證的用戶展示OTP模塊如何保護(hù)非頁(yè)面.其中還包含用于顯示當(dāng)前已通過(guò)身份驗(yàn)證的用戶名的Test.aspx文件,以及顯示Test。aspx頁(yè)面如何從er?qū)傩詸z索已通過(guò)身份驗(yàn)證的用戶名的Test.a(chǎn)spx.cs文件。該解決方案還包括一個(gè)web.config文件(其中包含對(duì)OtpModule的引用)以及引用了IISModule.dll文件的VisualStudio項(xiàng)目解決方案。IISHTTPOTP插件模塊是該網(wǎng)站的一個(gè)組件。該模塊與IIS交互,并將用戶重定向到可在其中輸入用戶名和OTP的Web窗體。當(dāng)用戶提交用戶名和OTP時(shí),該模塊會(huì)檢驗(yàn)輸入并將用戶重定向到相應(yīng)的成功或失敗頁(yè)面。該模塊還會(huì)將用戶的身份驗(yàn)證狀態(tài)與用戶會(huì)話關(guān)聯(lián)起來(lái).為實(shí)現(xiàn)可維護(hù)性和可支持性,我希望能夠?qū)υ撃K進(jìn)行管理,因此我使用C#來(lái)編寫該模塊.插件模塊是身份驗(yàn)證Web服務(wù)(稍后我將進(jìn)行介紹)的客戶端。OTP模塊實(shí)現(xiàn)了IHttpModule接口。實(shí)際上,該模塊非常簡(jiǎn)單,僅包括三個(gè)公共方法。第一個(gè)是Init,如下所示:復(fù)制代碼publicvoidInit(HttpApplicat(yī)ionapplication){application。BeginRequest+=newEventHandler(applicat(yī)ion_BeginRequest);}如您所見(jiàn),該模塊使用此方法來(lái)注冊(cè)BeginRequest處理程序application_BeginRequest。OTPBeginRequest處理程序的目的是確保所有HTTP請(qǐng)求均來(lái)自通過(guò)身份驗(yàn)證的用戶.具體實(shí)現(xiàn)方式為使用以下幾個(gè)幫助函數(shù):一個(gè)函數(shù)用于確定調(diào)用方是否已通過(guò)身份驗(yàn)證,還有幾個(gè)函數(shù)用于在調(diào)用方尚未通過(guò)身份驗(yàn)證時(shí)對(duì)其執(zhí)行身份驗(yàn)證.還有一點(diǎn)值得一提:在BeginRequest事件過(guò)程中截取請(qǐng)求的方式不會(huì)遵循應(yīng)用程序所使用的標(biāo)準(zhǔn)身份驗(yàn)證模式。但是,如果不希望其他模塊看到此請(qǐng)求(甚至是那些設(shè)計(jì)為在進(jìn)行身份驗(yàn)證之前截取請(qǐng)求的模塊),則建議使用此方法。IsAuthenticated幫助函數(shù)將確定請(qǐng)求是否指明需要一個(gè)已通過(guò)身份驗(yàn)證的用戶。實(shí)現(xiàn)方法是:使用System。Web命名空間中的HttpContext、HttpCookie和Security。FormsAuthenticationTicket類來(lái)檢查應(yīng)用程序上下文中是否包含正確加密的身份驗(yàn)證cookie。如果存在cookie并且能夠正確解密,則認(rèn)為調(diào)用方已通過(guò)身份驗(yàn)證。否則,存在以下兩種可能的狀態(tài):該請(qǐng)求是應(yīng)處理的OTP身份驗(yàn)證請(qǐng)求,或者該Web客戶端請(qǐng)求無(wú)效(未通過(guò)身份驗(yàn)證),這時(shí)會(huì)顯示登錄窗體.OTP模塊包括一個(gè)名為L(zhǎng)oginPage.htm的內(nèi)置登錄窗體。它由以下五個(gè)HTML元素組成:一個(gè)初始為空的錯(cuò)誤消息字段,一個(gè)用戶名字段、一個(gè)密碼字段、一個(gè)提交按鈕以及一個(gè)名為hdLoginForm的隱藏輸入字段。如果調(diào)用方已通過(guò)身份驗(yàn)證,則模塊無(wú)需執(zhí)行進(jìn)一步操作.繼續(xù)處理請(qǐng)求。在本演示中,將加載Default。htm頁(yè)面。如果調(diào)用方未通過(guò)身份驗(yàn)證,則會(huì)調(diào)用IsAuthenticat(yī)ionPost幫助函數(shù).它將檢查請(qǐng)求類型是否為POST,以及請(qǐng)求窗體是否包含hdLoginForm輸入字段。如果兩個(gè)條件都得到確認(rèn),則此方法將返回true.如果請(qǐng)求是身份驗(yàn)證請(qǐng)求,則調(diào)用TryAuthenticat(yī)e幫助函數(shù)。從請(qǐng)求上下文中檢索用戶名和OTP值,并將其傳遞給身份驗(yàn)證Web服務(wù)的VerifyOtpCode方法。如果確認(rèn)成功,則會(huì)將新的加密身份驗(yàn)證cookie附加到響應(yīng)中。然后,將該響應(yīng)重定向到默認(rèn)頁(yè)面(Default.htm)。要演示這一效果,可先保存用戶請(qǐng)求的原始頁(yè)面,并在身份驗(yàn)證成功之后將用戶重定向到該頁(yè)面。如果VerifyOtpCodeWeb服務(wù)調(diào)用失敗,請(qǐng)求將被重定向回登錄窗體(此時(shí)將顯示一個(gè)錯(cuò)誤消息),并且調(diào)用幫助函數(shù)ShowLoginForm。此幫助函數(shù)從模塊的資源部分加載登錄頁(yè)面、設(shè)置頁(yè)面中的錯(cuò)誤消息字符串(如果適用),并將登錄頁(yè)面設(shè)為對(duì)當(dāng)前請(qǐng)求的響應(yīng)。然后,它將請(qǐng)求標(biāo)記為已完成(無(wú)論請(qǐng)求的性質(zhì)如何都會(huì)完成這一步)。身份驗(yàn)證Web服務(wù)身份驗(yàn)證Web服務(wù)負(fù)責(zé)執(zhí)行實(shí)際的OTP身份驗(yàn)證,其方法是確定提供的OTP值是否表明命名用戶已擁有密鑰,。由于重用底層加密庫(kù)(此加密庫(kù)實(shí)現(xiàn)了在之前的有關(guān)測(cè)試OTP生成器客戶端的章節(jié)中所介紹的OTP計(jì)算),實(shí)現(xiàn)OTP身份驗(yàn)證Web服務(wù)將非常簡(jiǎn)單。該重用形式為對(duì)本機(jī)HmacOtpDll.dll的Generat(yī)eOTP導(dǎo)出的P/Invoke調(diào)用。Web服務(wù)提供一個(gè)Web方法VerifyOtpCode(在身份驗(yàn)證成功時(shí)它將返回true)。該方法首先加載與身份驗(yàn)證請(qǐng)求中指定的用戶名相對(duì)應(yīng)的SQLServer數(shù)據(jù)庫(kù)行.如果SQLServer無(wú)法找到匹配行,該方法將返回false。如果在SQLServer數(shù)據(jù)庫(kù)中找到相應(yīng)用戶名,該方法將把以下數(shù)據(jù)項(xiàng)傳給本機(jī)GenerateOTP:請(qǐng)求中指定的OTP值、用戶密鑰(從SQLServer中檢索得到)以及計(jì)數(shù)器值(也從SQLServer中檢索得到).Generat(yī)eOTP將使用連續(xù)的計(jì)數(shù)器值進(jìn)行反復(fù)嘗試,直到返回匹配的OTP值或者已檢查過(guò)1,000個(gè)連續(xù)的計(jì)數(shù)器值.盡管不太可能從上次成功身份驗(yàn)證后重復(fù)嘗試一千次,但它可能使用戶意外將客戶端計(jì)數(shù)器運(yùn)行至脫機(jī)!通過(guò)縮小此范圍,還可使攻擊者實(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ù)庫(kù).然而遺憾的是,這需要身份驗(yàn)證Web服務(wù)具有數(shù)據(jù)庫(kù)的寫入權(quán)限,并且如前所述,由于必須確保計(jì)數(shù)器值不發(fā)生重用,因此它對(duì)于OTP的安全性而言也至關(guān)重要。(為使一次性密碼唯一,必須保證它實(shí)際僅被使用一次。)具有簡(jiǎn)單架構(gòu)的SQLServer數(shù)據(jù)庫(kù)可用于存儲(chǔ)用戶名及對(duì)應(yīng)的OTP密鑰或種子值。還可擴(kuò)展該構(gòu)架以包含登錄信息(如使用OTP成功登錄和不成功登錄的次數(shù)和時(shí)間).該數(shù)據(jù)庫(kù)由Username、SecretCode和Counter列組成。有關(guān)每個(gè)元素的解釋,請(qǐng)參閱“身份驗(yàn)證Web服務(wù)”一節(jié)。示例代碼附帶的數(shù)據(jù)庫(kù)副本僅包含一個(gè)存儲(chǔ)用戶名“testuser"的行。完整的體系結(jié)構(gòu)圖3顯示了解決方案完成時(shí)的體系結(jié)構(gòu)。如圖所示,用戶啟動(dòng)客戶端應(yīng)用程序、生成OTP、然后導(dǎo)航至身份驗(yàn)證Web應(yīng)用程序,并將OTP粘貼到Web瀏覽器窗體中.當(dāng)OTP模塊檢測(cè)到請(qǐng)求尚未通過(guò)身份驗(yàn)證時(shí),它將生成窗體。當(dāng)用戶單擊“Submit”(提交)時(shí),Web瀏覽器窗體將把請(qǐng)求發(fā)送到服務(wù)器(在其中它將被OTP模塊再次截?。?。接下來(lái),OTP模塊調(diào)用OTPWeb服務(wù)來(lái)檢驗(yàn)用戶的身份驗(yàn)證數(shù)據(jù)。最后,如果成功,Web服務(wù)器將針對(duì)請(qǐng)求頁(yè)面(此頁(yè)面可為任意類型:HTM、PHP等)調(diào)用處理程序。圖3詳細(xì)的OTP解決方案體系結(jié)構(gòu)(單擊該圖像獲得較大視圖)運(yùn)行代碼示例要運(yùn)行代碼示例,需要具有IIS7.0的WindowsVista?或WindowsServer?2008(并且針對(duì)WindowsServer2008啟用“應(yīng)用程序服務(wù)器”角色)、VisualStudio2005、SQLServer2005或SQLServerExpress以及OTP示例代碼。要實(shí)驗(yàn)演示,建議使用WindowsServer2008和SQLServerExpress(因?yàn)槲揖褪褂玫乃鼈儯?。在下面的說(shuō)明中,假設(shè)OTP示例代碼解決方案文件位于C:\Test\OTP\Otp。sln。要準(zhǔn)備環(huán)境,使用“IIS管理器”或通過(guò)編輯web.config文件來(lái)安裝IIS模塊。向IIS_IUSRS帳戶或配置為自定義應(yīng)用程序池標(biāo)識(shí)的帳戶授予對(duì)C:\Test\OTP\webservice\app_data的讀寫權(quán)限.然后,為OtpTest和OtpService添加網(wǎng)站。使用web.config文件注冊(cè)IIS模塊(此步驟已在示例中完成—請(qǐng)參閱TestWebsite\Web.Config)需要以下配置標(biāo)記:復(fù)制代碼<system.webServer>modules>〈addname=”OtpModule”type=”O(jiān)tpModule”/></modules〉</system.webServer〉還應(yīng)將模塊DLL添加到bin文件夾或全局程序集緩存(GAC)中。要向GAC注冊(cè)OTP模塊,請(qǐng)使用如下所示命令:復(fù)制代碼gacutil.exe/iiis7module。dll要使用“IIS管理器”,請(qǐng)打開(kāi)此管理器并在控制臺(tái)樹(shù)中單擊計(jì)算機(jī)名稱。在中間窗格中,雙擊“Modules"(模塊)圖標(biāo),然后單擊操作窗格中的“AddManagedModule”(添加托管模塊)。接下來(lái),從下拉列表框中選擇OtpModule.如果將DLL放入GAC中并使用“IIS管理器”來(lái)添加模塊,則可能需要重啟IIS才能刷新模塊列表.為正確增加SQLServerExpress中的嘗試次數(shù)值,NETWORKSERVICE帳戶需要具有對(duì)C:\Test\Otp\WebService\App_Data庫(kù)的讀寫權(quán)限。此對(duì)象所需權(quán)限是讀取和執(zhí)行、列出文件夾內(nèi)容、讀取以及寫入(如圖4所示)。圖4所需的對(duì)App_Dat(yī)a目錄的權(quán)限還必須在IIS中為測(cè)試網(wǎng)站設(shè)置一個(gè)網(wǎng)站.為此,打開(kāi)“IIS管理器”控制臺(tái),并在其控制臺(tái)樹(shù)中,展開(kāi)具有您的計(jì)算機(jī)名稱的節(jié)點(diǎn),右鍵單擊“Sites”(網(wǎng)站)并單擊“AddWebSite"(添加網(wǎng)站).將以下設(shè)置用于新網(wǎng)站,然后單擊“OK”(確定)(圖5顯示了這些設(shè)置):圖5OtpTest網(wǎng)站設(shè)置(單擊該圖像獲得較大視圖)“Sitename”(網(wǎng)站名稱):OtpTest“Physicalpath”(物理路徑):C:\test\Otp\TestWebsite“Port”(端口):8000還必須為Web服務(wù)創(chuàng)建一個(gè)網(wǎng)站。將以下設(shè)置用于該網(wǎng)站:網(wǎng)站名稱為OtpService,物理路徑為C:\Test\Otp\WebService,并且端口為8080。接下來(lái),在VisualStudio中打開(kāi)Otp.sln解決方案,在解決方案資源管理器中展開(kāi)IIS7Module,展開(kāi)“WebReferences”(Web引用)、右鍵單擊OtpService,單擊“Properties”(屬性)并確認(rèn)“WebReferenceURL"(Web引用URL)已設(shè)為。在“Build"(生成)菜單中,單擊“BuildSolution”(生成解決方案)并確認(rèn)沒(méi)有發(fā)生生成錯(cuò)誤。現(xiàn)在,應(yīng)執(zhí)行測(cè)試來(lái)確保已適當(dāng)注冊(cè)并正確加載OTP模塊.為此,導(dǎo)航到并確認(rèn)出現(xiàn)圖6所示的登錄頁(yè)面.要測(cè)試實(shí)現(xiàn),鍵入測(cè)試用戶名testuser。圖6測(cè)試網(wǎng)站的首頁(yè)要獲得OTP代碼文本框的值,以管理員身份打開(kāi)命令提示符窗口并導(dǎo)航到OTP客戶端程序的生成目錄(C:\Test\Otp\otpclient\bin\debug)。運(yùn)行OtpClient.exe獲得下一OTP值。結(jié)果應(yīng)如圖7所示。圖7運(yùn)行OtpClient.exe以獲得OTP值(單擊該圖像獲得較大視圖)將OTP值鍵入OTP代碼文本框,然后單擊“Submit”(提交).圖8在頁(yè)面中顯示了示例OTP代碼。如果身份驗(yàn)證成功,您會(huì)轉(zhuǎn)到Default.htm頁(yè)面。圖8具有示例OTP值的測(cè)試頁(yè)面單擊默認(rèn)頁(yè)面上的Text。aspx鏈接進(jìn)入演示頁(yè)面,該頁(yè)面將顯示當(dāng)前通過(guò)身份驗(yàn)證的用戶(如果有)的名稱。如果身份驗(yàn)證憑據(jù)不正確,則會(huì)出現(xiàn)圖9所示的頁(yè)面。圖9身份驗(yàn)證不成功部署注意事項(xiàng)如果要在實(shí)際環(huán)境中部署此示例解決方案,有許多需要考慮的事項(xiàng)。實(shí)際部署將用戶密鑰/種子存儲(chǔ)在防篡改的設(shè)備中(如硬件令牌)。建議將解決方案修改為在多次連續(xù)失敗的身份驗(yàn)證嘗試后鎖定帳戶??赏ㄟ^(guò)將多個(gè)SQLServer列和一個(gè)功能添加到Web服務(wù)來(lái)實(shí)現(xiàn)此功能。如果互操作性是一個(gè)考慮因素,建議針對(duì)底層HMAC代碼執(zhí)行互操作性測(cè)試.還應(yīng)意識(shí)到MD5哈希算

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論