天天看點

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

WebAPI主要開放資料給手機APP,其他需要得知資料的系統,或者軟體應用,是以移動端與系統的資料源往往是相通的。

Web 使用者的身份驗證,及頁面操作權限驗證是B/S系統的基礎功能,一個功能複雜的業務應用系統,通過角色授權來控制使用者通路

本文通過Basic 方式進行基礎認證Mvc的Controller基類及Action的權限驗證來實作Web系統登入,Mvc前端權限校驗以及WebApi服務端的通路校驗功能,本文主要作為本人備忘使用,如能給予人幫助,深感榮幸,歡迎讨論和指正,下面梳理一下驗證的流程

VS2015+無資料庫(模拟資料)

WebApi簡單使用

使用者校驗

同域通路

跨域通路

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

1.WebApi服務端接收通路請求,需要做安全驗證處理,驗證處理步驟具體如下:

1) 如果是合法的Http請求,在Http請求頭中會有使用者身份的票據資訊(如果是跨域那麼無法在請求頭中添加票據),服務端會讀取票據資訊,并校驗票據資訊是否完整有效,如果滿足校驗要求,則進行業務資料的處理,并傳回給請求發起方;

2) 如果沒有票據資訊,或者票據資訊不是合法的,則傳回“未授權的通路”異常消息給前端,由前端處理此異常。

2. 登入及權限驗證流程

1) 使用者打開浏覽器,并在位址欄中輸入頁面請求位址,送出;

2) 浏覽器解析Http請求,發送到Web伺服器;Web伺服器驗證使用者請求,首先判斷是否有登入的票據資訊;

3) 使用者沒有登入票據資訊,則跳轉到登入頁面;

4) 使用者輸入使用者名和密碼資訊;

5) 浏覽器送出登入表單資料給Web伺服器;

6) Web服務需要驗證使用者名和密碼是否比對,發送api請求給api伺服器;

7) api使用者賬戶服務根據使用者名,讀取存儲在資料庫中的使用者資料,判斷密碼是否比對;

7.1)如果使用者名和密碼不比對,則提示密碼錯誤等資訊,然該使用者重新填寫登入資料;

7.2)如果驗證通過,則儲存使用者票據資訊;

8)

3.如果使用者有登入票據資訊,則跳轉到使用者請求的頁面;

9) 驗證使用者對目前要操作的頁面或頁面元素是否有權限操作,首先需要發起api服務請求,擷取使用者的權限資料;

10). api使用者權限服務根據使用者名,查找該使用者的角色資訊,并計算使用者權限清單,封裝為Json資料并傳回;

11). 當使用者有權限操作頁面或頁面元素時,跳轉到頁面,并由頁面Controller送出業務資料處理請求到api伺服器; 如果使用者沒有權限通路該頁面或頁面元素時,則顯示“未授權的通路操作”,跳轉到系統異常處理頁面。

12). api業務服務處理業務邏輯,并将結果以Json 資料傳回;

13). 傳回渲染後的頁面給浏覽器前端,并呈現業務資料到頁面;

14). 使用者填寫業務資料,或者查找業務資料;

15). 當填寫或查找完業務資料後,使用者送出表單資料;

16). 浏覽器腳本送出get,post等請求給web伺服器,由web伺服器再次解析請求操作,重複步驟2的後續流程;

17). 當api伺服器驗證使用者身份是,沒有可信使用者票據,系統提示“未授權的通路操作”,跳轉到系統異常處理頁面。

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)
ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)
ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

登入失敗:傳回錯誤提示

登入成功:傳回Token并儲存Token到 Session

可見代碼中包含Session的操作,但是Webapi預設是不支援Session的,是以我們需要在Global加載時候添加對Session的支援,不然運作調用會直接異常

輸入http://localhost:13743/help可以看到,我們的接口已經在webapi help列出,并可以檢視調用方式(VS2012可能沒有自動生成WebApi Help,需要從Nuget包獲得)

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

在Home的Index.cshtm添加登入代碼

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)
ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

浏覽器中運作/Home/Index

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

成功取得Token

同域名通路,一般系統任務這是安全的,可以信任的,是以不需要做過多的考慮,這是我們來看看跨域的情況

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

把8866的Home/index登入界面代碼複制到4455下的Home/index,修改通路URL

 url: "http://localhost:8866/api/Account/Login"

這樣才用讓4455去通路6655的API,不然絕對報404

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)
ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

通路成功,但是沒有傳回值,jquery顯示jquery的jsonp格式有callback傳回

設定Ajax的dataType 為Jsonp

dataType:"jsonp",

再次運作,帶回來的值正常

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

但是結果并沒有彈出token并提示一個js錯誤

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

到這裡真是一波三折

因為傳回的值是:{"Id":"123"}

然而Jsonp需要你傳回:jQuery*([{"Id":123"}])

注冊一個全局屬性

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)
ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

再次運作:

ASP.NET MVC5+EF6+EasyUI 背景管理系統(65)-MVC WebApi 使用者驗證 (1)

本節結束,下節再學習怎麼利用Token進行通路獲得權限

本文轉自ymnets部落格園部落格,原文連結:http://www.cnblogs.com/ymnets/p/5698721.html,如需轉載請自行聯系原作者