c WebApi之身份驗證 Basic基礎認證

2021-09-07 19:20:20 字數 2128 閱讀 9515

為什麼需要身份認證

身份認證是為了提高介面訪問的安全性,如果沒有身份驗證,那麼任何匿名使用者只要知道伺服器的url,就可以隨意訪問伺服器,從而訪問或者運算元據庫,這會是很恐怖的事。

什麼是basic基礎認證

basic基礎認證是一種簡單的使用者名稱、密碼驗證過程,它的主要原理是加密使用者資訊,生成票據,每次需要身份驗證時將票據帶過來驗證,實現步驟為:

使用者登入,登入成功後將生成的票據返回到前端;

前端登入成功後,收到票據資訊,跳轉到主頁面,並且吧票據一併帶過去,存入session;

在需要請求頁面,把票據資訊加入到請求的head裡面,將票據資訊隨著請求一起傳送到服務端去;

在webapi服務裡面定義乙個類,繼承authorizeattribute類,然後重寫父類的onauthorization方法,在onauthorization方法裡面取到當前http請求的head,從head裡面取到我們前端傳過來的票據資訊。解密票據資訊,從解密的資訊裡面得到使用者名稱和密碼,然後驗證使用者名稱和密碼是否正確。如果正確,表示驗證通過,否則返回自定義錯誤資訊。

basic基礎認證的**示例:

首先新建兩個專案:web測試站點、webapi站點 

1.1、在web測試站點,新增乙個登入頁面:

使用者名稱:"text" id="txt_username" />div> 密 碼:"password" id="txt_password" />div> "button" value="登入" id="btn_login" class="btn-default" />div> div>

登入請求的ajax:

$(function () , success: function (data, status)  alert("登入成功"); //登入成功之後將使用者名稱和使用者票據帶到主介面 window.location = "/home/index?username=" + data.username + "&ticket=" + data.ticket; } }, error: function (e) , complete: function ()  }); }); });

1.2、對應的webapi站點的,登入的api介面:

/// /// 使用者登入 /// 

///

///

/// [httpget] public object login(string struser, string strpwd) ; } formsauthenticationticket ticket = new formsauthenticationticket(0, struser, datetime.now, datetime.now.addhours(1), true, string.format("&", struser, strpwd), formsauthentication.formscookiepath); //返回登入結果、使用者資訊、使用者驗證票據資訊 var ouser = new userinfo ; //將身份資訊儲存在session中,驗證當前請求是否是有效請求 httpcontext.current.session[struser] = ouser; return ouser; } //校驗使用者名稱密碼(正式環境中應該是資料庫校驗) private bool validateuser(string struser, string strpwd) else }

自定義userinfo實體:

如果是兩個站點的話可能會出現跨域問題,解決跨域訪問問題可以參考: 

2.1、在web測試站點新增乙個用於跳轉測試的index主頁面

indextitle>

Forms 身份驗證

配置應用程式使用 forms 身份驗證 如果應用程式的根目錄中有 web.config 檔案,請開啟該檔案。複製 在system.web元素中,建立乙個authentication元素,並將它的mode屬性設定為 forms,如下面的示例所示 複製 在authentication元素中,建立乙個fo...

WebService身份驗證

web service身份驗證解決方案一 通過通過soap header身份驗證。1.我們實現乙個用於身份驗證的類,檔名mysoapheader.cs mysoapheader類繼承自system.web.services.protocols.soapheader。且定義了兩個成員變數,userna...

WebServices身份驗證

最近遇到乙個問題,暴露在網路上的web service如何做身份驗證,而不被其他人說是用。mysoapheader.cs類 using system using system.collections.generic using system.linq using system.web namespa...