18、用户授权

简介: 用户授权

用户授权

流程图:

流程说明:

1、用户认证通过,认证服务向浏览器cookie写入token( 身份令牌)

2、前端携带token请求用户中心服务获取jwt令牌

前端获取到jwt令牌解析,并存储在sessionStorage

3、前端携带cookie中的身份令牌及jwt令牌访问资源服务

前端请求资源服务需要携带两个token,一个是cookie中的身份令牌,一个是http header中的jwt

前端请求资源服务前在http header上添加jwt请求资源

4、网关校验token的合法性

用户请求必须携带身份令牌和jwt令牌 网关校验redis中user_token的有效期,已过期则要求用户重新登录

5、资源服务校验jwt的合法性并进行授权

资源服务校验jwt令牌,完成授权,拥有权限的方法正常执行,没有权限的方法将拒绝访问。


方法授权

1、首先需要在jwt令牌中包含权限:

在UserDetailServiceImpl类中的loadUserByUsername方法中permissions变量会存取当前登录用户的权限列表,当调用认证登录接口userlogin时候会调用该方法,通过打断点可以查询该用户所拥有的权限,权限名称如下:

course_find_list:课程查询

course_pic_list:课程图片查询

2、在方法加注解授权

要想在资源服务使用方法授权,首先在课程管理服务中配置授权控制

1)添加spring-cloud-starter-oauth2依赖。

2)拷贝授权配置类ResourceServerConfig。

3)拷贝公钥

4)在资源服务controller方法上添加注解PreAuthorize,并指定此方法所需要的权限

例如下边是课程管理接口方法的授权配置,它就表示要执行这个方法需要拥有course_find_list权限

@PreAuthorize("hasAuthority('course_find_list')") 
@Override 
public QueryResult<CourseInfo> findCourseList(@PathVariable("page") int page,              @PathVariable("size") int size, CourseListRequest courseListRequest){
}

5)在ResourceServerConfig类上添加注解,激活方法上添加授权注解

//激活方法上的PreAuthorize注解

@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)


方法授权测试

动态查询用户权限

正常情况的流程是:

1、管理员给用户分配权限,权限数据写到数据库中。

2、认证服务在进行用户认证时从数据库读取用户的权限数据(动态数据)

打开xc_user数据库,其中有xc_user、xc_role、xc_user_role、xc_menu、xc_permission

用户和角色是多对多,用户和权限是多对多关系


什么是细粒度授权?

细粒度授权也叫数据范围授权,即不同的用户所拥有的操作权限相同,但是能够操作的数据范围是不一样的。一个 例子:用户A和用户B都是教学机构,他们都拥有“我的课程”权限,但是两个用户所查询到的数据是不一样的。

本项目有哪些细粒度授权?

比如: 我的课程,教学机构只允许查询本教学机构下的课程信息。 我的选课,学生只允许查询自己所选课。

如何实现细粒度授权?

细粒度授权涉及到不同的业务逻辑,通常在service层实现,根据不同的用户进行校验,根据不同的参数查询不同的 数据或操作不同的数据。


Feign 拦截器

微服务之间使用feign进行远程调用,采用feign拦截器实现远程调用携带JWT。

在首页登录成功后点击课程发布按钮,会调用FeignClientInterceptor拦截器类中的apply方法,在headerName变量中会带有jwt令牌。

前端传递到微服务A,微服务A再远程调用微服务B

每次调用之前携带JWT,首先通过Feign拦截器



目录
相关文章
阿里云RAM角色和自定义角色
阿里云RAM角色和自定义角色
179 1
|
存储 数据库 数据安全/隐私保护
RAM账号快速入门
RAM账号快速入门
505 0
|
机器学习/深度学习 算法 安全
PAI EAS子账号(RAM用户)使用相关权限授予
为实现一站式算法应用,PAI针对在线推理场景提供了在线预测服务PAI-EAS(Elastic Algorithm Service)。支持将模型服务部署在公共资源组或专属资源组,实现基于异构硬件(CPU和GPU)的模型加载和数据请求的实时响应。目前多数企业在使用云上服务时,出于安全和管理考虑都是使用RAM账号。在给于单个身份或一组身份分配不同的权限后,从而实现不同用户拥有不同资源访问权限的目的。很多RAM用户在初次使用PAI EAS过程中因为对于权限的陌生,总是被禁止访问。本文以使用过程中最常见的控制台实例查看做一下简单总结,便于能更好的使用机器学习PAI平台。
367 0
PAI EAS子账号(RAM用户)使用相关权限授予
RAM
RAM
121 0
|
弹性计算 运维 安全
RAM账号权限管理
希望通过本次演讲,让大家更深入了解RAM账号权限管理,以某电商网站项目为例,根据研发、测试、生产环境划分及业务流程,使用阿里云RAM访问控制服务规划实现资源分组、账号用户体系、权限分配、安全加固、定期安全检查等措施的最佳实践。
2063 1
RAM账号权限管理
|
JSON 弹性计算 运维
最佳实践-使用OOS审批授权子账号RAM权限
当通过RAM控制台或OpenApi为RAM用户授权时,权限是即时生效的,这样对于频繁授权或者高权限授予场景来讲,完全没法保障安全性。就此,本文引入一种高效的授权审批保障机制。
1247 0
最佳实践-使用OOS审批授权子账号RAM权限
|
弹性计算 对象存储
使用RAM子账号给OSS授权
展示只读权限和所有者权限
375 0
阿里云RAM子账号与AK
官方链接: https://help.aliyun.com/document_detail/53045.html?spm=a2c4g.11186623.2.40.874d6ff662t9Gh#concept-53045-zh
1669 0
|
弹性计算 数据安全/隐私保护 对象存储
如何用好RAM访问控制中的角色
本文介绍了阿里云访问控制中角色的概念和不同的使用场景,提供了一些使用案例。
3536 0
|
关系型数据库 数据安全/隐私保护 RDS
访问控制-子账号授权
子账号授权RDS标签和下载备份
1205 0