【问题标题】:Integrating OpenAM, tomcat J2EE policy agent with Spring Security-enabled web application将 OpenAM、tomcat J2EE 策略代理与启用 Spring Security 的 Web 应用程序集成
【发布时间】:2013-08-08 20:14:30
【问题描述】:

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

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

后,我有了这个想法

为了进行快速原型设计,我选择了 Grails 2.2.3 作为 web 应用程序平台,其中包含用于 spring-security-core 的插件以及 OpenAM 和 openam J2EE 策略代理接口后面的 acl。 OpenAM 策略设置为对用户进行身份验证并在策略响应标头中返回 uid(Ldap 用户 ID)。这将映射到响应提供程序中的 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)

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

感谢您的回复。

【问题讨论】:

    标签: grails spring-security openam


    【解决方案1】:

    代理过滤器必须是过滤器链中的第一个...确定吗?

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

    【讨论】:

    • 是的。谢谢。我修复了 header 变量。问题在于将身份验证令牌映射到授予的权限。试图从 Spring Security 手册中理解流程。
    • @user2527121 :嘿,我正在尝试实现同样的目标,请您指导我完成这些步骤。我需要 spring 安全配置部分。
    猜你喜欢
    • 2016-10-25
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2015-05-10
    • 2016-12-26
    • 1970-01-01
    • 2012-05-27
    • 2011-02-28
    相关资源
    最近更新 更多