[轉]asp.net許可權認證:HTTP基本認證(http basic)

來源:互聯網
上載者:User

標籤:arp   地方   建立   iis   user   amp   允許   ase   values   

本文轉自:http://www.cnblogs.com/lanxiaoke/p/6353955.html

HTTP基本認證

HTTP基本認證,即http basic認證。

用戶端向服務端發送一個攜帶基於使用者名稱/密碼的認證憑證的請求。認證憑證的格式為“{UserName}:{Password}”,並採用Base64編碼,經過編碼的認證憑證被存放在請求前序Authorization中,Authorization前序值類似:Basic MTIzNDU2OjEyMzQ1Ng==。服務端接收到請求之後,從Authorization前序中提取憑證並對其進行解碼,最後採用提取的使用者名稱和密碼實施認證。認證成功之後,該請求會得到正常的處理,並回複一個正常的響應。

 

 

註:其實basic 的參數傳輸方式還是一種不錯的資料轉送加密方式哦,多採用這種前後端資料互動方式的項目頗多,只是一般與https一起使用,這個後邊再講。

 

建立一個demo

 

demo很簡單,建立一個Attribute:BasicAuthorizeAttribute用於實現basic認證

12345678910111213141516171819202122232425262728 public class BasicAuthorizeAttribute : AuthorizeAttribute{    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)    {        if (actionContext.Request.Method == HttpMethod.Options) return true;         if (actionContext.Request.Headers.Authorization != null && actionContext.Request.Headers.Authorization.Parameter != null)        {            var authorizationParameter = Convert.FromBase64String(actionContext.Request.Headers.Authorization.Parameter);            var basicArray = Encoding.Default.GetString(authorizationParameter).Split(‘:‘);            var userid = basicArray[0];            var password = basicArray[1];             if (userid == "123456" && password == "123456")            {                return true;            }        }        return false;    }     protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)    {        var responseMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized);        responseMessage.Headers.Add("WWW-Authenticate""Basic");        throw new HttpResponseException(responseMessage);    }}
1  

1、Convert.FromBase64String這句是解密經過BASE64加密的報文中的Authorization值,然後得到帶格式的使用者登入資料:{UserName}:{Password}
得到使用者userid就可以自訂驗證使用者合法性了

2、HandleUnauthorizedRequest重寫這個方法是為了伺服器返回basic認證的格式,即前台彈出的那個登入框,
而BASE64加密及報文傳輸這不能算是basic認證特有,我們的表單資料轉送都可以用這種方式

 

用法也很簡單,在ApiController或方法上邊加屬性即可,如:

12345 [BasicAuthorize]public IEnumerable<string> Get(){    return new string[] { "value1""value2" };}

  

好了,我們來看看允許效果

如期顯示,輸入使用者賬戶後即可看到訪問的資源

 

 

 BASE64的加密強度非常低,一般是不會直接用這種方式加密傳輸資料的

 因為base64加密儲存在用戶端報文中,而且解密非常簡單,幾乎就相當於明文傳輸,沒有任何自訂key一起加密,所有一般不推薦 

 如果一定要使用的話,建議使用 base64 + https,下面我們在https環境運行程式。

 

 1、IIS Express屬性,啟用SSL

 

 開發環境vs啟用SSL就是那麼簡單,呵呵。。

 

 2、再次運行網站,顯示正常

 

 

 

 3、點擊確定

 

why? 很疑惑是不是?? 不是說https是加密傳輸的嗎,但是Authorization資訊貌似還是明文傳輸。。

呵呵,這個問題我也困惑了好久。

 

4、我們先看看http與https不同的地方

多了一層SSL,這個SSL層不是體現在網頁端,所以我們看到http與https運行後,訪問/api/values產生的html編碼都是一樣的

不一樣的地方在於https的傳輸方式,傳輸是加密的

除此之外,內容在用戶端和服務端都是明文顯示的哦,大家要注意了。

 

5、對於https傳輸加密的研究,已經超出本章的範圍,據我網上瞭解,https在一定條件下也是可以被抓包的。

但是是加密之後的資料,沒有私匙抓包也沒有用處。所有可以安全使用

 

asp.net許可權認證系列
  1. asp.net許可權認證:Forms認證
  2. asp.net許可權認證:HTTP基本認證(http basic)
  3. asp.net許可權認證:Windows認證
  4. asp.net許可權認證:摘要認證(digest authentication)
  5. asp.net許可權認證:OWIN實現OAuth 2.0 之用戶端模式(Client Credential)
  6. asp.net許可權認證:OWIN實現OAuth 2.0 之Cipher 模式(Resource Owner Password Credential)
  7. asp.net許可權認證:OWIN實現OAuth 2.0 之授權碼模式(Authorization Code)
  8. asp.net許可權認證:OWIN實現OAuth 2.0 之簡化模式(Implicit)
 分類: 許可權認證

 

[轉]asp.net許可權認證:HTTP基本認證(http basic)

聯繫我們

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