摘要:给定一个作为方法参数传递的域对象实例,确保类要绑定合适的权限。对或或检查与验证。检查是否在客户端的权限范围内。匹配默认的前缀字符串是的,如果匹配到则授权,如授权范围。实现类轮询所有配置的每个配置,并且如果全部是肯定才能授予访问权限。
03.01-源码-Spring Security Oauth2
@(技术-架构)[源码, 权限, Security, Oauth2]
Oauth2 是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。Spring-Security-Oauth2是基于Spring-Security安全框架实现Oauth2的标准授权验证,以下是对Spring-Security-Oauth2的源代码分析。
Spring-Security-Core:封装了验收、授权流程核心基础类。
Spring-Security-Web:是基于HTTP实现对安全验证的封装。
Spring-Security-Config:实现了Spring Security命名空间的配置。
Spring-Security-Oauth2:通过Spring Security框架,实现Oauth2标准验证流程。
org.springframework.security.access
权限访问处理层,包含了访问权限annotation的配置注解,访问验证的事event,访问权限配置的表达式解析expression,对访问权限的方法拦截器intercept,权限方法注解的实现method,验证的post过程prepost,还有核心的授权方法与管理vote。
核心类访问决策器AccessDecisionVoter
AbstractAclVoter:提供编写域对象ACL选项的帮助方法,没有绑定到任何特定的ACL系统。
AclEntryVoter:给定一个作为方法参数传递的域对象实例,确保类要绑定合适的权限AclService。
AuthenticatedVoter:对 IS_AUTHENTICATED_FULLY或IS_AUTHENTICATED_REMEMBERED或 IS_AUTHENTICATED_ANONYMOUSLY检查与验证。
ClientScopeVoter:[Oauth2] 检查是否在客户端的权限范围内。
Jsr250Voter:通过JSR-250配置的注解进行授权。
PreInvocationAuthorizationAdviceVoter:使用@PreFilter和@PreAuthorize注释生成的PreInvocationAuthorizationAdvice来授权
RoleVoter:匹配默认的前缀字符串是ROLE_的ConfigAttribute,如果匹配到则授权,针对角色的授权。
RoleHierarchyVoter:扩展RoleVoter使用RoleHierarchy定义来确定在授权给当前用户的角色。
ScopeVoter:匹配默认的前缀字符串是SCOPE_的ConfigAttribute,如果匹配到则授权,如:授权范围SCOPE_READ、SCOPE_WRITE。
int ACCESS_GRANTED = 1; //决策结果-允许 int ACCESS_ABSTAIN = 0; //决策结果-放弃 int ACCESS_DENIED = -1; //决策结果-拒绝 //决策方法 int vote(Authentication authentication, S object, Collectionattributes);
核心类访问控制决策管理AccessDecisionManager
AffirmativeBased实现类轮询所有配置 AccessDecisionVoter的,并且如果有的话AccessDecisionVoter肯定地授予访问权限。
ConsensusBased实现类轮询所有配置 AccessDecisionVoter的,并且如果AccessDecisionVoter肯定大于否定的数量的话就授予访问权限,相等的话就看AbstractAccessDecisionManager.isAllowIfAllAbstainDecisions()方法(默认为false)。
UnanimousBased实现类轮询所有配置AccessDecisionVoter的每个配置,并且如果AccessDecisionVoter全部是肯定才能授予访问权限。
//决策方法,如果决策不通过就抛出异常 void decide(Authentication authentication, Object object,CollectionconfigAttributes) throws AccessDeniedException,InsufficientAuthenticationException;
org.springframework.security.authentication
权限认证处理层,实现了对权限的管理和认证,dao封装了用户信息的访问,encoding封装了对用户密码加密的处理,event实现对授权验证的成功、失败等事件,jaas是对Java Jaas授权API的封装,rcp提供了远程授权验证与管理。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/68573.html
摘要:源码非常简单谈谈实现的问题当请求上线文没有如果调用会直接,这个肯定会报错,因为上下文失败如果设置线程隔离,这里也会报错。导致安全上下问题传递不到子线程中。欢迎关注我们获得更多的好玩实践 背景分析 showImg(https://segmentfault.com/img/remote/1460000018899024?w=494&h=245); 1.客户端携带认证中心发放的token,...
摘要:验证码的发放校验逻辑比较简单,方法后通过全局判断请求中是否和手机号匹配集合,重点逻辑是令牌的参数 spring security oauth2 登录过程详解 showImg(https://segmentfault.com/img/remote/1460000012811024); 定义手机号登录令牌 /** * @author lengleng * @date 2018/...
摘要:认证服务器和浏览器控制台也没有报错信息。这里简单介绍下如何查阅源码,首先全局搜索自己的配置因为这个地址是认证服务器请求授权的,所以,请求认证的过滤器肯定包含他。未完待续,下一篇介绍资源服务器和认证服务器的集成。 基于spring-security-oauth2-实现单点登录 文章代码地址:链接描述可以下载直接运行,基于springboot2.1.5,springcloud Green...
摘要:我们以微信为例,首先我们发送一个请求,因为你已经登录了,所以后台可以获取当前是谁,然后就获取到请求的链接,最后就是跳转到这个链接上面去。 1、准备工作 申请QQ、微信相关AppId和AppSecret,这些大家自己到QQ互联和微信开发平台 去申请吧 还有java后台要引入相关的jar包,如下: org.springframework.security....
阅读 2690·2021-10-09 09:44
阅读 3498·2019-08-30 15:54
阅读 2085·2019-08-30 14:16
阅读 2773·2019-08-30 13:09
阅读 804·2019-08-30 13:08
阅读 1247·2019-08-29 16:29
阅读 1638·2019-08-26 13:57
阅读 1902·2019-08-26 13:53