前言
本文主要介紹jwt的實戰運用。
準備工作
首先我們建立乙個asp.net的,包含mvc和webapi的web專案。
然後使用nuget搜尋jwt,安裝jwt類庫,如下圖。
設計思路
這裡我們簡單的做了乙個token驗證的設計,設計思路如下圖所示:
**實現
快取首先,我們先開發工具類,根據設計思路圖可得知,我們需要乙個快取類,用於在伺服器端儲存token。
public class cachehelper 如上述**所示,我們編寫了快取幫助類—cachehelper類。public static t getcache(string key) where t : class
public static bool containskey(string key)
public static void removecache(string key)
public static void setkeyexpire(string key, timespan expire)
public static void setcache(string key, object value)
public static void setcache(string key, object value, timespan timeout)
public static void setcache(string key, object value, timespan timeout, expiretype expiretype)
private static void _setcache(string key, object value, timespan? timeout, expiretype? expiretype)
else}}
} /// /// 過期型別
///
public enum expiretype
cachehelper類:使用httpruntime的快取,類裡實現快取的增刪改,因為使用的是httpruntime,所以,如果沒有設定快取的超時時間,則快取的超時時間等於httpruntime.cache配置的預設超時時間。
如果**掛載在iis裡,那麼,httpruntime.cache配置超時時間的地方在該**的應用程式池中,如下圖:
jwt的幫助類
現在我們編寫jwt的幫助類,**如下:
public class jwthelper**很簡單,實現了jwt的code的建立和解析。, ,
}; ijwtalgorithm algorithm = new hmacsha256algorithm();
ijsonserializer serializer = new jsonnetserializer();
ibase64urlencoder urlencoder = new jwtbase64urlencoder();
ijwtencoder encoder = new jwtencoder(algorithm, serializer, urlencoder);
var token = encoder.encode(payload, secret);
return token;
}/// /// 根據jwttoken 獲取實體
///
/// jwttoken
///
public static idictionarygetjwtdecode(string token)
}
注:jwt的code雖然是密文,但它是可以被解析的,所以我們不要在code裡儲存重要資訊,比如密碼。
jwt的code與解析後的內容如下圖所示,左邊未code,右邊未解析的內容。
authenticationhelper驗證幫助類
現在,我們已經可以編寫驗證類了,利用剛剛已建立的快取幫助類和jwt幫助類。
authenticationhelper驗證幫助類**如下:
public class authenticationhelper如**所示,我們實現了驗證token建立、驗證token獲取、驗證token校驗三個方法。public static void adduserauth(string username, timespan ts)
public static string gettoken(string username)
public static bool checkauth(string token)
else}}
到此,我們的基礎**已經編寫完了,下面進入驗證的應用。
fliter
首先,在global.asax檔案中,為我們webapi新增乙個過濾器,**如下:
} **中建立了四個過濾器,分別是mvc的請求和異常過濾器和webapi的請求和異常過濾器。
這裡我們主要看webapi的請求過濾器——httppermissionfilter。**如下:
}我們的httppermissionfilter類繼承了system.web.http.filters.actionfilterattribute,這樣他就可以截獲所有的webapi請求了。
然後我們重寫了他的onactionexecuting方法,在方法裡,我們查詢到當前請求的controller的名稱,然後對其進行了乙個簡單的判斷,如果是login(登入)或loginout(登出),那我們就不對他的token進行驗證。如果是其他請求,則會從請求的headers的authorization屬性裡讀取token,並使用authenticationhelper類對這個token進行正確性的驗證。
webapi介面
現在我們編寫webapi介面,編寫乙個登入介面和乙個普通請求介面。
登入介面:這裡我們使用authenticationhelper類建立乙個token,並把他儲存到快取中。
然後再把token返回給呼叫者。
普通介面:這裡我們不做任何操作,就是簡單的返回成功,因為是否可以訪問這個介面,已經又filter控制了。
**如下:
public class logincontroller : apicontroller }測試頁面public class requestcontroller : apicontroller
}
現在我們編寫測試頁面,這裡我們實現三個按鈕,登入、帶token訪問api、無token訪問api。
**如下:
登入測試結果如下:帶token訪問api
無token訪問api
如上圖所示,我們已經成功實現簡單的token驗證。
到此jwt的實戰應用就已經介紹完了。
,非常感謝!
輕量級Django 第2章 無狀態的Web應用
佔位伺服器 接收乙個帶有指定大小 顏色,文字等 的url並生成該。通過正則中的?p語法來捕獲被命名的組,之後用 0 9 來匹配數字 試驗 compile re.compile image p 0 9 x p 0 9 str image 12x21 compile.search str sre.sre...
紅黑樹的實現與驗證 C
紅黑樹的實現與驗證 c 紅黑樹例項 在說紅黑樹之前,我們先來認識一下它 首先強調一點 紅黑樹也是二叉搜尋樹。那麼它就滿足二叉搜尋樹的性質,除此之外,他還有幾個比較特殊的性質,了解這些,有助於我們後面的分析 性質 1 紅黑樹所有的節點都有顏色 紅或黑 2 紅黑樹的根結點是黑色的 3 紅黑樹的兩個紅色節...
基於C語言的狀態機實現技術
一 簡介 有限狀態機是一種用來進行物件行為建模的工具,其作用主要是描述物件在它的生命週期內所經歷的狀態序列,以及如何響應來自外界的各種事件。有限狀態機 finite state machine或者finite state automata 是軟體領域中一種重要的工具,很多東西的模型實際上就是有限狀態...