Windows驗證下Postman連線測試的過程。
公司中開發的Web Api需要一個驗證機制來防止未授權的存取,我選擇使用Windows驗證來快速實作這段,
實作的方式很簡單,只要在程式碼中加入相關的Attribute,並且在web.config中把authentication mode改成windows,最後把Windows驗證啟用即可。
不過這樣實作完成後,程式的測試都OK,但是就是不能在Postman上測試。
詢問同事後,同事給了我一個連結,從中想到一些事,這個連結中描述如何實作一個Basic Authentication的Web Api,
http://www.asp.net/web-api/overview/security/basic-authentication
從這邊想到一件事,為什麼我們寫ASP.NET使用Windows驗證都不用做這些事,
為此,開了Fiddler錄了Windows驗證的過程。
首先,看到了401,也就是當第一次連線時,並沒有驗證使用者,所以會回傳401要求驗證。
這時候回傳的header中會提到可以通過的驗證類別。
最後以可行的驗證模式進行,完成驗證,我終於搞清楚驗證是怎麼回事了,原來所有的事情都會在Header出現...
回頭來看,Postman支援的驗證模式有若干個,但是就是找不到NTLM以及Negotiate。
我注意到了其中的Basic Auth,因為IIS中記得有這樣的字眼,
錄了一下啟用基本驗證的行為,和Postman的Basic Auth比對發現行為一樣,
因此得到一個結論,如果使用基本驗證的話,就可以讓Postman吃Windows驗證,但是為什麼我的程式會出錯?
我的程式是跑在IISExpress上,所以我打開.vs\Config\applicationhost.config觀察
原來在專案設定上的windows驗證並不是基本驗證…
最後加上啟用基本驗證,Postman就可以測試了。