asp.net許可權認證:摘要認證(digest authentication)

來源:互聯網
上載者:User

標籤:核心   改進   訪問   local   流程圖   博文   tail   報文頭   作用   

 

asp.net許可權認證系列

asp.net許可權認證:Forms認證

asp.net許可權認證:HTTP基本認證(http basic)

asp.net許可權認證:Windows認證

asp.net許可權認證:摘要認證(digest authentication)

 

一、摘要認證由來

摘要認證是對基本認證的改進,即是用摘要代替賬戶密碼,從而防止明文傳輸中賬戶密碼的泄露

之前對摘要認證也不是很熟悉,還得感謝圓中的 parry 貢獻的博文:ASP.NET Web API(三):安全驗證之使用摘要認證(digest authentication)

我是覺得真心不錯,讓我少走很多彎路。這篇文章主要是對上邊引用文章的講解,老司機可以略過。

老規矩,上摘認證的工作流程圖

 

看圖大概可以知道摘要認證的步驟

1、用戶端請求資源 api/employees,項目中即是點擊details按鈕

 

2、資料提交後,服務端檢查Headers中的Authorization資訊,null值就返回401,提示需要認證,認證格式為Digest,同時返回的還有realm、nonce、qop這幾個參數值

2.1、realm的值可以隨意;nonce為隨機數,一般是GUID格式的字串,需要後台返回;qop的之分布有三種:沒有定義(即空值)、auth、auth-int

2.2、幕後處理過程:

2.3、返回的報文頭資訊是這樣:

HTTP /1.1 401 Unauthorized
WWW-Authenticate:Digest
realm= ”RealmOfBadri”
qop=“auth”
nonce=”75d1c31e6d3b28f100edac595a53cf96”

 

3、用戶端接受到反饋後,知道資源需要授權才能訪問;於是開始輸入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運算

 

4、分析完前端,我們看看服務端如何解析這些參數的

其實服務端的工作就是根據用戶端端傳送過來的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個欄位;你可以理解為:使用者名稱+認證密碼

因為認證密碼即使是加密的也必須可逆,不然後台匹配不了

 

好了,收工!

 

asp.net許可權認證:摘要認證(digest authentication)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.