用户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. 笔记本安装linux

    下载 桌面版 Ubuntu 镜像 服务器版 Ubuntu 镜像 使用 Balena Etcher 制作系统安装盘 (1)官方网站下载: 点我下载 (2)下载完毕软件之后,打开软件,选择我们下载好的系统 ...

  2. 反转数组、打印数组元素、加强(增强)for循环

    package com.guoba.array; public class Demo04 { public static void main(String[] args) { int[] arr = ...

  3. kubernetes安装(一)

    参考: https://www.cnblogs.com/liuyangQAQ/p/17299871.html 部署组件包 名称 安装包 kubeadm集群组件 kubelet-1.20.9 kubea ...

  4. node版本管理工具推荐

    hello,今天给大家分享几款 node 版本管理的工具. 背景 在开发前端项目的时候,特别是新到公司接手一个多年维护的老项目时,如果 node 版本不正确,有的插件可能无法正确安装,比如我之前提到的 ...

  5. C#/.NET/.NET Core面试宝典(基础版)

    前言 该知识库主要由自己平时学习实践总结.网上优秀文章资料收集(这一部分会标注来源)和社区小伙伴提供三部分组成.欢迎关注我的微信公众号(声明公众号不推广告,纯属个人技术文章分享)回复关键字获取宝库地址 ...

  6. Redis系列(二):解读redis.conf文件、配置、初步使用

    一.解读redis.conf配置文件 # redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k =&g ...

  7. 原来AI也可以如此简单!教你从0到1开发开源知识问答机器人

    摘要:使用华为云EI智能机器人技术,从0到1开发一款开源知识问答机器人. 前言 最近有幸参与了开源社开源问答机器人的知识库编写,碰巧看到华为云也有类似的智能机器人,抱着试一试的心态,我开始了EI智能机 ...

  8. 标准物模型:设备无缝对接,IOT界的福音

    摘要:信息模型是解决IoT产业发展一系列挑战的关键,在信息模型的基础上可以推进行业标准/架构的统一,进而实现产业链生态的协同. 本文分享自华为云社区<[云驻共创]标准物模型,物联网的福音> ...

  9. 1g云主机升级centos8不满足centos 8 至少2g内存要求,linux虚拟内存来凑

    centos8 官方说,至少2g内存,推荐4g内存,像我的个人博客,zhoulujun.cn ,这种个人博客有不赚钱,丢个5美金一个月的1g内存,1核cpu,就够了. 强制升级到centos8,ngi ...

  10. PLS-00103: 出现符号 ")"在需要下列之一时

    执行 Oracle 存储过程时,出现 "PLS-00103: 出现符号 ")"在需要下列之一时:", Cause: java.sql.SQLException: ...