【摘要】 本文在前一篇“基于CSE的微服务架构实践-基础架构”基础上,介绍了使用CSE进行轻量级架构的技术选型参考。文末提供了基于JWT的微服务认证鉴权方案。

轻量级架构模式下,可以选择CSE作为RPC开发框架的基础,并选择其他开源技术实现微服务业务功能。

Spring BootBoot的maven插件提供了良好的打包功能,将一个应用打包为jar包,可以方便的分发应用程序,同时使用ServiceStage可以轻松的部署jar包,实现容器运行。

轻量级架构下,技术选型会倾向于选择轻量级组件,而不选择封装好的框架,以实现对于应用程序最灵活的控制,比如不选择任何spring-boot-start封装的组件,也不选择必须构建于J2EE(或者JavaEE)协议之上的组件。这种架构通常适合于技术开发能力比较强的团队,对于技术原理有比较深入的了解,然后期望更加高效灵活的实现业务诉求。

脱离Spring Boot体系和J2EE(JavaEE)技术体系构建微服务,具备很大的灵活性,能够掌握系统的细节。但是对技术人员要求相对高一些。好在很多开发场景,比如数据库、消息中间件、认证鉴权等都有大量非常成熟、稳定并使用广泛的库可以选择,因此这个难度并不是很大。

作为一个案例,我们使用JWT库,提供一个可参考的鉴权实现方案。在开始之前,建议开发者查询JWT的资料,了解JWT的原理。

上述流程图,是进行JWT认证的一个基本流程。JWT提供了大量的库供开发者使用,包括JAVA、C、C#、javascript等等。要进行JWT认证,需要在各个节点部署共享秘钥或者采用非对称秘钥完成认证。在上面的例子中,认证管理服务部署了公私钥对,其他服务部署了公钥。

采用JWT认证的流程如下:

1.       用户调用认证管理服务的login接口获取Token。通常用户需要提供用户名密码等信息。返回的Token是按照JWT标准进行编码的BASE64格式,包含了有效期、唯一标识等规定的字段,还包含少量的角色信息,比如roles=USER,ADMIN等。这些信息采用了认证管理服务的私钥进行加密,只有采用它分发的公钥才能够解密。请求完成后,用户将Token设置到浏览器Cookie里面或者LocalStorage里面。

2.       用户调用产品管理接口。需要将Token信息从浏览器读取出来,通过Authorization头或者其他的HTTP头将信息传递下来。其他服务可以采用公钥对Token进行解密,确认用户身份,以及获取角色信息。对于身份认证的部分,可以在网关统一进行,也可以直接由业务执行。网关进行的好处是可以防止疏漏,但是会存在重复检查的成本。业务可以从Token里面解析出来角色信息,以判断访问者是否具备相关操作,比如listProduct或者deleteProduct的权限。

JWT的好处是非常适合微服务架构,认证过程完全是无状态的,可以由使用者在本地完成认证,非常高效。同时非常适合需要进行大量第三方认证的场景(比如OAuth),在获取第三方授权的Token后,就直接可以在业务中进行认证,不需要对第三方认证提供额外的会话管理机制。

将JWT机制作为业务系统的认证机制也存在一些问题。比如Token大小的问题。如果业务系统比较复杂,权限认证需要大量的信息才能够确定,那么Token信息可能随着权限规则的增加而增加,由于HTTP消息头过大,可能导致拒绝服务,还会影响整个系统的网络传输效率,造成大量浪费。因此在设计Token的的时候,一定需要对影响Token大小的因素做好评估,控制Token的大小。针对特殊场景,需要采用额外的认证机制弥补这个缺陷。比如认证管理服务提供接口/queryAllowedOperations,允许用户通过Token ID查询授权的操作列表,同时结合缓存等方案,减少对于认证管理服务的访问。JWT还有增加重放攻击的可能性,这个可以结合有效时间,在认证服务里面提供Token续期接口等方式,弥补可能存在的风险。

总之,JWT给微服务进行会话管理提供了良好的解决方案,依赖于灵活的认证鉴权系统设计,可以适配各种复杂的业务场景。通过JWT库完成相关的认证逻辑开发,而不依赖于一些会话管理框架,给业务提供了极大的灵活性和选择空间。

作为一个专门的的第三方认证服务,可以参考OAuth 2, 它使用JWT作为认证的技术基础:

https://tools.ietf.org/html/rfc6749#section-1.2

来源:华为云社区  作者:liubao68

基于CSE的微服务架构实践-轻量级架构技术选型相关推荐

  1. 基于Vue+SpringCloudAlibaba微服务电商项目实战-技术选型-004:快速整合微信公众号开发

    004:快速整合微信公众号开发 1 微信公众号开发项目演示 2 微信公众号开发设计原理 3 基于natapp将本地项目发布到外网 4 对接微信公众号测试平台 5 第三方微信框架快速实现微信开发 6 微 ...

  2. 基于CSE的微服务架构实践-Spring Boot技术栈选型

    [摘要] 本文在前一篇"基于CSE的微服务架构实践-基础架构"基础上,介绍了在Spring Boot中集成CSE的技术选型参考.本文介绍了Spring Boot集成CSE的基本原理 ...

  3. 基于CSE的微服务架构实践-Spring Cloud技术栈选型

    [摘要] 本文介绍了CSE和Spring Cloud的关系,在技术选型上的差异.介绍了Spring Cloud用户使用Spring Cloud物理多租和进行CSE开发的两种策略. 当Spring Cl ...

  4. 一个基于 Dubbo 的微服务改造实践

    微服务的理论已经够多,今天不妨看一个实战案例. 基于微服务或者 SOA 的自动化测试系统每个公司都有自己的特有的,我今天就主要介绍一下,我们研发的一套 mock 测试系统. 目前面临的问题 1.测试人 ...

  5. 一个近乎完美基于Dubbo的微服务改造实践

    网易考拉(以下简称考拉)是网易旗下以跨境业务为主的综合型电商,自 2015 年 1 月 9 日上线公测后,业务保持了高速增长,这背后离不开其技术团队的支撑. 微服务化是电商 IT 架构演化的必然趋势, ...

  6. 网易云基于Prometheus的微服务监控实践

    当监控遇上微服务 在过去数年里,微服务的落地一直都是业界重点关注的问题,其始终面临着部署.监控.配置和治理等方面的挑战.轻舟微服务平台是网易云为企业提供的一套微服务解决方案,其中微服务监控是其关注的重 ...

  7. ASP.NET Core基于K8S的微服务电商案例实践--学习笔记

    摘要 一个完整的电商项目微服务的实践过程,从选型.业务设计.架构设计到开发过程管理.以及上线运维的完整过程总结与剖析. 讲师介绍 产品需求介绍 纯线上商城 线上线下一体化 跨行业 跨商业模式 从0开始 ...

  8. 基于 Docker 的微服务架构实践

    http://dockone.io/article/4887 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 DevOps,也见证了 Do ...

  9. docker容器 eureka 集成_微服务:基于 Docker 的微服务架构之分布式企业级实践参考...

    编者按:本文分享自CSDN技术博客,作者为 FlyWine,所有权归原著者.若有不妥,联系本头条号以做必要处理. 目录 Microservice 和 Docker 服务发现模式 客户端发现模式 Net ...

最新文章

  1. pypy解释器提高python的效率之安装pypy
  2. LINUX下UDP实现消息镜像通信,linux环境下基于udp socket简单聊天通信
  3. 我为什么还要造轮子?欠踹?Monk.UI表单美化插件诞生记!
  4. Windows 命令行大全
  5. 如何提升软件交付效能?答案未必如你所想
  6. mysql中b树是什么_MySQL优化中B树索引知识点总结
  7. 3.1 Zabbix企业级分布式监控系统 --- zabbix 安装
  8. LINUX访问WINDOWS网络共享目录
  9. python书在线阅读_这7本O’Reilly推出的免费Python电子书,够你看了
  10. Java使用融云SDK,推送聊天信息
  11. web eTerm是什么
  12. Ubuntu 20.04上编译OpenSSL的编译选项设置
  13. 计算机处理汉字信息时所使用的代码是,计算机处理汉字信息时所用的代码是什么...
  14. 你对Java集合了解多少?
  15. 《Web API 的设计与开发》读书笔记
  16. ubuntu卸载火狐浏览器(亲测有效)
  17. 机器学习复习之逻辑斯蒂回归以及决策树
  18. SAP-MM:物料采购订单的客制化开发与对应打印/预览的配置
  19. 35_pytorch 过拟合解决办法 (Early Stop, Dropout)
  20. 【Unity Shaders】Reflecting Your World —— Unity3D中的法线贴图和反射

热门文章

  1. iwrite提交不了作业_“iWrite写作中心”使用全攻略
  2. 量子计算机网络指数时间,科普:量子计算机是这样计算的
  3. php怎么写确认密码,如何在Laravel 5中验证当前密码,新密码和新密码的确认? - php...
  4. tinymce引入后未显示_讷河华宁电子QJZ1-1600/3300主控制及显示总成101系统用
  5. Andorid AlertDialog 点击后自动消失_不看后悔!2011年别克更换完变速箱电脑后,要如何做设定匹配...
  6. oracle磁盘提取工具,实战:巧用磁盘管理工具给oracle提速
  7. net 架构师-数据库-sql server-002-工具
  8. 6.042 Mathematics for Computer Science
  9. [bzoj1500 维修数列](NOI2005) (splay)
  10. mysql数据库无限分类_php+mysql数据库实现无限分类的方法