本文共 1906 字,大约阅读时间需要 6 分钟。
什么是oauth
oauth协议为用户资源的授权提供了一个安全的简易的标准,与以往授权不同的是oauth的授权不会使第三方触及到用户的账号信息,第三方不需要使用用户的用户名和密码就可以申请该用户的资源 名词解释 第三方应用程序:客户端 http服务提供商:我们的云笔记产品以及 QQ、微信等都可以称之为“服务提供商”。 资源所有者:用户 用户代理:浏览器 认证服务器:服务提供商专门用来处理认证的服务器, 资源服务器:即服务提供商存放用户生成的资源的服务器。它与认证服务器,可以是同一台服务器,也可以是不同的服务器。简单点说就是资源的访问入口,比如上节中提到的“云笔记服务”和“云相册服务”都可以称之为资源服务器什么是spring security
spring security是spring的一个安全框架,前身为acegi security,可以为spring企业应用系统提供声明式的安全访问控制,spring security基于servlet过滤器,ioc,aop,为web请求和方法调用提供身份确认和授权处理,避免代码的耦合令牌的访问与刷新
Access Token 是客户端访问资源服务器的令牌。拥有这个令牌代表着得到用户的授权。然而,这个授权应该是 临时 的,有一定有效期。这是因为,Access Token 在使用的过程中 可能会泄露。给 Access Token 限定一个 较短的有效期 可以降低因 Access Token 泄露而带来的风险。 然而引入了有效期之后,客户端使用起来就不那么方便了。每当 Access Token 过期,客户端就必须重新向用户索要授权。这样用户可能每隔几天,甚至每天都需要进行授权操作。这是一件非常影响用户体验的事情。希望有一种方法,可以避免这种情况。 于是 oAuth2.0 引入了 Refresh Token 机制 Refresh Token Refresh Token 的作用是用来刷新 Access Token。认证服务器提供一个刷新接口,例如: http://www.funtl.com/refresh?refresh_token=&client_id= 传入 refresh_token 和 client_id,认证服务器验证通过后,返回一个新的 Access Token。为了安全,oAuth2.0 引入了两个措施: oAuth2.0 要求,Refresh Token 一定是保存在客户端的服务器上 ,而绝不能存放在狭义的客户端(例如 App、PC 端软件)上。调用 refresh 接口的时候,一定是从服务器到服务器的访问。 oAuth2.0 引入了 client_secret 机制。即每一个 client_id 都对应一个 client_secret。这个 client_secret 会在客户端申请 client_id 时,随 client_id 一起分配给客户端。客户端必须把 client_secret 妥善保管在服务器上,决不能泄露。刷新 Access Token 时,需要验证这个 client_secret。 客户端授权模式 implicit 简化模式 authorization 授权码模式 resource owner password credentail 密码模式 client credentials 客户端模式RBAC 基于角色的权限控制
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般是多对多的关系目的
在我们的 oAuth2 系统中,我们需要对系统的所有资源进行权限控制, 系统中的资源包括: 静态资源(对象资源):功能操作、数据列 动态资源(数据资源):数据系统的目的就是对应用系统的所有对象资源和数据资源进行权限控制,比如:功能菜单、界面按钮、数据显示的列、各种行级数据进行权限的操控 #
对象关系 权限 系统的所有权限信息。权限具有上下级关系,是一个树状的结构 用户 系统的具体操作者,可以归属于一个或多个角色,它与角色的关系是多对多的关系 角色 为了对许多拥有相似权限的用户进行分类管理,定义了角色的概念,例如系统管理员、管理员、用户、访客等角色。角色具有上下级关系,可以形成树状视图,父级角色的权限是自身及它的所有子角色的权限的综合。父级角色的用户、父级角色的组同理可推。转载地址:http://bikgn.baihongyu.com/