资讯专栏INFORMATION COLUMN

源码-Spring Security Oauth2

AWang / 847人阅读

摘要:给定一个作为方法参数传递的域对象实例,确保类要绑定合适的权限。对或或检查与验证。检查是否在客户端的权限范围内。匹配默认的前缀字符串是的,如果匹配到则授权,如授权范围。实现类轮询所有配置的每个配置,并且如果全部是肯定才能授予访问权限。

03.01-源码-Spring Security Oauth2

@(技术-架构)[源码, 权限, Security, Oauth2]

Oauth2 是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。Spring-Security-Oauth2是基于Spring-Security安全框架实现Oauth2的标准授权验证,以下是对Spring-Security-Oauth2的源代码分析。

1、相关包说明

Spring-Security-Core:封装了验收、授权流程核心基础类。
Spring-Security-Web:是基于HTTP实现对安全验证的封装。
Spring-Security-Config:实现了Spring Security命名空间的配置。
Spring-Security-Oauth2:通过Spring Security框架,实现Oauth2标准验证流程。

2、Spring-Security-Core 分析
① 分层说明

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, Collection attributes);

核心类访问控制决策管理AccessDecisionManager
AffirmativeBased实现类轮询所有配置 AccessDecisionVoter的,并且如果有的话AccessDecisionVoter肯定地授予访问权限。
ConsensusBased实现类轮询所有配置 AccessDecisionVoter的,并且如果AccessDecisionVoter肯定大于否定的数量的话就授予访问权限,相等的话就看AbstractAccessDecisionManager.isAllowIfAllAbstainDecisions()方法(默认为false)。
UnanimousBased实现类轮询所有配置AccessDecisionVoter的每个配置,并且如果AccessDecisionVoter全部是肯定才能授予访问权限。

//决策方法,如果决策不通过就抛出异常
void decide(Authentication authentication, Object object,Collection configAttributes) throws AccessDeniedException,InsufficientAuthenticationException;

org.springframework.security.authentication

权限认证处理层,实现了对权限的管理和认证,dao封装了用户信息的访问,encoding封装了对用户密码加密的处理,event实现对授权验证的成功、失败等事件,jaas是对Java Jaas授权API的封装,rcp提供了远程授权验证与管理。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68573.html

相关文章

  • Spring Cloud OAuth 微服务内部Token传递的源码实现解析

    摘要:源码非常简单谈谈实现的问题当请求上线文没有如果调用会直接,这个肯定会报错,因为上下文失败如果设置线程隔离,这里也会报错。导致安全上下问题传递不到子线程中。欢迎关注我们获得更多的好玩实践 背景分析 showImg(https://segmentfault.com/img/remote/1460000018899024?w=494&h=245); 1.客户端携带认证中心发放的token,...

    Michael_Ding 评论0 收藏0
  • Spring Security Oauth2.0 实现短信验证码登录

    摘要:验证码的发放校验逻辑比较简单,方法后通过全局判断请求中是否和手机号匹配集合,重点逻辑是令牌的参数 spring security oauth2 登录过程详解 ​ showImg(https://segmentfault.com/img/remote/1460000012811024); ​ 定义手机号登录令牌 /** * @author lengleng * @date 2018/...

    陆斌 评论0 收藏0
  • 基于spring-security-oauth2实现单点登录(持续更新)

    摘要:认证服务器和浏览器控制台也没有报错信息。这里简单介绍下如何查阅源码,首先全局搜索自己的配置因为这个地址是认证服务器请求授权的,所以,请求认证的过滤器肯定包含他。未完待续,下一篇介绍资源服务器和认证服务器的集成。 基于spring-security-oauth2-实现单点登录 文章代码地址:链接描述可以下载直接运行,基于springboot2.1.5,springcloud Green...

    妤锋シ 评论0 收藏0
  • 前后端分离项目 — SpringSocial 绑定与解绑社交账号如微信、QQ

    摘要:我们以微信为例,首先我们发送一个请求,因为你已经登录了,所以后台可以获取当前是谁,然后就获取到请求的链接,最后就是跳转到这个链接上面去。 1、准备工作 申请QQ、微信相关AppId和AppSecret,这些大家自己到QQ互联和微信开发平台 去申请吧 还有java后台要引入相关的jar包,如下: org.springframework.security....

    tigerZH 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<