WebAPI學習筆記(1)實現Basic Auth基本授權驗證


1、Http基本認證只需要添加新的認證過濾屬性。該屬性類繼承自 System.Web.Http.AuthorizeAttribute,在 IsAuthorized(...)方法中讀取Http 頭部Authorization字段及其值,進行自定義驗證。

 1 public class HttpBasicAuthAttribute : System.Web.Http.AuthorizeAttribute
 2     {
 3         public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
 4         {
 5             //從http請求的頭里面獲取身份驗證信息,驗證是否是請求發起方的ticket
 6             var authorization = actionContext.Request.Headers.Authorization;
 7             if ((authorization != null) && (authorization.Parameter != null))
 8             {
 9                 //解密用戶ticket,並校驗用戶名密碼是否匹配
10                 var encryptTicket = authorization.Parameter;
11                 if (ValidateTicket(encryptTicket))
12                 {
13                     base.IsAuthorized(actionContext);
14                 }
15                 else
16                 {
17                     HandleUnauthorizedRequest(actionContext);
18                 }
19             }
20             //如果取不到身份驗證信息,則返回未驗證401
21             else
22             {
23                 HandleUnauthorizedRequest(actionContext);
24             }
25         }
26 
27         //校驗用戶名密碼(正式環境中應該是數據庫校驗)
28         private bool ValidateTicket(string encryptTicket)
29         {
30             //解密Ticket
31             string strTicket = System.Text.Encoding.Default.GetString(Convert.FromBase64String(encryptTicket));
32 
33             //從Ticket里面獲取用戶名和密碼
34             var index = strTicket.IndexOf(":");
35             string strUser = strTicket.Substring(0, index);
36             string strPwd = strTicket.Substring(index + 1);
37 
38             if (strUser == "admin" && strPwd == "123456")
39             {
40                 return true;
41             }
42             else
43             {
44                 return false;
45             }
46         }
47     }

2、在需要驗證的具體Controller類或封裝的基類中添加HttpBasicAuthAttribute類屬性。

 1 [HttpBasicAuth]
 2 public class BaseController : ApiController
 3 {
 4         private string _adminUserToken = "";
 5 
 6         /// <summary>
 7         /// Admin User Token
 8         /// </summary>
 9         public string AdminUserToken
10         {
11             get { return _adminUserToken; }
12             set { _adminUserToken = value; }
13         }
14 }

3、這樣就完成了服務器端的設置。

4、用Postman調用:

5、Asp.net調用:

 1 string Username = "admin";
 2 string Password = "123456";
 3 using (HttpClient client = new HttpClient())
 4 {
 5     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Username}:{Password}")));
 6 
 7     HttpContent httpContent = new StringContent("", Encoding.UTF8);
 8     httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
 9     Uri address = new Uri("https://xxx/api/issues");
10 
11     var response = client.PostAsync(address, httpContent).Result.Content.ReadAsStringAsync().Result;//返回值
12 }

6、返回結果:

 

【原文出處】http://www.51aras.com/?id=39

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM