上篇文章讲了SpringCloud OAuth 的实战篇,但是在微服务环境下,常常会有一个认证中心。
而普通服务接收到请求后,判断token是否有效并不是自己处理的,因为token的管理统一交给认证中心,token也理应被认证中心统一管理(职责专一性)。 那么这篇文章会介绍如何搭建认证中心,并介绍普通服务是如何处理token的。

1:认证中心的搭建(OAuth Center)

1.1:回顾

先看下上篇文章:SpringCloud-OAuth2(二):实战篇

上篇文章其实就已经简单搭建好了一个认证中心,因为我写了一个认证中心的配置。

可以看上文的这部分地方↓↓↓↓↓↓↓↓↓


1.2:我的项目结构图

wfw-auth-center:认证中心

wfw-auth-client:认证客户端

wfw-auth-common:common包

2:认证客户端的配置

只需要做两件事:properties配置、资源服务配置

关于pom:用上篇的或者参考我的github。

为什么需要些资源服务配置?

因为客户端本身是一个服务,需要管理自己资源。但是我们可以将资源交给中心统一管理,这个后面会细说。

2.1:application配置

#认证中心地址
auth.server.address=127.0.0.1:8123
#认证客户端校验token的配置
security.oauth2.client.client-id=admin
security.oauth2.client.client-secret=admin
security.oauth2.client.access-token-uri=http://${auth.server.address}/oauth/token
security.oauth2.resource.jwt.key-uri=http://${auth.server.address}/oauth/token_key
security.oauth2.client.grant-type=password
security.oauth2.client.scope=all

2.2:资源服务配置

参考认证中心的配置做一定的更改即可。

@Configuration
@EnableResourceServer
public class WebClientResourceConfig extends ResourceServerConfigurerAdapter { private final AuthClientExceptionHandler authClientExceptionHandler; public WebClientResourceConfig(AuthClientExceptionHandler authClientExceptionHandler) {
this.authClientExceptionHandler = authClientExceptionHandler;
} @Override
public void configure(ResourceServerSecurityConfigurer resources) {
resources.resourceId("admin").stateless(true).authenticationEntryPoint(authClientExceptionHandler);
} @Override
public void configure(HttpSecurity http) throws Exception {
// 资源链路
http
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
// 登录放通
.and()
.authorizeRequests()
.antMatchers("/oauth/**")
.permitAll()
// 其他请求都需认证
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
// 跨域
.and()
.cors()
// 关闭跨站请求防护
.and()
.csrf()
.disable();
} }

3:测试

3.1:先获取token

3.2:携带token访问其他服务的接口

3.3:uml图

认证中心颁发token、对token鉴权,携带token访问其他服务的接口,这是个闭环,合情合理。

4:再聊聊认证中心

每个普通服务一定要配置认证中心的的相关配置吗?答案是否定的。


先看看下面这张图:

当一个请求通过网关的转发之后,其他服务之间还需要通信,当请求到达订单服务,还会通过用户服务、支付服务。

在业务比较复杂的情况下,调用链有可能会更加复杂。

而每个服务都要去认证中心鉴定一下token是否合法,假设每鉴定一次token的耗时为50ms,那么调用链越长耗时更长。

总结:强校验、高耗时。

这种设计几乎是难以容忍等待,那么是否可以更好管理token和资源呢?


再看看这张图:

前面就说过了,认证中心除了管理token,理应也具备管理权限、资源的功能,因为服务器之间的调用链可能会非常复杂,

如果每个服务在处理请求之前,都需要去认证中心找一下token是否有效,完全是浪费资源的。

而微服务之间的通信基本是基于内网的,不可能每个服务都暴露在外网,因此我们只需要在统一的入口:网关层 做token、权限资源的校验即可。

这种做法既保证了系统的安全性,也降低了在权限校验上的时间成本。

总结:一次校验、畅通无阻。

最新文章

  1. Windows7下Blend for Visual Studio 2012使用问题
  2. 架设 OpenLDAP服务器(转)
  3. 【转】C#取硬盘、CPU、主板、网卡的序号 ManagementObjectSearcher
  4. BroadcastReceiver应用详解
  5. 【转】linux下a.out >outfile 2>&1重定向问题
  6. Invalid result location value/parameter
  7. hadoop2.2编程:MRUnit
  8. 使用freemarker生成html
  9. 深入理解shared pool共享池之library cache的library cache lock系列四
  10. 【转】Angularjs Controller 间通信机制
  11. 理解和使用NT驱动程序的执行上下文
  12. SVN 服务器IP地址变更后客户端的修改
  13. php中有用插件集合
  14. 14.3.4 Phantom Rows 幻影行
  15. MQ队列堆积太长,消费不过来怎么办(转)
  16. C#基础——结构体
  17. 02.将SDK获取到的ECS主机信息入库
  18. Elasticsearch索引原理
  19. 将眼底图片生成的txt文件进行格式化处理
  20. 第1章 Java语言概述--HelloWorld--环境搭建

热门文章

  1. KeUserModeCallback函数
  2. Unity shader 护盾shield的简单实现
  3. C++ primer plus读书笔记——第1章 预备知识
  4. SSM框架整合(Spring+SpringMVC+Mybatis)
  5. [刷题] 46 Permutations
  6. [OS] 概述&学习资料
  7. split命令_Linux split命令:切割(拆分)文件
  8. 面向对象——python核心编程第二版
  9. cron 任务的典型格式是: 分钟(0-59) 小时(0-24) 日(1-31) 月(1-12) 星期(0-6) 要执行的命令
  10. linux基础之用户及用户组管理