Spring cloud微服务安全实战-5-6实现授权码认证流程(2)

授权服务器,返回给我一个授权码,这里我只需要把授权传回去就可以了。来证明我是这个服务器。
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的信息

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

这样整个改造完成。

结束

原文地址:https://www.cnblogs.com/wangjunwei/p/11964528.html

时间: 2024-10-10 00:14:01

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

Spring Cloud微服务框架 实战企业级优惠券系统

第1章 课程介绍[终于等到你,快来认识我]本章中将对课程中涉及到的技术.工具.业务等进行简单介绍. 第2章 准备工作[工欲善其事,必先利其器]本章中将对课程中使用到的技术工具做介绍,包括Maven.MySQL.Redis.Kafka:会对它们的功能.安装.基本的使用方法进行介绍. 第3章 SpringBoot 开发框架[基础打不牢,学问攀不高]课程主体业务使用SpringCloud框架开发实现,但是SpringCloud基于SpringBoot实现.为便于更顺畅学习,本章中会对SpringBoo

Spring cloud微服务安全实战

第1章 课程导学我们会对整个课程的内容做一个简要的介绍,包括章节的安排,使用的主要技术栈,实战案例的介绍以及前置知识的介绍等内容. 第2章 环境搭建开发工具的介绍及安装,介绍项目代码结构并搭建,基本的依赖和参数设置. 第3章 API安全我们从简单的API场景入手,讲述API安全相关的知识.首先我们会介绍要保证一个API安全都需要考虑哪些问题,然后我们针对这些问题介绍常见的安全机制,我们会针对每种问题和安全机制编写相应的代码,让大家对这些问题和安全机制有一个初步的认识.... 第4章 微服务网关安

Spring cloud微服务安全实战完整教程

本文配套视频教程及资料获取:点击这里 Spring Cloud微服务安全实战 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务场景,解决上述三大问题痛点,并结合实际给出相应解决方案.帮助大家形成对安全问题的系统性思考,实战开发一套可在中小公司落地的完整的安全方案. 学习目标: 技术要点: 环境参数: 本文配套视频教程及资料获取:点击这里 原文地址:https://www.c

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

上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后,才会在前边加一个过滤器去验令牌(配置@EnableResourceServer 配置类) 2,要让他知道自己是什么资源服务器(配置资源服务器ID) 3,配置去哪里验令牌,怎么验令牌,要带什么信息去验 (配置@EnableWebSecurity 配置TokenServices,配置Authentica

Spring cloud微服务安全实战-4-7重构代码以适应真实环境

现在有了认证服务器,也配置了资源服务器.也根据OAuth协议,基于令牌认证的授权也跑通了.基本的概念也有了简单的理解. 往下深入之前,有几个点,还需要说一下 使用scopes来控制权限,scopes可以理解为之前的ACL 第三章的时候自己写的ACL来控制的读写权限.在OAuth协议里面用scopes来实现ACL的权限控制,两方面,首先在服务器这一端,可以针对不同的应用发出去不同权限的令牌, . 比如针对oderApp可以有读权限,也可以有写的权限. 针对orderService发出去的就只有re

Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

授权模式改造成了Authorization code完成了改造的同时也实现了SSO.微服务环境下的前后端分离的单点登陆. 把admin的服务重启.刷新页面 并没有让我去登陆,直接就进入了首页. order的API控制台 只要你在认证服务器上的session没过期.认证服务器就知道你是谁,他就不会让你输入用户名密码了.直接跳回到客户端应用. 一共有三个有效期. 退出操作 退出的时候.现在前端服务器清空session,认证服务器也需要清空session 在前端服务器退出后,再跳转到认证服务器执行退出

Spring cloud微服务安全实战-6-2JWT认证之认证服务改造

首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递令牌.让你不用去写额外的代码 服务器端的改造 看一下认证服务器配置的这个类.这里有个tokenStore,就是令牌的存储器.现在用的是jdbc的TokenStore,令牌是存在数据库里的 我们new  一个jwtTokenStore它 需要一个参数jwtTokenEnhancer 需要set一个ke

Spring Cloud微服务安全实战_4-10_用spring-cloud-zuul-ratelimit做限流

本篇讲网关上的限流 用开源项目spring-cloud-zuul-ratelimit 做网关上的限流 (项目github:https://github.com/marcosbarbero/) 1,在网关项目里,引入限流组件的maven依赖: 2,在网关项目yml配置里,配限流相关配置 github也有相关配置说明:https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit 限流框架限流需要存一些信息,可以存在数据库里,也可以存在red

Spring Cloud微服务安全实战_5-2_基于session的SSO

上一篇将OAuth2授权模式的password模式改造成了授权码模式,并初步实现了一个前后端分离架构下基于session的微服务的SSO.用户在客户端点击登录,会跳转到认证服务器的登录页面进行登录,登录成功后,认证服务器回调到客户端应用的callback方法,并携带了授权码,客户端拿着授权码去认证服务器换取access_token ,客户端拿到access_token后存到自己的session,就认为该用户已登录成功. 上边这个流程是一个基于session的SSO,其中有三个效期: 1,客户端应

Spring cloud微服务安全实战-5-3后端服务改造

本节来实现一个登陆的效果. 需要一个登陆前的页面和登陆后的页面. 直接粘贴过来的代码 这是一个和后台的绑定 后台要有个autenticated的对象来实现绑定,ts内我们定义这个autenticated变量.当autenticated是false的时候,这个hidden就不触发. 方括号绑的是属性,圆括号绑的是方法. ts内我们要定义一个login的方法 双向绑定 后端定义credentials 后端的数据有值了的话.前端的文本框内也会显示上值 为了实现双向绑定还需要引入一些依赖. FormMo