2019独角兽企业重金招聘Python工程师标准>>>

微服务中,对用户及其权限的管理,具体实现的方式有很多种,从架构上来看分为:

  1. 网关层进行权限管理 <本文的实现方式>
  2. 各服务独立实现校验;
  3. 校验逻辑实现在各服务上,通过共享数据或者授权中心等方式实现;

本文源码: 码云传送门

授权流程图示1:

校验流程图示2:

实例演示

git clone https://git.oschina.net/zhangfeng0103/springcloud-microservices-examples
cd springcloud-microservices-examples
mvn clean package

####启动本次重要的三个服务

java -Dfile.encoding=UTF-8 -jar eureka-server\target\eureka-server-1.0.0.jar
java -Dfile.encoding=UTF-8 -jar gateway\target\gateway-1.0.0.jar
java -Dfile.encoding=UTF-8 -jar uaa-service\target\uaa-service-1.0.0.jar

####测试一把(windows)

# 项目中UAA已经默认有两个用户,且有对应的权限。参考resource目录下import.sql
# 用户10086,获取token
C:\Users\zhangfeng>curl "http://localhost:8765/uaa-token/token/byPhone" -H "Content-Type: application/json" --data-binary "{\"phone\":\"10086\",\"password\":\"123\"}" --compressed
{"accessToken":"eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eNpUjsEOgjAQRP-lR2KlYCmFk1_gDxgP23aRohRiwZgY_90NEo3HmXk7O0_mY2Q1mwHYhnmYWJ3JSshCCS03DGZHYSZERmk3eRLOqMLtSuRNnisuoSq5lqLk0lS6AKMcuoLgOeLtAD3SRQf2Qg4-xrVc6aUce_DXtX5PA7Z26Ikb2yHgx9aKdJzNb0Mwzf_CaIeR6CNLh2hbHyBNEuLSqUVOE-7e4urQh6_TQ4DzEpxebwAAAP__.JXorfMhakvVMcfW8m35d9RWv5TEiGKUjZipDXRl9lm9C-EF2UZIO7iGR9XRu6s5axnKM29b4Kvml8PiL984E9w"}# 调用接口 解析token可以显示的看到相应的用户信息及scope
C:\Users\zhangfeng>curl "http://localhost:8765/uaa-token/token/parse?token=eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eNpUjsEOgjAQRP-lR2KlYCmFk1_gDxgP23aRohRiwZgY_90NEo3HmXk7O0_mY2Q1mwHYhnmYWJ3JSshCCS03DGZHYSZERmk3eRLOqMLtSuRNnisuoSq5lqLk0lS6AKMcuoLgOeLtAD3SRQf2Qg4-xrVc6aUce_DXtX5PA7Z26Ikb2yHgx9aKdJzNb0Mwzf_CaIeR6CNLh2hbHyBNEuLSqUVOE-7e4urQh6_TQ4DzEpxebwAAAP__.JXorfMhakvVMcfW8m35d9RWv5TEiGKUjZipDXRl9lm9C-EF2UZIO7iGR9XRu6s5axnKM29b4Kvml8PiL984E9w" -H "Content-Type: application/json"  --compressed
{"iss":"uaa","iat":1490456084,"aud":"1001","jti":"db65d37e-f226-4a97-8407-4b985ab6ded5","userName":"jack","exp":1490468084,"email":"1001@uaa.com","phone":"10086","sub":"1001","nbf":1490456084,"scope":["/oschina/**","/the-service/**","/uaa-service/manage/**"]}
# 尝试调用查看用户信息的接口
C:\Users\zhangfeng>curl "http://localhost:8765/uaa-service/manage/users/1001" -H "Authorization:eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eNpUjsEOgjAQRP-lR2KlYCmFk1_gDxgP23aRohRiwZgY_90NEo3HmXk7O0_mY2Q1mwHYhnmYWJ3JSshCCS03DGZHYSZERmk3eRLOqMLtSuRNnisuoSq5lqLk0lS6AKMcuoLgOeLtAD3SRQf2Qg4-xrVc6aUce_DXtX5PA7Z26Ikb2yHgx9aKdJzNb0Mwzf_CaIeR6CNLh2hbHyBNEuLSqUVOE-7e4urQh6_TQ4DzEpxebwAAAP__.JXorfMhakvVMcfW8m35d9RWv5TEiGKUjZipDXRl9lm9C-EF2UZIO7iGR9XRu6s5axnKM29b4Kvml8PiL984E9w" -H "Content-Type: application/json" --compressed
{"phone" : "10086","userName" : "jack","password" : "123","email" : "1001@uaa.com","_links" : {"self" : {"href" : "http://localhost:8765/uaa-service/manage/users/1001"},"user" : {"href" : "http://localhost:8765/uaa-service/manage/users/1001"}}
}
# OK,调用顺利
# 切换用户10087
# .. .省略获取token的步骤,直接尝试调用接口
# cmd窗口有乱码,特意加了-w \nhttpstatus:%{http_code},可以看到,服务器响应的状态码为403
C:\Users\zhangfeng>curl "http://localhost:8765/uaa-service/manage/users/1001" -H "Authorization:eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eNpUjk0KwjAQhe8yy9LYtE3TpCtP4AXExaSJGLE_mAYE8RZeQnDlpcRbOGhBXL73vnnzzuBDgAYiIqTgcYImF5qLSpaKp4DRUphzXlC6nzwJjbUpt9oxmaNiwhbIlCoLxp3AykpZayUIjsEdV9g5unjd7s_rgzx3Gud6qT71rkN_mB8sacKiHTrixt3Qu6-tatIhmt-K3mz_N4Z2GIleQ2bQ25glCWwubwAAAP__.gDIC1foN5yUpFbJ7zC-v0Q3Y4jTu8I5L4_ewvu7dPggXmZIwzucAgsj1RzcObPLF8I0dWwMPYUiALJlfiut_uQ" -H "Content-Type: application/json" --compressed -w \nhttpstatus:%{http_code}{"content":"鏃犺闂潈闄?,"result":false}httpstatus:403

划重点:

# gateway config网关相关的配置
gateway:token:jwt:key: xxxxxsthis       # 与uaa中的key保持一致filter:noAuthenticationUrls:    #此处代码,下面这些路由 ID 不需要验权- gateway- uaa-tokenerrorMessage:            #这是异常处理,code与异常描述的对应关系维护999: 系统异常403: 无访问权限500: 服务器错误

QA:

1、token已经发出去,该账户的权限发生了更新,怎么办?

  • a方法. 首先说一下托底的方案,token超过有效期就不能使用,这也就意味着,最后一批发放的token有效期过了以后,权限更新会应用到所有账户上。这种方式满足一部分平台的需要。

  • b方法. UAA通知网关,指定时间之前的token都无效,网关只需在token校验中加上对应的逻辑即可,具体实现上可轮询,可推送。(有点像我们的身份证,中央告知各级单位,某日开始一代身份证无法办理业务…)

2、 即将过期的token怎么刷新?

  • 在网关验权过程中,发现即将过期的token,可在response header打入相应的标签,客户端发现有这个标签,调用刷新token的服务,重新获取一次即可。

本文参考了jhipster、CloudFoundry对UAA的实现。

大家有其他思路的话,希望能留言分享.

转载于:https://my.oschina.net/crazyFeng1/blog/867428

spring cloud微服务架构之UAA相关推荐

  1. 《Spring Cloud微服务架构实战派》PDF样章

    内容摘要: 本书针对Spring Cloud Greenwich.SR2版本+Spring Boot的2.1.x.RELEASE版本.在编写过程中,不仅考虑到在企业任职所需的技能,还考虑到求职面试时可 ...

  2. 疯狂Spring Cloud微服务架构实战

    网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...

  3. 《Spring Cloud 微服务架构进阶》读书笔记

    前页 随着 DevOps 和以 Docker 为主的容器技术的发展,云原生应用架构和微服 务变得流行起来. 云原生包含的内容很多,如 DevOps.持续交付.微服务.敏捷等 第一章,微服务架构介绍 架 ...

  4. Dubbo和Spring Cloud微服务架构对比

    一.为什么要使用微服务? 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合. 今天我们来了解下业内主要的微服务框架:Dubbo 和 Spring Cloud 微服务主要的优势 降 ...

  5. 一张图带你了解 Spring Cloud 微服务架构!

    点击上方"搜云库技术团队",选择"设为星标" 回复"1024"或"面试题"获取4T学习资料 Feign Eureka R ...

  6. 一张图了解 Spring Cloud 微服务架构

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/epgWJ Feign Eure ...

  7. Dubbo和Spring Cloud微服务架构的对比

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  8. Dubbo和Spring Cloud微服务架构

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  9. 终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

最新文章

  1. KVM创建虚拟机(六)
  2. [BUUCTF-pwn]——[BJDCTF 2nd]ydsneedgirlfriend2
  3. dsp 数据类型强制转换_JavaSE第二章总结—数据类型
  4. Android 实现圆角布局,变相实现圆角图片效果(不同位置不同弧度)
  5. java模式:深入单例模式
  6. 小程序 ---- (setData关于赋值对象属性的问题)
  7. sql 语句美化工具
  8. Javascript基础ppt
  9. 交换基础之生成树协议
  10. C++ 面向对象高级开发(侯捷)
  11. php global 要点
  12. Android之Scroller详解讲解-真正了解滚动处理
  13. MybatisPlus代码生成器报错AutoGenerator()‘ has private access in ‘com.baomidou.
  14. 银河麒麟V10桌面系统卡于光标处无法进入系统解决方法
  15. PCIe系列第三讲、事务层通用 TLP 头结构分析
  16. 实模式、保护模式和虚拟8086模式
  17. CSS颜色混合模式特效
  18. Wireshark怎么抓包、wireshark抓包详细图文教程 [最新绿色版本version 2.6.1 ]
  19. CPU+GPU异构计算编程简介
  20. 分治算法--棋盘覆盖

热门文章

  1. 使用短信管理你自己的短信网关
  2. Python中文日期转换为标准数字日期
  3. cublas 矩阵乘法
  4. python pymssql — pymssql模块使用指南
  5. [欠驱动机器人]4,动态规划(Dynamic Programming)
  6. Makefile造成“ make: *** No rule to make target ' xxx ', needed by 'xxx'。 停止。”错误的一种原因
  7. ios pan手势滑动消失动画_iOS左滑手势失效的解决方法
  8. 信号分解(如 EMD,ITD)应用于时间序列预测时是否存在问题
  9. 【庖丁解牛】图像处理库: 解决WeCenter至少需要有GD图像处理库才能正常运行
  10. 图论(4)邻接矩阵,关联矩阵