上篇文章讲了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、权限资源的校验即可。

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

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

SpringCloud-OAuth2(三):进阶篇的更多相关文章

  1. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  2. 跟我学SpringCloud | 第三篇:服务的提供与Feign调用

    跟我学SpringCloud | 第三篇:服务的提供与Feign调用 上一篇,我们介绍了注册中心的搭建,包括集群环境吓注册中心的搭建,这篇文章介绍一下如何使用注册中心,创建一个服务的提供者,使用一个简 ...

  3. PHP 进阶篇:面向对象的设计原则,自动加载类,类型提示,traits,命名空间,spl的使用,反射的使用,php常用设计模式 (麦子学员 第三阶段)

    以下是进阶篇的内容:面向对象的设计原则,自动加载类,类型提示,traits,命名空间,spl的使用,反射的使用,php常用设计模式 ================================== ...

  4. Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十五)阶段总结

    作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 一 每个阶段在结尾时都会有一个阶段总结,在<SSM整合基础篇& ...

  5. springcloud-zuul进阶篇

    一 前言 经过zuul初级篇(博客或者公主号springcloud专栏可以找到)的学习,读者都懂得如何简单的使用zuul进行路由网关配置,在进阶篇中你将获得zuul核心功能过滤器的基本使用,通过zuu ...

  6. idea 插件的使用 进阶篇

    CSDN 2016博客之星评选结果公布    [系列直播]零基础学习微信小程序!      "我的2016"主题征文活动   博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...

  7. 2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...

  8. windows系统快捷操作の进阶篇

    上次介绍了windows系统上一些自带的常用快捷键,有些确实很方便,也满足了我们的一部分需求.但是我们追求效率的步伐怎会止步于此?这一次我将会进一步介绍windows上提升效率的方法. 一:运行 打开 ...

  9. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

随机推荐

  1. Python爬虫基础讲解(七):xpath的语法

    xpath语法 XPath使用路径表达式来选取XML文档中的节点或者节点集.这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似. 下面列出了最有用的表达式: 在下面的表格中,我们已列出了一 ...

  2. Python数模笔记-Sklearn(5)支持向量机

    支持向量机(Support vector machine, SVM)是一种二分类模型,是按有监督学习方式对数据进行二元分类的广义线性分类器. 支持向量机经常应用于模式识别问题,如人像识别.文本分类.手 ...

  3. Web安全之PHP反序列化漏洞

    漏洞原理: 序列化可以将对象变成可以传输的字符串,方便数据保存传输,反序列化就是将字符串还原成对象.如果web应用没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被控制,就会造成代码执行, ...

  4. [Windows] 屏幕截图 - FastStone Capture(FSCapture) v9.4 飞扬时空汉化绿色版(官方地址) 【清晰好用 已验证】

    [Windows] 屏幕截图 - FastStone Capture(FSCapture) v9.4 飞扬时空汉化绿色版(官方地址) [复制链接]     愤怒の葡萄 电梯直达 楼主    发表于 2 ...

  5. keepalived绑定单播地址、非抢占模式及LVS的TCP模式的高可用

    背景:keepalived默认是组播地址进行播放,且默认地址是224.0.0.18,如果配置多个keepalived主机,会导致虚拟IP地址存在冲突问题,这种问题怎么解决呢? 解决办法:就是将keep ...

  6. C++课程设计 通讯录管理系统 原码及解析

    设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理. (一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时 ...

  7. xshell 终端 中文乱码

    我们在终端输入命令,中文显示乱码了. 解决方案:将xshell 传输采用的默认encode改为utf-8 解决:

  8. Java核心技术卷阅读随笔--第3章【Java 的基本程序设计结构】

    Java 的基本程序设计结构 现在, 假定已经成功地安装了 JDK,并且能够运行第 2 章中给出的示例程序.我们从现在开始将介绍 Java 应用程序设计.本章主要介绍程序设计的基本概念(如数据类型.分 ...

  9. gin框架路由拆分与注册

    gin框架路由拆分与注册 本文总结了我平时在项目中积累的关于gin框架路由拆分与注册的若干方法. gin框架路由拆分与注册 基本的路由注册 下面最基础的gin路由注册方式,适用于路由条目比较少的简单项 ...

  10. Python+Selenium自动化-定位一组元素,单选框、复选框的选中方法

    Python+Selenium自动化-定位一组元素,单选框.复选框的选中方法   之前学习了8种定位单个元素的方法,同时webdriver还提供了8种定位一组元素的方法.唯一区别就是在单词elemen ...