ASP.NET Web API教程(六) 安全與身份認證

來源:互聯網
上載者:User

  在實際的項目應用中,很多時候都需要保證資料的安全和可靠,如何來保證資料的安全呢?做法有很多,最常見的就是進行身分識別驗證。驗證通過,根據驗證過的身份給與對應存取權限。同在Web Api中如何?身份認證呢?接下來的內容就詳細的分享 Web API身份認證。

 

首先擴充自訂身分識別驗證
添加類 CustomAuthorizeAttribute.cs
該類繼承自System.Web.Http.AuthorizeAttribute(身份認證類)通過重寫其身份認證核心方法來達到 web API 身份認證的效果。
完整代碼:

public class CustomAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
    {
        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上,就不要寫在類上了。

接下來編寫登入方法

public ActionResult Login()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Login(FormCollection fol)
        {
            ///此處為了示範簡化登入過程
            ///可以在此處擴充驗證使用者名稱或者密碼是否正確
            System.Web.Security.FormsAuthentication.SetAuthCookie(fol["username"], false);
            return Redirect("/HTMLPage5.htm");
        }

有了背景方法,就剩下最後的前段頁面了
通過在Login的方法中右鍵可以快速產生頁面(vs給我們帶來的提高效率的工具,就不多做介紹了)

 

 

在產生的Login.cshtml中編寫以下登入代碼

@using (Html.BeginForm())
{
    <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認證

<authentication mode="Forms">
      <forms loginUrl="~/home/Login" timeout="2880" />
    </authentication>

第二個就是修改HTMLPage5.html的js(HTMLPage5.html可以直接複製HTMLPage4.html)
將這段擷取資料的代碼修改為帶驗證身份進行跳轉的
原JS

$.get('/api/userInfo', function (data) {
            // 從API中
            // 得到返回的資料,更新 Knockout 模型並且綁定到頁面UI模板中                         
            viewModel.userinfos(data);
        });

修改後的js

$.ajax({
            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

 
達到了身份認證的要求
測試第三步 輸入使用者名稱密碼試試功能是否能用?
答案是肯定的.
 

 

本篇內容來源碼下載:/Files/risk/web api 6/MvcApplication1.rar

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.