源碼-Spring Security Oauth2

03.01-源碼-Spring Security Oauth2

@(技術-架構)[源碼, 權限, Security, Oauth2]spring

Oauth2 是一個開放標準,容許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯繫人列表),而無需將用戶名和密碼提供給第三方應用。Spring-Security-Oauth2是基於Spring-Security安全框架實現Oauth2的標準受權驗證,如下是對Spring-Security-Oauth2的源代碼分析。express


一、相關包說明

Spring-Security-Core:封裝了驗收、受權流程核心基礎類。
Spring-Security-Web:是基於HTTP實現對安全驗證的封裝。
Spring-Security-Config:實現了Spring Security命名空間的配置。
Spring-Security-Oauth2:經過Spring Security框架,實現Oauth2標準驗證流程。安全

二、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<ConfigAttribute> attributes);

核心類訪問控制決策管理AccessDecisionManager
AffirmativeBased實現類輪詢全部配置 AccessDecisionVoter的,而且若是有的話AccessDecisionVoter確定地授予訪問權限。
ConsensusBased實現類輪詢全部配置 AccessDecisionVoter的,而且若是AccessDecisionVoter確定大於否認的數量的話就授予訪問權限,相等的話就看AbstractAccessDecisionManager.isAllowIfAllAbstainDecisions()方法(默認爲false)。
UnanimousBased實現類輪詢全部配置AccessDecisionVoter的每一個配置,而且若是AccessDecisionVoter所有是確定才能授予訪問權限。ide

//決策方法,若是決策不經過就拋出異常
void decide(Authentication authentication, Object object,Collection<ConfigAttribute> configAttributes) throws AccessDeniedException,InsufficientAuthenticationException;
  • org.springframework.security.authentication

權限認證處理層,實現了對權限的管理和認證,dao封裝了用戶信息的訪問,encoding封裝了對用戶密碼加密的處理,event實現對受權驗證的成功、失敗等事件,jaas是對Java Jaas受權API的封裝,rcp提供了遠程受權驗證與管理。post

相關文章
相關標籤/搜索