微服务安全(上)

集群环境下如何解决登陆问题
解决方案一:NG的iphash算法
IP绑定 ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问
题。
1 upstream backserver {
2 ip_hash;3 server 192.168.0.14:88;
4 server 192.168.0.15:80;
5 }
缺点:不能充分考虑到各个服务器的性能,有可能同一时刻访问通过ip_hash出来都请求到一台服务器
上,而且这台服务器的性能不行???

解决方案二:集中式Session。
名称解释:?
(1) Third-party application:第三方应用程序,本文中又称"客户端"(client),即上 一节例子中的"云冲印"。?
(2)HTTP service:HTTP服务提供商,本文中简称"服务提供商",即上一节例子中的 微信服务器
(3)Resource Owner:资源所有者,本文中又称"用户"(user)。你?
(4)User Agent:用户代理,本文中就是指浏览器。?
(5)Authorization server:认证服务器,即服务提供商专门用来处理认证的服务器。?
(6)Resource server:资源服务器,即服务提供商存放用户生成的资源的服务器。它与 认证服务器,可以是同一台服务器,也可以是不同的服务器。


2)Oauth2的四种授权模式
a)密码模式 适用的业务场景 客户端应用(手机app) 是高度受信用的,
一般是自己公司开发的app项目。


b)授权码模式(最安全的模式) 业务场景 第三方不授信的,搭建自己的开发能力平
台。
①:获取授权码http://localhost:9999/oauth/authorize?
response_type=code&client_id=portal_app&redirect_uri=http://www.baidu.com&state=abc
参数说明: client_id 认证服务器分配给第三方客户端的appid
response_type:固定格式 值位code
redirect_uri: 用户在认证服务器上登陆成功了 需要回调到 客户端应用上
state: 你传什么给授权服务器 授权服务器原封不动的返回给你2:获取到code,去换取token
http://localhost:9999/oauth/token(Post请求)

C)简化模式(开发中几乎接触不到 适用于 客户端就是一堆js css html 没有前端服务器)

d):客户端模式(开发中几乎用不到,这种模式 用户都没有参与过程)动手搭建微服务认证中心实现微服务鉴权

主要是1,2场景:

搭建环境:


2)添加注解写配置文件
2.1)作为认证服务器,那么就会又认证服务器的配置
写一个配置类 TulingAuthorizationServerConfig 实现AuthorizationServerConfigurerAdapter
添加@EnableAuthorizationServer
AuthorizationServerConfigurerAdapter 类有三个配置方法,我们都需要覆盖
①:第三方客户端配置,配置哪些应用可以来访问我们认证服务器。
他有二种存储模式,一种是内存模式,一种是db模式(用于生产),后面讲
下面的配置解释说明:
为第三方客户端 分配一个client_id为 portal_app,密码为portal_app,他的权限访问是read权限的
我服务器颁发的token 有效期是1一个小时, 我拿着这个token令牌可以访问order-service,product-
service二个微服务。

------------------------------------------------------------------------------------------------------------------------------

认证服务器的登录服务器的,账号和密码,返回的code 给你,理解,认证服务器格尼,原封不断的给登录下来code 之后,获取我们的tocken ,gettoode ,之后的拿到之后的我们就吸纳会code护城tocken,以及回调地址,我们现在带入appid_section,
返回了 getcode 的方式。这就是授权码模式。

当我们传入错的回调地址,返回的回调地址,出现不匹配注册的地址。


资源服务器:
 enablerecouse server 集成它,表示资源的名称,代码,找一下代码,逻辑,资源服务器的,order资源服务器, 资源服务器,read 和wirte 权限。
 不要令牌也可以访问,什么配置,资源服务器要去教研令牌,要知道那个地址,去教研,必须要带入clientsecdet :
 资源服务器表示资源,以及去认证服务器给你配好的吗。通过rebbin 去调用的。
 运行一下程序,
 返回token ,拿到一个订单信息,说一个令牌是非法的。
 访问saveorder ,返回待只有读权限的。
 
怎么来重构? 
1.写了2个注释掉,配置点三方客户端,存储到数据源之后呢,存储到数据库中,有一个表,oath_client-lcinet 表,表id ,这里增加appid ,这里增加资源,授权码模型,
回调的URL,以前配置的那个问题,这是ige该早点
2.我们的tocken 是基于内存的,token 存储,基于数据库的 现在是0oathduh_acces_token。
重启完成后,密码模式所以完成,token 存储到数据库中。
还有一个存放的方法,基于redis 的存储,加一个redis 的存储,toackne 是,生成上建议JWT和redis.
如果使用reids 存储的化,怎么去改,redislcint ,序列化和反序列化,使用JDK自带的,序列化和反序列和工具,点开之后,生成类图,
继承关系,重写了序列化和反序列化的方法,怎么加进去的,还有一种方法是显示后置处理器的方法,管理起来,从容器中,后置处理器思想。
重启之后,序列化和反序列化之后,去看一下。


原有的架构有什么缺陷呢?
每一台服务都要去配,网关统一授权认证。改正缺陷之后,带入clinetid,sei 请求token, 返回token,返回给前端工程,此时前程请求后端服务时候,交给网关,
教研给token,认证中心。
校验不通过,查数据库,RBAC的模型,

改动点:基于上面二个图
第一,我们需要加入网关
第二,我们的微服务不再做权限控制,把权限控制功能放到网关上.
第三,授权服务器引入rbac模型权限控制。


RBAC:
用户表,角色表,权限表, 用户角色关联表,角色权限关联表。
还有一个权限表,还有一个路径表,

换成另外一个JDBC的方法,激活的方法,第1个服务真正的语句来查询我们的脚本,关联5张表进行查询,张三能访问对应的访问。
权限放到User 中,业务字段,加上查询数据库的,密码不要用验证,认证服务器网关逻辑的用什么做的,ggoabla builder ,全局的buidler ,健全的
和认证的,初始化的方法,主要的核心逻辑是builder 请求的路径,判断要不要校验,要校验的化,请求头,解析出来,没带的化,教研的tockeninfo <什么意思呢?
校验token 封装的我们的请求头,网关要去教研的的网关,教研,checkout ,check tocken 返回是路径,哪些服务,哪些是用户,权限,激活的,appid ,返回一个数据机构给我
们写一个tockeinfo 类,如果校验异常的话,OrderSever 我们认证的化,鉴权的路径要不要需要泛型的,解析出来是不是有权限的,和路径去匹配,如果不匹配,就是报权限不足,
执行的顺序,判断权限有没有,1个是0 ,1个是1 。
少了鉴权,测试一下。

那么做统一异常处理呢?
 spring boot 如何处理全局异常呢?
 spring boot 之列用,处理异常,说过,全局error MVC 异常处理MVC的,网关是不是有tomcat 版本上。error response 等,处理JSOn等,重写方法。写了一个切面,
 判断的异常。根据异常种类有进行分析。

 
 
发布了595 篇原创文章 · 获赞 11 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/xiamaocheng/article/details/104735686