授权是在认证后对资源的权限控制,权限控制很多系统中都需要,但是不同的系统对于权限的敏感程度不同,因而权限的设计实现方式不同。
rbac权限模型可以分为基于角色的权限控制和基于资源的权限控制
-
基于角色的权限访问控制(Role-Based Access Control)
权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。
授权
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
客户端必须得到用户的授权(authorization grant),才能获得令牌(access token)。OAuth 2.0定义了四种授权方式。
授权码模式(authorization code)
简化模式(implicit)
密码模式(resource owner password credentials)
客户端模式(client credentials)
spring-security
spring-security-oauth2实现了oauth的框架,后来迁移到了spring-security5.X,但是去掉了server端.
spring-security利用了filter chain里的 各个filter来拦截请求,但最后会委托给AuthenticationManager认证器和AccessDecisionManager授权器。
认证流程
DaoAuthenticationProvider类里的UserDetails loadedUser = this.getUserDetailsService().loadUserByUsername(username);
调用自定义的UserDetailsService去加载用户信息,然后if (!passwordEncoder.matches(presentedPassword, userDetails.getPassword())){throw new BadCredentialsException}
调用密码加密器去判断验证密码是否正确,否则抛出异常
授权流程