3

アプリケーション レルムの openam ポリシー機能を使用してユーザー認証と粗粒度の認証を行いながら、春のセキュリティを使用して細粒度の認証を実行しようとしています。粗粒度とは、サブジェクトを含む単純な URI ルールのことです。きめ細かい承認とは、spring-security-acls を使用して ACL を使用するなど、Web アプリケーション レベルでの承認です。

これを達成するために、私が考えたアプローチは、Spring-Security リファレンス マニュアルで概説されているように **Spring Security PreAuthenticationFilters** を使用することです。この質問の事前認証を読んだ後、私はこの考えを得ました

ラピッド プロトタイピングを行うために、Spring-security-core のプラグインと、OpenAM および openam J2EE ポリシー エージェント インターフェイスの背後にある ACL を備えた Web アプリケーション プラットフォームとして Grails 2.2.3 を選択しました。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)

問題を解決する方法についての手がかり、またはアプローチ自体に関するコメント/提案はありますか?

ご回答ありがとうございます。

4

1 に答える 1

1

エージェント フィルターは、フィルター チェーンの最初のフィルターでなければなりません ... 大丈夫ですか?

はいの場合は、エージェント プロファイルでデバッグ レベルを「メッセージ」に設定し、デバッグ ログを調べる必要があります。エージェントの構成が正しくない可能性があります。

于 2013-08-08T08:29:08.770 に答える