文章目錄
為 ASP.NET WEB API 加上簡易的 Token 驗證
朋友需要個提供資料處理的 WEB API ,需要有個基本的 TOKEN 來驗證即可,甚至也不需要 TOKEN 的管理功能,直接指定固定 TOKEN 即可,聽來不太合理,但是需求永遠只是低標,就一步步開始吧
新增驗證 Handler
- 專案新增
Handler
資料夾 - 新增
TokenHandler.cs
TokenHandler.cs
繼承DelegatingHandler
using System.Net.Http;
定義一個固定 Token
private const string Token = "3f1472de8cb345f78a826d0cc466bbbe";
複寫
SendAsync
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { bool isValid = false; IEnumerable<string> headerDatas; //嘗試取得 Header 中 "Token" 的資料 var hasToken = request.Headers.TryGetValues("Token", out headerDatas); //request Header 中有 Token if (hasToken) { //檢查 Token 是否與設定的相同 if (headerDatas?.Any(a=>a.Equals(Token)) == true) { isValid = true; } } //Token 無效,回傳 401 if (!isValid) return request.CreateResponse(HttpStatusCode.Unauthorized, "Unauthorized"); //Token 檢查通過,繼續後續作業 var response = await base.SendAsync(request, cancellationToken); //回傳執行結果 return response; }
註冊 Handler
在 Global.asax.cs 中的
Application_Start()
註冊Handler
GlobalConfiguration.Configuration.MessageHandlers.Add(new TokenHandler());
protected void Application_Start() { 略.... GlobalConfiguration.Configuration.MessageHandlers.Add(new TokenHandler()); }
使用方式及測試結果
Request Header 加入
Token
Token:3f1472de8cb345f78a826d0cc466bbbe
Request Header
未
加入 TokenRequest Header 加入 Token
心得
很快速地完成 WEB API 固定 Token 的驗證,擴充性實在不足,可以想見很快就需要改寫,但已經滿足基本需求,接著就可以做些程式碼的增強與改善。
參考資料
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。