在實際的項目應用中,很多時候都需要保證數據的安全和可靠,如何來保證數據的安全呢?做法有很多,最常見的就是進行身份驗證。驗證通過,根據驗證過的身份給與對應訪問權限。同在Web Api中如何實現身份認證呢?接下來的內容就詳細的分享 Web API身份認證。
首先擴展自定義身份驗證
添加類 CustomAuthorizeAttribute.cs
該類繼承自System.Web.Http.AuthorizeAttribute(身份認證類)通過重寫其身份認證核心方法來達到 web API 身份認證的效果。
完整代碼:
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
// 判斷用戶是否登錄
if(!HttpContext.Current.User.Identity.IsAuthenticated)
HandleUnauthorizedRequest(actionContext);
}
protected override void HandleUnauthorizedRequest(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var challengeMessage = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
challengeMessage.Headers.Add( " WWW-Authenticate ", " Basic ");
throw new System.Web.Http.HttpResponseException(challengeMessage);
}
}
增加身份認證(必須登錄后才能進行查詢等操作)在Controller上加上屬性,可以直接通過VS快捷鍵感應出來
完整代碼
PS:寫在controller類上是表示這個controller的每個action都受身份認證,如果想為某一個action制定 可以直接寫在action上,就不要寫在類上了。
接下來編寫登錄方法
{
return View();
}
[HttpPost]
public ActionResult Login(FormCollection fol)
{
/// 此處為了演示簡化登錄過程
/// 可以在此處擴展驗證用戶名或者密碼是否正確
System.Web.Security.FormsAuthentication.SetAuthCookie(fol[ " username "], false);
return Redirect( " /HTMLPage5.htm ");
}
有了后台的方法,就剩下最后的前段頁面了
通過在Login的方法中右鍵可以快速生成頁面(vs給我們帶來的提高效率的工具,就不多做介紹了)
在生成的Login.cshtml中編寫以下登錄代碼
{
<fieldset>
<label>賬號:</label><input type= " text " name= " username " /><br />
<label>密碼:</label><input type= " text " name= " password " /><br />
<input type= " submit " value= " 登錄 " />
</fieldset>
}
這個時候還需要有兩個小地方做配置.
第一個就是web.config 配置form認證
< forms loginUrl ="~/home/Login" timeout ="2880" />
</ authentication >
第二個就是修改HTMLPage5.html的js(HTMLPage5.html可以直接復制HTMLPage4.html)
將這段獲取數據的代碼修改為帶驗證身份進行跳轉的
原JS
// 從API中
// 得到返回的數據,更新 Knockout 模型並且綁定到頁面UI模板中
viewModel.userinfos(data);
});
修改后的js
url: '/api/userinfo',
type: 'GET',
contentType: 'application/json; charset=utf-8',
statusCode: {
200 /*Created*/: function (data) {
viewModel.userinfos(data)
}, 401: function (jqXHR, textStatus, errorThrown) {
window.location.href = '/home/login';
}
}
});
Ok 到此,代碼就已近編寫完成了,來進行測試
測試第一步直接訪問 /api/userinfo
測試第二步 訪問HTMLPage5.html
達到了身份認證的要求
測試第三步 輸入用戶名密碼試試功能是否能用?
答案是肯定的.
