1

こんにちは、Spring セキュリティ
の初心者です。私の仕事は、x509 クライアント証明書から取得したユーザー名を照合して、Active Directory に対してユーザーを認証することです。これまでのところ、ssl相互認証を有効にしました

上記の部分は正常に機能しており、x509 参照と Active Directory 構成に関連するすべてを構成した security.xml ファイルがあります。

      <global-method-security secured-annotations="enabled" />

             <http > 
              <intercept-url pattern="/**" access="ROLE_USER,ROLE_ANONYMOUS" requires-     channel="https"/>
     <intercept-url pattern="/UserLogin/*"  access="ROLE_ADMIN,ROLE_USER" requires-channel="https"/>
         <x509 subject-principal-regex="CN=(.*?)," user-service-ref="ldapUserService" />  
</http>

<authentication-manager>
         <authentication-provider user-service-ref="ldapUserService" />
 </authentication-manager>

  <bean:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
  <bean:constructor-arg value="ldap://ActiveDirectoryURL:389/CN=example,DC=net"/>
  <bean:property name="userDn" value="mkanaka@example.local"/>
<bean:property name="password" value="secuera1SMK"/>
</bean:bean> 

<bean:bean name="ldapUserService" class="org.springframework.security.ldap.userdetails.LdapUserDetailsService">
    <bean:constructor-arg ref="ldapUserSearch"/>
    <bean:constructor-arg ref="ldapAuthoritiesPopulator"/>
</bean:bean>
<bean:bean name="ldapUserSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
    <bean:constructor-arg value=""/>
    <bean:constructor-arg value="(&amp;(sAMAccountName={0})(objectclass=Users))"/>
    <bean:constructor-arg ref="contextSource" />
</bean:bean>
<bean:bean name="ldapAuthoritiesPopulator" 

class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
    <bean:constructor-arg ref="contextSource" />
    <bean:constructor-arg value="" />
    <bean:property name="groupSearchFilter" value="member={0}" />
    <bean:property name="searchSubtree" value="true" />
</bean:bean>

今私が直面している問題は、SecurityContextHolder.getContext().getAuthentication().getPrincipal(); を取得しようとしたときです。戻り値の型はuserDetails (ロギング中に使用される証明書の詳細) ではなく文字です。私はTomcat 7、Spring security 3.1を使用して います。何が問題なのか、この点で私を助けてください

4

1 に答える 1

0

この構成では、証明書から抽出されるユーザー名は「Mohankumar Kanaka」になり、これが Spring Security が認証に使用しようとするものです。

LDAP 構成を使用して、これに一致する属性を持つディレクトリ エントリを検索しsAMAccountNameます (これは見つかりません)。

証明書内の名前を Active Directory エントリにマッピングする何らかの方法が必要になります。Spring Security が自動的にそれを行う方法はありません。簡単に抽出できるように、証明書のサブジェクト名の一部が AD ユーザー名と一致していることが理想的です。

于 2013-05-16T12:18:22.670 に答える