[转]asp.net权限认证:摘要认证(digest authentication)
本文轉自:http://www.cnblogs.com/lanxiaoke/p/6357501.html
?
摘要認證簡單介紹
摘要認證是對基本認證的改進,即是用摘要代替賬戶密碼,從而防止明文傳輸中賬戶密碼的泄露
之前對摘要認證也不是很熟悉,還得感謝圓中的?parry?貢獻的博文:ASP.NET Web API(三):安全驗證之使用摘要認證(digest authentication)
我是覺得真心不錯,讓我少走很多彎路。這篇文章主要是對上邊引用文章的講解,老司機可以略過。
老規矩,上摘認證的工作流程圖
?
看圖大概可以知道摘要認證的步驟
客戶端請求資源 api/employees
?
?
后臺認證邏輯,返回401
數據提交后,服務端檢查Headers中的Authorization信息,null值就返回401,提示需要認證,認證格式為Digest,同時返回的還有realm、nonce、qop這幾個參數值
1、realm的值可以隨意;nonce為隨機數,一般是GUID格式的字符串,需要后臺返回;qop的之分布有三種:沒有定義(即空值)、auth、auth-int
2、后臺處理過程:
3、返回的報文頭信息是這樣:
HTTP /1.1 401 Unauthorized
WWW-Authenticate:Digest
realm= ”RealmOfBadri”
qop=“auth”
nonce=”75d1c31e6d3b28f100edac595a53cf96”
?
客戶端授權開始
接受到反饋后,知道資源需要授權才能訪問;于是開始輸入username、password
?
?這里有個地方需要注意,項目默認是賬戶名密碼一致才能驗證通過的,看代碼
?
點擊登錄,查看后臺得到的數據
?看圖可以知道
?realm、qop、nonce是服務器上次生成的值
?username是我們輸入的頁面
?uri是客戶端要請求的地址
?nc、cnonce是客戶端自動生成的值
?response是最終要傳送的摘要信息,也是客戶端生成的
?
?是不是發現了什么不對?密碼去哪了?
?其實這就是摘要認證的精髓了,不傳送明文密碼,只傳送摘要信息
?
?有同學可能要問,不傳輸密碼,那服務端如何知道輸入的用戶名稱就是屬于當前操作用戶呢
?那接下來就得摘要信息出場了,我們來看看如何生成摘要信息
?對(username:realm:password)進行HASH運算,得到HA1
?對(方法名:請求的路徑)進行HASH運算,即(GET:http://localhost:32934/api/employees),得到HA2
?最終得到摘要信息response =?對(HA1:nonce:nc:cnonce:qop:HA2)進行HASH運算
?
后臺參數解析
分析完前端,我們看看服務端如何解析這些參數的
其實服務端的工作就是根據客戶端端傳送過來的realm、qop、nonce、username、uri、nc、cnonce進行HASH運行得到新的摘要信息response2
如何用response2與客戶端生成的response進行比較,如果一致,就說明認證通過;不一致,就繼續返回401
?
主要就是這一段代碼處理
?
因為對于服務端來說HA1:nonce:nc:cnonce:qop:HA2中除了HA1中的password沒有從客戶端得到,其他所有所有參數都得到了
所以摘要認證的核心就是:
對于客戶端:我知道用戶名稱和密碼和(一些認證的約束,即realm、qop、nonce之類),從而得到加密信息response
對于服務端:我知道用戶名稱和(一些認證的約束,即realm、qop、nonce之類),然后根據用戶名稱去數據庫找到用戶的密碼,從而得到加密信息response2
最后比較response:response2,如果客戶端輸入的密碼和數據庫根據用戶名稱查到的密碼一致,就肯定能認證通過。
?
?
最后需要提醒大家的地方,這個用戶密碼可以跟賬號登錄密碼不一致,可以分成2個字段;你可以理解為:用戶名+認證密碼
因為認證密碼即使是加密的也必須可逆,不然后臺匹配不了
?
摘要認證測試
web端的摘要認證就是上邊那樣。
但是很多情況客戶端不是通過瀏覽器訪問的資源,比如通過一段程序去訪問 api/employees,
這時候并不存在像瀏覽器彈出認證窗口的交互動作,這時候怎么搞?
其實也是很簡單的,我們新建控制臺項目 DigestTest
?
然后通過WebClient對象去訪問資源文件
最后運行程序,就可以看到返回的數據
?
?提示未經授權,因為我們的認證賬戶是錯的,改成1111:1111,再試試
?
OK,完全沒有問題
?
好了,搞定收工!
?
asp.net權限認證系列
?
分類:?權限認證轉載于:https://www.cnblogs.com/freeliver54/p/6971286.html
總結
以上是生活随笔為你收集整理的[转]asp.net权限认证:摘要认证(digest authentication)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openjudge 菲波那契数列 275
- 下一篇: 27. 二叉树的镜像