授权服务器,返回给我一个授权码,这里我只需要把授权传回去就可以了。来证明我是这个服务器。
URI的地址传和第一次的地址一样的,认证服务器会比,第一次跳转的请求和第二次申请令牌的请求redirect_uri这个参数是不是一致,如果不一致
就会报错。这样发出请求后 ,就会拿到一个令牌。

前端的服务器拿到令牌后还是要回到前端页面

跳转到根目录

调回来就回有个问题。autenticated现在的值是false,没有一个地方把autenticated设置为true。那么页面一刷新autenticated就是false的。
构造函数一判断autenticated是false就会调走去认证。这样这里就是不停的死循环。

解决的方法就是 ,当登陆后把autenticated设置为true,在构造函数内,判断当前是不是登陆了。发一个http请求。发送me方法

/me方法

就把tokenInfo返回回去。 已经把tokenInfo放在session里面了。

授权服务器代码改造

主要是争对admin这个client加一些配置。

之前争对admin这个client只开放了一种授权模式就是password

加上authorization_code用逗号和password分隔开。

加上这种授权模式以后,就必须要填写上 web_server_redirect_uri这个字段

我们在前端 跳过去的时候 传了参数 redirect_uri这个参数 是一个路径

那么在认证服务器这边,我也需要把这个路径填进去

客户端在做跳转的时候,是一个明文的跳转。这里看到的信息都会出现在浏览器的地址栏。任何人都会看到你的clientId ,redirect_uri这个参数的值
如果我是攻击者就可以利用这个请求发一个一模一样的请求,把跳转的地址改成自己服务器的地址。

所以要在服务器端要有一份信息,在客户端跳转的时候 要对比这个信息。admin和 redirect_uri的参数和服务器端一定要能对的上。对的上才去跳转。

启动服务测试

认证服务器

网关

admin应用

订单

访问客户端应用的地址

跳转到了

在认证服务器的这里有一些配置继承了WebSecurityConfigurerAdpater

在Adpater里面 还有一些默认的安全配置

这就是说所有的请求,都必须要身份证以后才能访问 .anyRequest().authenticated()
.formLogin()当前支持表单登陆和.httpBasic登陆
这是认证服务器的默认的安全配置。

formLogin就是给你一个登陆表单。让你来登陆。

那么你登陆完成后,会再跳转到这个路径上去。

form表单的登陆 最终看到的就是这样一个页面。

点击提交后,就会勇服务器上我们写的这个去验证。用户名随便写,面是123456

验证过以后,会 再次跳转到这个路径上,在跳到登陆页面之前会把这个地址存起来。登陆成功后会再回到这个地址上去。
这个地址会做Oauth协议相关的工作。

做完以后,会发一个授权码到我们的前端服务器上

我们现在点击登陆

这还是在认证服务器上,这是一个授权的过程,

read和write这两个授权项,是在数据库内读取出来的。这里是问这两个授权向,要不要给。这个地方实际上是可以忽略掉的,默认把权限给他就行。

可以用数据库内的最后一个字段设置为true,就表示默认把所有权限都发出去。能给的权限都发出去。

这里也可以写read。这样就默认只发送read的权限。

权限都是批准,然后 点击授权 authorize。下次再有登陆行为的时候 就看不到这个页面了。是因为在数据库内已经设置为所有权限默认发送,自动把授权的过程给做了。

这行就跳回到了客户端

调回的位置就是当时发送的redirect_uri的值。进入到了前端的callback的服务里面。

callBack服务发送请求去拿token,存到session里 再跳转到我们的住额上

进到这个页面 再去发me请求

从session里获取token。

有东西就返回信息。authenticated为true 页面就显示出来 了。

页面就显示出来了。这就是整个的过程

点击按钮获取到了order的信息

获取订单的请求的控制台输出

这样整个改造完成。

结束

Spring cloud微服务安全实战-5-6实现授权码认证流程(2)的更多相关文章

  1. Spring cloud微服务安全实战-3-4 API安全机制之认证(1)

    本节开始讲认证相关的东西.注意事项,出现问题的对应的解决方案. 先写用户注册的服务,注册一些用户信息进去.注册也是我们安全体系的一部分 注册 UserController里面的create方法 先修改 ...

  2. Spring Cloud微服务安全实战_3-7_API安全之授权

    API安全之授权 访问控制: 1,ACL :Access Control Lists,直接给每个用户授权,他能访问什么.开发简单,但是用户多的话,给每个用户授权比较麻烦. 2,RBAC:Role Ba ...

  3. Spring cloud微服务安全实战-3-5 API安全机制之认证(2)

    基于Http协议的认证方式有很多.本节我们只讲一个最简单的HttpBasic认证.聪明就可以看出来,这是一个最基础的认证,好处是简单方便,所有的主流浏览器都支持,问题就是并不是非常安全的,但是帮我们大 ...

  4. Spring cloud微服务安全实战_汇总

    Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...

  5. 《Spring Cloud微服务 入门 实战与进阶》

    很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...

  6. Spring Cloud微服务安全实战_00_前言

    一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介:  二.最终形成的架 ...

  7. Spring Cloud微服务安全实战_4-5_搭建OAuth2资源服务器

    上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后, ...

  8. Spring Cloud微服务安全实战_4-3_订单微服务&价格微服务

    实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xml ...

  9. Spring cloud微服务安全实战 最新完整教程

    课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...

  10. Spring Cloud微服务安全实战_4-4_OAuth2协议与微服务安全

    接上篇文章,在这个流程中,PostMan可以代表客户端应用,订单服务是资源服务器,唯一缺少的是 认证服务器 ,下面来搭建认证服务器 项目结构: Pom.xml : DependencyManager ...

随机推荐

  1. redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现?

    redis的过期策略都有哪些? 设置过期时间: set key 的时候,使用expire time,就是过期时间.指定这个key比如说只能存活一个小时?10分钟?指定缓存到期就会失效. redis的过 ...

  2. Django之路——6 Django的模型层(一)

    ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...

  3. Union-Find(并查集): Quick union improvements

    Quick union improvements1: weighting 为了防止生成高的树,将smaller tree放在larger tree的下面(smaller 和larger是指number ...

  4. .net System.IO.Stream 流操作类(FileStream等)

    Stream 是所有流的抽象基类.流是字节序列的抽象概念. 流涉及到的3个基本操作: 读取流,读取是指从流到数据结构(如字节数组)的数据传输. 写入流,写入是指从数据结构到流的数据传输. 流查找,查找 ...

  5. 十六.maven自动化构建protobuf代码依赖

    protobuf在序列化和反序列化中的优势: 1):序列化后体积相比Json和XML很小,适合网络传输2):支持跨平台多语言3):消息格式升级和兼容性还不错4):序列化反序列化速度很快,快于Json的 ...

  6. Nginx一个server配置多个location(使用alias)

    公司测试环境使用nginx部署多个前端项目.网上查到了两个办法: 在配置文件中增加多个location,每个location对应一个项目比如使用80端口,location / 访问官网: locati ...

  7. Oracle查询一个命名空间下所有表和视图的表名、字段名、字段类型、字段大小,是否可为NULL,主键和注释信息

    使用SQL查询Oracle一个命名空间下所有表和视图的表名.字段名.字段类型.字段大小,是否可为NULL,主键和注释信息. SQL如下,注意需要将'CDFLOOD'更换为您要查询的命名空间: sele ...

  8. Java【基础学习】 之调用构造方法顺序【坑】

    解释:这里的super()仅仅是用来占位的,实际上,必须是严格按照分层初始化的过程:1.先初始化父类X的成员变量,即初始化成员变量Y,打印出:Y2.初始化父类X的构造方法,打印出:X3.父类初始化完成 ...

  9. Kubernetes 学习11 kubernetes ingress及ingress controller

    一.上集回顾 1.Service 3种模型:userspace,iptables,ipvs 2.Service类型 ClusterIP,NodePort NodePort:client -> N ...

  10. cube.js 学习(九)cube 的pre-aggregation

    我们可以使用cube的pre-aggregation 加速数据的查询,以下为一张来自官方的pre-aggregation 架构 参考架构图 pre-aggregation schema preAggr ...