JMS微服務開發示例(五)生成短token,實現用戶無狀態登陸

用戶token,也能夠利用第三方框架生成,JMS也包含了本身的token服務器。html

Token的生成原理:服務器

 

 

 部署TokenServer

這裏下載 tokenserver.zip,而後部署運行TokenServer。網絡

 

 

 微服務中編寫Login函數

引用 JMS.Token nuget包框架

代碼以下:ide

        
//重載基類的BeforeAction方法,在方法體內,驗證token的有效性。
public override void BeforeAction(string actionName, object[] parameters) { base.BeforeAction(actionName, parameters); if(actionName != "Login") { //驗證用戶token var tokenClient = new TokenClient("192.168.40.132", 9911); var infoArr = tokenClient.VerifyForLongs(this.Header["auth"]); if (infoArr == null) throw new Exception("token無效"); var userid = infoArr[0]; var expireTime = DateTime.Parse("1970-01-01").AddSeconds(infoArr[1]); if(expireTime >= ) throw new Exception("token過時"); } } /// <summary> /// 登錄系統 /// </summary> /// <param name="userName">用戶名</param> /// <param name="password">密碼</param> /// <returns>用戶token</returns> public string Login(string userName,string password) { //假設用戶登錄成功,id爲888 var userid = 888; //定義過時時間爲15分鐘後 var expire =(long)( (DateTime.Now.AddMinutes(15) - DateTime.Parse("1970-01-01")).TotalSeconds); var tokenClient = new TokenClient("192.168.40.132", 9911); var token = tokenClient.BuildForLongs(new long[] { userid , expire }); return token; } /// <summary> /// 刷新token /// </summary> /// <returns>新的用戶token</returns> public string RefreshToken() { //驗證用戶token var tokenClient = new TokenClient("192.168.40.132", 9911); var infoArr = tokenClient.VerifyForLongs(this.Header["auth"]); if (infoArr == null) throw new Exception("token無效"); var userid = infoArr[0]; var expireTime = DateTime.Parse("1970-01-01").AddSeconds(infoArr[1]); if (DateTime.Now >= expireTime) throw new Exception("token過時"); var expire = (long)((DateTime.Now.AddMinutes(15) - DateTime.Parse("1970-01-01")).TotalSeconds); return tokenClient.BuildForLongs(new long[] { userid, expire }); }

上面代碼展現瞭如何生成一個最短的token,若是你想在token裏面放更多的信息,能夠使用TokenClient.BuildForString函數生成。不過,有userid和過時時間足矣了,由於token須要每次都放在頭部傳輸,太長只會增長網絡流量。函數

客戶端訪問微服務時,把token放在header裏面微服務

 

            using ( var tran = CreateMST() )
            {
                tran.SetHeader("auth", token);
                .......

 

JMS示例列表ui

相關文章
相關標籤/搜索