gpt4 book ai didi

grails - 将 OpenAM、tomcat J2EE 策略代理与支持 Spring Security 的 Web 应用程序集成

转载 作者:行者123 更新时间:2023-12-01 04:35:33 26 4
gpt4 key购买 nike

我们正在尝试使用 spring security 进行细粒度授权,同时使用应用程序领域的 openam 策略功能进行用户身份验证和粗粒度授权。我所说的粗粒度是指带有主题的简单 URI 规则。我所说的细粒度授权是指在 Web 应用程序级别,例如使用 ACLs using spring-security-acls

为了实现这一点,我认为一种方法是使用 spring-security 引用手册中概述的 ** Spring Security PreAuthenticationFilters**。看完这个问题我就有了这个想法pre-authentication

为了快速制作原型(prototype),我选择了 Grails 2.2.3 作为 web 应用程序平台,在 OpenAM 和 openam J2EE 策略代理接口(interface)后面带有 spring-security-core 和 acls 的插件。 OpenAM 策略设置为对用户进行身份验证并在策略响应 header 中返回 uid(Ldap 用户 ID)。这映射到响应提供程序中的 USER_ID,并由策略代理作为 HTTP header 发送。

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)

关于如何解决问题的任何线索,或对方法本身的评论/建议?

感谢您的回复。

最佳答案

代理过滤器必须是过滤器链中的第一个……放心吗?

如果是,您必须在代理配置文件中将调试级别设置为“消息”并检查调试日志,很可能是您的代理配置不正确。

关于grails - 将 OpenAM、tomcat J2EE 策略代理与支持 Spring Security 的 Web 应用程序集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18103620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com