摘要:給定一個作為方法參數傳遞的域對象實例,確保類要綁定合適的權限。對或或檢查與驗證。檢查是否在客戶端的權限范圍內。匹配默認的前綴字符串是的,如果匹配到則授權,如授權范圍。實現類輪詢所有配置的每個配置,并且如果全部是肯定才能授予訪問權限。
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提供了遠程授權驗證與管理。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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....
閱讀 2737·2021-10-09 09:44
閱讀 3550·2019-08-30 15:54
閱讀 2160·2019-08-30 14:16
閱讀 2790·2019-08-30 13:09
閱讀 826·2019-08-30 13:08
閱讀 1280·2019-08-29 16:29
閱讀 1662·2019-08-26 13:57
閱讀 1925·2019-08-26 13:53