在我使用Apache Shiro進行AuthC和AuthZ的Web應用程序中,我有兩個身份驗證領域:一個用於常規Web界面(稱爲SsoRealm
)對於使用API令牌的REST API(稱爲RestRealm
)。由兩個域進行身份驗證的主體具有不相關的權限(和AuthenticationTokens
)。如果沒有預先存在的會話並且API調用通過REST接口到達,則一切正常,並且認證(和授權)通過RestRealm
發生。但是,如果以前通過 SsoRealm
進行了身份驗證的現有會話未通過RestRealm
發生身份驗證嘗試,並且連續授權檢查(使用Subject.isPermitted
)由於主題來自錯誤領域而失敗。Shiro:即使現有會話已通過其他領域的身份驗證,強制第二領域身份驗證
相應的認證過濾器被註冊爲(使用四郎吉斯):
addFilterChain("/api/x/*/y", REST_AUTH, NO_SESSION_CREATION);
addFilterChain("/**", SSO_AUTH);
有什麼我可以做給力的「正確」的境界重認證?
會定製AuthenticationStrategy
幫助(即,是否該AuthenticationStrategy
合同允許的策略:「如果RestRealm
參與,在RestRealm
認證必須成功」的實現)? AFAICS ModularRealmAuthenticator.doMultiRealmAuthentication
不會再次被調用,如果有一個現有的認證會話...