我們正在嘗試使用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)
關於如何解決問題的任何線索,或關於方法本身的意見/建議?
感謝您的回覆。
是的。謝謝。我修復了頭部變量。問題在於將身份驗證令牌映射到授予的權限。嘗試瞭解Spring Security手冊的流程。 – user2527121
@ user2527121:嘿,我正在努力實現同樣的目標,請你帶我走完這些步驟。我需要彈簧安全配置部分。 – PavanSandeep