用户token,也可以利用第三方框架生成,JMS也包含了自己的token服务器。

Token的生成原理:

 

 

 部署TokenServer

这里下载 tokenserver.zip,然后部署运行TokenServer。

 

 

 微服务中编写Login函数

引用 JMS.Token nuget包

代码如下:

        
//重载基类的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示例列表

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/IWings/p/13361243.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!