一 oauth介绍
1.0 疑问汇总
1.使用jwttoken进行令牌传输,资源服务器在本地怎么验证token?
1.1 oauth的基础内容
1.1.1 oauth是什么
1.1.2 oauth的角色
1.1.3 oauth的认证流程
1.1.4 oauth的4种模式
1.2 为何要用oauth2.0
1.介绍单体架构 使用sesion保存会话信息的情况
2.前后端分离项目,调用方式
session架构不适合前后端分离项目
3.解决办法,引出oauth2.0
1.3 待验证
配置文件配置了端口喝上下文路径
访问的时候为: http://localhost:8090/auth/lgoin 如果没有配置/auth这一层级,是不是为
http://localhost:8090/lgoin
二 案例搭建
2.1 搭建父工程
2.2 搭建认证中心服务
2.2.1 认证中心的安全和认证配置
1.认证中心的配置
2.安全配置
3.访问端点
所谓访问端点就是 提供访问的url接口地址
4.测试4种验证模式的验证情况
5.密码模式需要在配置文件中添加:authenticationManager(xxxx) 实例
6.客户端模式
2.2.2 刷新令牌
使用一段时间后,token过期后,需要获取新的token,携带参数以及需要的配置
2.2.3 redis管理令牌
添加到容器
2.2.4 jdbc管理令牌
2.2.5 jdbc管理授权码
2.2.6 保存客户端信息
2.2.8 验证认证信息端点
2.2.9 基于RBAC查询数据库认证
2.3 资源管理器服务搭建
2.3.1 原理概述
资源服务服务器实际上就是要调用的各个微服务,如订单服务,商品服务,会员服务等。在微服务的架构中,每个微服务就是资源,当用户请求某个微服务资源时,首先通过认证服务器进行认证与授权,通过后才可以访问对应的资源。
2.3.2 搭建资源服务工程
2.3.3 请求资源服务器测试
1.不带token直接访问
2.携带token进行访问
2.3.4 设置资源的请求范围
禁用session
2.4 使用jwtToken进行认证授权
2.4.1 为何要使用jwt
每次访问资源服务的时候,都要验证token的合法性,远程调用认证服务中验证token的合法性。如果访问量较大影响系统的性能。解决办法使用jwt,jwt包含了用户的基本信息,客户端携带jwt访问资源,资源服务器会通过事先约定好的算法进行解析出来,然后对jwt令牌进行校验,不需要每次远程请求认证服务器。
2.4.2 认证服务配置jwt的对称秘钥
如下图:
每一个访问资源服务器都要经过此方法进行验证token的合法性。这样会造成认证服务器的压力过大,因此需要一种机制解决此种情况。使用jwt可以直接在资源服务器中,自身进行验证,无需再调用认证中心服务的连接进行验证。
改为:
注册到容器中
访问:
2.4.3 资源配置jwt的对称秘钥
1.注释掉调用认证服务代码
2.新增jwt认证
3.容器注册
2.4.4 认证服务配置jwt的非对称秘钥
2.4.5 资源服务配置jwt的非对称秘钥
三 oauth2.0分布式认证授权
3.1 分布式认证授权流程
3.2 eureka注册中心的搭建
3.3 资源服务器和认证服务器配置注册到eureka中
1.配置pom依赖
2.配置yml文件
3.启动类添加注解
3.4 配置网关zuul
3.4.1.基础网关配置
3.4.2 .网关配置资源服务配置类
1.配置放行和过滤判断的路径
3.4.3.网关安全配置类
1.配置springsecurityconfig类
3.4.4.认证过滤器的配置
2.跨域解决
3.5.资源服务进行解析并授权
3.5.1 过滤器实现授权
在微服务中接收到网关转发过来的token后,需要我们构建一个Authentication对象来完成微服务的认证与授权;这样这个微服务就可以根据用户所拥有的权限,来判断对应的资源是否可以被用户访问。
2.封装Authentication
3.验证访问
3.6.client1和client2系统配置到网关网关整合单点登录
1.配置注册eureka的信息
2.修改认证服务的端口,改成为网关的端口7001
3.7 客户端资源服务接口携带令牌token
2.配置OAuth2RestTemplate
3.client1 请求 资源服务器