认证与授权 02(项目中应用)

1.项目中的认证与授权

认证采用了经典的账号密码, 授权采用了oauth2

没有进行支持openID, 而是直接用access_token代替了openID, 因为引入openID,会使系统变得庞大复杂,所以登录与授权融合成了一个接口。

客户端获取授权需要提交oauth2资源的账号密码, 与堃方系统用户的账号密码。

服务器验证成功后,会颁发一个具有时效的oauth2的access_token,客户端每次访问资源时,需要携带access_token,服务器会判断访问的资源是否拥有权限。


2.项目中怎么用?

2.1.外部客户端怎么获取用户?
 1. 获取令牌
		请求地址 http://网关地址/oauth/token
			head参数 Authorization = Basic  oauth账号:oauth密码 (账号:密码是用base64加密的)
			body参数 username = 用户账号
			body参数 password = 用户密码
			body参数 grant_type = password (oauth密码验证方式)
			.
		返回
		   {
			 "access_token": "1d3fb4c8-b128-4956-9346-1e7474e4df35",
			 "token_type": "bearer",
			 "expires_in": 43175,
			 "scope": "app"
			 }
			 .
  2. 客户端将令牌存储起来
 		目前存储在客户端的cookie中
		.
  3. 使用令牌
		客户端请求可以用下面3种方式携带token请求
		head携带 Authorization:Bearer 526d690d-5b7e-4680-94b6-4d6ffad52aab
		URL携带 access_token=526d690d-5b7e-4680-94b6-4d6ffad52aab
		cookie携带 Cookie:access_token=526d690d-5b7e-4680-94b6-4d6ffad52aab
		.
		目前文件预览是cookie携带,websocket是URL携带,其他请求是head携带
		.
  4. 后台返回数据(结束)

2.2.微服务下的api调用链

利用网关统一管理所有服务,(管理要求)所有服务只允许通过网关访问,

执行顺序是 : 客户端 -> 网关 -> 业务模块

kf-zuul: 负责网关(统一控制资源访问权限)
kf-imes-auth: 负责认证授权(控制登录流程)
kf-imes-connect: 负责保存客户端的链接
其他 :业务模块


2.3.微服务之间的关系

在这里插入图片描述


2.4.一次登录请求在后台的处理流程

在java标准中, 用户实体被称抽象为身份(Principal),java servlet定义了Principal对象与getUserPrincipal()方法,别的概念(比如oauth,openId)都是具体实现,与javaServlet(j2EE)无关。

1. 客户端调用 http://${kf-zuul}/oauth/token 接口(这个是网关地址)
2. kf-zuul网关服务将所有 oatuh/* 的请求转发到 kf-auth授权服务
3. (认证过程)kf-auth服务 依次执行Spring的Filter过滤器,
过滤器作用
1.SecurityContextPersistenceFilter实现身份持久化. 可以数据库持久,redis持久
2.HeaderWriterFilter写入http头部字段。比如协议相关的,缓存相关的,安全相关等等
3.BasicAuthenticationFilter处理请求头字段 Authorization,Basic。 转换为账号密码用ClientDetailsUserDetailsService查oauth_client_details表验证
4.SecurityContextHolderAwareRequestFilter替换HttpRequest对象,实现从HttpRequest获取当前用户
5.AnonymousAuthenticationFilter如果到这里,身份还是空的,则给一个身份为anonymousUser的匿名用户
6.FilterSecurityInterceptor安全授权拦截器, 包装了ProviderManager,ProviderManager里有N个AuthenticationProvider对象, 我们系统用的是DaoAuthenticationProvider,我们在DaoAuthenticationProvider中对请求参数进行了查账号(自定义查库实现)与校验密码(框架实现)
4. (授权过程)kf-auth服务 执行Spring的Servlet. 此时已经拥有了身份,转到了由spring实现的oauth/token接口控制器,这个接口实现了oauth协议(token的生成,返回数据的格式)
5. 网关收到相应,将结果转发给客户端。

2.5.内部微服务怎么获取用户?
调用下面接口即可

在这里插入图片描述


3.项目中怎么配置

3.1.网关的配置(访问权限控制配置,与登录接口配置,与获取用户信息配置)
下图是配置访问逻辑的代码

在这里插入图片描述

在这里插入图片描述

spring默认实现了以下几个接口(包含登录获取token接口)

在这里插入图片描述

下面是获取用户信息配置

在这里插入图片描述


3.2.auth服务的配置(编写登录方法,处理登录后的回调)
下图是登录方法

在这里插入图片描述

下图是登录回调(登录成功后,登录失败后)

在这里插入图片描述


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值