2013-08-07 66 views
2

我們正在嘗試使用spring安全性進行細粒度授權,同時使用應用領域的openam策略功能進行用戶身份驗證和粗粒度授權。我的意思是粗粒度的是帶有主題的簡單URI規則。我的意思是細粒度的授權是在Web應用程序級別,例如使用ACL使用spring-security-acls將OpenAM,tomcat J2EE策略代理與啓用Spring Security的Web應用程序集成

爲了達到這個目的,我認爲的方法是使用Spring Security PreAuthenticationFilters **,如Spring-Security參考手冊所述。我本以爲讀了這個問題pre-authentication

要做到快速原型後,我選擇的Grails 2.2.3作爲Web應用程序平臺,插件彈簧安全的核心和ACL背後OpenAM和openam J2EE策略代理接口。 OpenAM策略設置爲對用戶進行身份驗證,並返回策略響應頭中的uid(Ldap用戶標識)。這將映射到響應提供程序中的USER_ID,並由策略代理作爲HTTP標頭髮送。

Grails應用程序resources.groovy看起來是這樣的:

beans = { 
    preAuthenticatedGrantedAuthoritiesUserDetailsService(PreAuthenticatedGrantedAuthoritiesUserDetailsService) 



preAuthenticatedAuthenticationProvider(PreAuthenticatedAuthenticationProvider) { 
    preAuthenticatedUserDetailsService = ref('preAuthenticatedGrantedAuthoritiesUserDetailsService') 
} 

requestHeaderAuthenticationFilter(RequestHeaderAuthenticationFilter) { 
    authenticationManager = ref('authenticationManager') 
    principalRequestHeader = 'USER_ID' 
} 
} 

BootStrap.groovy中看起來是這樣的:

def init = { 
    servletContext -> 

    SpringSecurityUtils.clientRegisterFilter('requestHeaderAuthenticationFilter',SecurityFilterPosition.PRE_AUTH_FILTER); 
} 

當我在本地設置測試這一點,我得到錯誤...

org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException: USER_ID header not found in request. 
    at org.springframework.security.web.authentication.preauth.RequestHeaderAuthenticationFilter.getPreAuthenticatedPrincipal(RequestHeaderAuthenticationFilter.java:43) 
    at org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doAuthenticate(AbstractPreAuthenticatedProcessingFilter.java:98) 
    at org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:86) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
    at org.codehaus.groovy.grails.plugins.springsecurity.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:79) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 

關於如何解決問題的任何線索,或關於方法本身的意見/建議?

感謝您的回覆。

回答

1

代理過濾器必須是過濾器鏈中的第一個......有保證嗎?

如果是,則必須在代理配置文件中將調試級別設置爲'message'並檢查調試日誌,很可能您的代理配置不正確。

+0

是的。謝謝。我修復了頭部變量。問題在於將身份驗證令牌映射到授予的權限。嘗試瞭解Spring Security手冊的流程。 – user2527121

+0

@ user2527121:嘿,我正在努力實現同樣的目標,請你帶我走完這些步驟。我需要彈簧安全配置部分。 – PavanSandeep

相關問題