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

部署TokenServer

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

微服务中编写Login函数

引用 JMS.Token nuget包

代码如下:

  public class MyController : MicroServiceControllerBase
  {
      TokenClient _tokenClient;
      public MyController(TokenClient tokenClient)
      {
        this._tokenClient = tokenClient;
      }

        

     /// <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";var token = _tokenClient.Build(userid, DateTime.Now.AddMinutes(15));
return token;
} /// <summary>
/// 刷新token
/// </summary>
/// <returns>新的用户token</returns>
[JMS.Authorize]
public string RefreshToken()
{

             var token = _tokenClient.Build(this.UserContent, DateTime.Now.AddMinutes(15));

               return token;

        }

//下面代码,可作废token,这样,所有服务器都会不再认同这个token
          //_tokenClient.SetTokenDisable(token);
  }

Program.cs中,启用JMS.Token作为身份验证

services.AddJmsTokenAuthentication("192.168.40.132", 9911,"auth");

 服务器端作废token

_tokenClient.SetTokenDisable(token);

Controller中,如果所有方法要求身份验证,才能调用,那么,在Controller上加上 [JMS.Authorize] 标识,如果只是某些方法要求身份验证,那么,在方法上加 [JMS.Authorize] 标识

上面代码展示了如何生成一个最短的token,如果你想在token里面放更多的信息,可以使用TokenClient.BuildForString函数生成。不过,有userid和过期时间足矣了,因为token需要每次都放在头部传输,太长只会增加网络流量。

客户端访问微服务时,把token放在header里面

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

AspNet中使用JMS.Token验证

nuget 引用 JMS.Token.AspNetCore

        public void ConfigureServices(IServiceCollection services)
{
services.AddJmsTokenAuthentication("127.0.0.1", 9911); services.AddControllers(); }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.UseRouting(); //启用身份验证
app.UseAuthentication();
app.UseAuthorization(); app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

Controller中获取身份信息:[Authorize]为标准的AspNet [Authorize],不是JMS.Authorize

客户端js请求,加上Authorization头,如:Authorization:your token,注意,不要加

下面代码是服务器端获取token用户信息

        [Authorize]
[HttpGet]
public string Test()
{
return this.User.FindFirstValue("Content");
}

JS端token解码,获取过期时间

    //解码string类型的token
function decodeJmsStringToken(token) {
var str = window.atob(token);
var strArr = JSON.parse(str);
var obj = JSON.parse(strArr[0]);
var expireTime = new Date(new Date(1970, 0, 1).getTime() + obj.e * 1000);
return {
content: obj.d,
expireTime: expireTime //utc时间
};
}

JMS示例列表

JMS微服务开发示例(五)生成短token,实现用户无状态登录的更多相关文章

  1. JMS微服务开发示例(一)Hello world

    网关部署 1.在网关服务器上,安装.net core 3.1运行环境: 2.到 https://www.cnblogs.com/IWings/p/13354541.html 下载Gateway.zip ...

  2. 微软微服务eShopOnContainers示例之EventBusRabbitMq解析与实践

    eShopOnContainers eShopOnContainers是微软官方的微服务架构示例,GitHub地址https://github.com/dotnet-architecture/eSho ...

  3. 构建微服务开发环境8————Hello 微服务

    [内容指引] 1.用IDEA打开微服务项目; 2.更新Maven依赖: 3.IntelliJ IDEA JDK配置; 4.修改代码: 5.运行微服务: 6.将代码变更提交到Github. 经过前面的努 ...

  4. 微服务实践(五):微服务的事件驱动数据管理 - DockOne.io

    原文:微服务实践(五):微服务的事件驱动数据管理 - DockOne.io [编者的话]本文是使用微服务创建应用系列的第五篇文章.第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点:第二和第 ...

  5. 快速搭建 SpringCloud 微服务开发环境的脚手架

    本文适合有 SpringBoot 和 SpringCloud 基础知识的人群,跟着本文可使用和快速搭建 SpringCloud 项目. 本文作者:HelloGitHub-秦人 HelloGitHub ...

  6. Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲

    Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台:   微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...

  7. mPass多租户系统微服务开发平台

    目录 项目总体架构图 基于SpringBoot2.x.SpringCloud并采用前后端分离的企业级微服务,多租户系统架构微服务开发平台 mPaaS(Microservice PaaS)为租户业务开发 ...

  8. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  9. 微服务开发的最大痛点-分布式事务SEATA入门简介

    前言 在微服务开发中,存在诸多的开发痛点,例如分布式事务.全链路跟踪.限流降级和服务平滑上下线等.而在这其中,分布式事务是最让开发者头痛的.那分布式事务是什么呢? 分布式事务就是指事务的参与者.支持事 ...

  10. 【开源】.net微服务开发引擎Anno 让复杂的事简单点- 日志、链路追踪一目了然 (上)

    1.Anno简介? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可视化监控.依赖第三方框架少.详情请查看<[开源].net微服务开发引擎Anno开源啦> 本章主题:. ...

随机推荐

  1. 使用Mybatis自定义插件实现不侵入业务的公共参数自动追加

    背景 后台业务开发的过程中,往往会遇到这种场景:需要记录每条记录产生时间.修改时间.修改人及添加人,在查询时查询出来. 以往的做法通常是手动在每个业务逻辑里耦合上这么一块代码,也有更优雅一点的做法是写 ...

  2. ElasticSearch之Index modules

    索引的参数,分为两类: 静态参数,仅支持在创建索引时指定,或者关闭索引后指定. 动态参数,允许在索引工作期间指定或者修改. 静态参数 index.number_of_shards 默认值为1. 本参数 ...

  3. Kafka 具体分析

    前面的相关文件简要地介绍了 Kafka 的基本使用,本文将将要介绍一下关于 Kafka 的集群关系.存储结构以及架构方面的内容进行简要的解析 组件之间的关系 Kafka 中,各个组件之间的关系如下图所 ...

  4. Java 并发编程(四)同步工具类

    本文使用的 JDK 版本为 JDK 8 基本同步工具类 闭锁(CountDownLatch) 闭锁是一种工具类,可以延迟线程的进度直到其到达终止状态.闭锁的作用相当与一扇门:在闭锁的状态到达之前,这扇 ...

  5. 五菱宝骏车机升级教程【嘟嘟桌面或ES文件管理器】

    文章来源:https://www.djww.net/607.html 简介 越来越多的汽车厂商自研车机系统,其实就是在原来安卓的基础上加入自己的元素,然后禁用某些功能从而实现禁止用户安装第三方app. ...

  6. 深入了解RC4 Drop加密技术

    一.引言 在网络安全领域,加密技术始终是重中之重.随着计算机技术的发展,加密算法也在不断更新换代.RC4(Rivest Cipher 4)加密算法因其高效.简洁的特性,在信息安全领域得到了广泛的应用. ...

  7. 【华为云技术分享】LwM2M协议的学习与分享

    [摘要] 本文主要对于LwM2M协议进行了简单的介绍,包括协议的体系架构以及特性.对象.资源.接口的定义等,希望对你有所帮助. 1协议简介 LwM2M(Lightweight Machine-To-M ...

  8. 身未动心已远,AI带你流浪地球

    摘要:我们提供了一键运行的notebook AI作画 Dreambooth 生成自定义主体,可以在ModelArts平台上调试开发自己的文生图模型. 本文分享自华为云社区<DreamBooth+ ...

  9. ECS实践案例丨逻辑卷的创建和扩容操作指导

    摘要:实现跨硬盘使用,在传统硬盘之上的一层,在云服务器中可以实现跨EVS使用,用户在某些场景需要创建逻辑卷或者对已有的逻辑卷进行扩容处理,或者在某些时候由于误操作导致上述操作失败. [背景描述]: 实 ...

  10. 经验说丨华为云视频Cloud Native架构下实践

    摘要:来自华为云直播的段亮详细介绍华为云视频在Cloud Native的转型实践中遇到的问题.挑战以及解决之道. 随着云基础设施服务以及边缘计算技术的发展,Cloud Native,即云原生,架构理念 ...